Files
Database/FAC/FAC_PACF.SRC
Erik Groener 616b7e0b51 UWVA#63361 FIP: Afmeldteksten importbestand
svn path=/Database/trunk/; revision=49029
2020-12-01 14:23:35 +00:00

20974 lines
881 KiB
Plaintext
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
*/
-- Procedures om catalogi in te lezen en te verwerken
/* Formatted on 25-7-2011 10:40:10 (QP5 v5.115.810.9015) */
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 (1) := ';';
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;
/
/* Formatted on 19-7-2011 17:34:34 (QP5 v5.115.810.9015) */
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 VARCHAR2 (100);
v_bedr_naam VARCHAR2 (100);
-- 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;
/
/* Formatted on 13/08/2008 09:46 (Formatter Plus v4.8.7) */
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 (1);
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 := ';';
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;
/
/* Formatted on 13/08/2008 12:46 (Formatter Plus v4.8.7) */
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.getDefaultBehandelgroep(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
/* Formatted on 9-7-2013 10:22:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE fac_import_onrgoed1 (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
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_gebouw_code VARCHAR2 (255); -- 10
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_alg_kenmerkwaarde1 VARCHAR2 (255);
v_alg_kenmerkwaarde2 VARCHAR2 (255);
v_alg_kenmerkwaarde3 VARCHAR2 (255);
v_alg_kenmerkwaarde4 VARCHAR2 (255);
v_alg_kenmerkwaarde5 VARCHAR2 (255);
v_alg_kenmerkwaarde6 VARCHAR2 (255);
v_alg_kenmerkwaarde7 VARCHAR2 (255);
v_alg_kenmerkwaarde8 VARCHAR2 (255);
v_alg_kenmerkwaarde9 VARCHAR2 (255);
v_alg_kenmerkwaarde10 VARCHAR2 (255);
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', 'S', 'X', 'B', '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', 'S', 'X', 'B', '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_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_gebouw_naam);
fac.imp_getfield (v_newline, c_delim, v_srtgebouw_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_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) LIKE 'REGIO%'
AND UPPER (v_district_omschrijving) LIKE 'DISTRICT%'
AND UPPER (v_locatie_code) = 'LOCATIECODE'
AND UPPER (v_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_locatie_adres) = 'BEZOEKADRES'
AND UPPER (v_locatie_post_adres) = 'POSTADRES'
AND UPPER (v_locatie_post_land) LIKE 'LAND%'
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,
'W',
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,
'W',
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,
'W',
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,
'W',
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 := '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,
'W',
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,
'W',
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 := '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 := '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) > 15
THEN
v_locatie_verantw_tel := SUBSTR (v_locatie_verantw_tel, 1, 15);
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;
-- 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_gebouw_code,
alg_gebouw_naam,
alg_srtgebouw_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_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_gebouw_code,
v_gebouw_naam,
v_srtgebouw_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,
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;
/
/* Formatted on 9-7-2013 11:48:12 (QP5 v5.115.810.9015) */
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(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 VARCHAR2 (1);
v_kenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_waarde VARCHAR2 (255);
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_onrgoedkenmerk_key NUMBER;
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', '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 [' || p_waarde || ']';
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 [' || v_waarde || ']';
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 [' || v_waarde || ']';
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***
-- ***********
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***
-- **************
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 object!
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_gebouw_code,
alg_gebouw_naam,
alg_srtgebouw_key)
VALUES (v_locatie_key,
recGebouw.alg_gebouw_code,
recGebouw.alg_gebouw_naam,
v_srtgebouw_key)
RETURNING alg_gebouw_key INTO v_gebouw_key;
v_srtnoti_code := 'ALGGNE';
v_count_new := v_count_new + 1;
ELSE -- bijwerken object!
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;
/
/* Formatted on 11-3-2010 16:19:44 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE fac_import_onrgoed2 (p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
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 (255); -- 255
v_alg_kenmerkwaarde1 VARCHAR2 (255);
v_alg_kenmerkwaarde2 VARCHAR2 (255);
v_alg_kenmerkwaarde3 VARCHAR2 (255);
v_alg_kenmerkwaarde4 VARCHAR2 (255);
v_alg_kenmerkwaarde5 VARCHAR2 (255);
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', 'S', 'X', 'B', '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', 'S', 'X', 'B', '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';
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) > 10
THEN
v_ruimte_nr := SUBSTR (v_ruimte_nr, 1, 10);
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, 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)
)
);
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 (1) := ';';
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 VARCHAR2 (1);
ccount NUMBER;
v_waarde VARCHAR2 (255);
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
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', '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 [' || p_waarde || ']';
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;
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 (1) := ';';
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);
-- 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);
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_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
)
VALUES (
v_bedrijf_naam,
v_afdeling_naam,
v_afdeling_naam_parent,
v_afdeling_omschrijving,
v_kostenplaats_nr
);
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 (1) := ';';
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
,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
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
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
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
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
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: <b>'||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: <b>'||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
)
values
(recAfdeling1.prs_afdeling_naam
,recAfdeling1.prs_afdeling_omschrijving
,v_bedrijf_key
,v_prs_afdeling_parentkey
,v_kostenplaats_key
);
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: <b>'||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 (1) := ';';
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;
/
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;0;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46';
prs.import_perslid(p_import_key, v_seq_of_columns, 'Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtenummer;Werkplekvolgnummer;Omschrijving;Afdelingscode;PersoonAchternaam;Tussenvoegsel;Voorletters;Voornaam;Titel/Aanhef;Telefoonnummer;Mobiel;Email;Functie;Personeelsnummer;Loginnaam;Password%');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_perslid (
p_import_key IN NUMBER
) IS
BEGIN
prs.update_perslid (p_import_key, 'NR', 'A');
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;
/
--//////////////////////////////////////////////////MLD IMPORT STUFF///////////////////////////////////////////
CREATE OR REPLACE PROCEDURE fac_import_mld (
p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
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_urgentie VARCHAR2(255); -- N4,2
v_stdmelding_uitvoertijd VARCHAR2(255); -- N3
v_stdmelding_uitvoertijd1 VARCHAR2(255); -- N3
v_stdmelding_uitvoertijd2 VARCHAR2(255); -- N3
v_stdmelding_uitvoertijd4 VARCHAR2(255); -- N3
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
-- Overige velden (alleen gebruikt voor numeriek-validatie)
v_stdmelding_urgentie_n mld_stdmelding.mld_stdmelding_t_accepttijd.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;
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_urgentie); -- acceptatietijd
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
--
-- 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_urgentie := TRIM(v_stdmelding_urgentie);
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_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_urgentie
|| '|'
|| 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
|| '| ';
-- 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_srtdiscipline_omschrijving) = 'VAKGROEPTYPE'
AND UPPER (v_discipline_omschrijving) = 'VAKGROEP'
AND UPPER (v_stdmelding_omschrijving) = 'STANDAARDMELDING'
AND UPPER (v_stdmelding_uitvoertijd4) = 'UITVOERTIJD LAAG'
AND UPPER (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_urgentie_n := fac.safe_to_number (v_stdmelding_urgentie);
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_urgentie
|| ']'
);
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 ('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;
--
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;
--
-- 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_urgentie, /* BEWUST */
mld_stdmelding_uitvoertijd, /* BEWUST */
mld_stdmelding_uitvoertijd1, /* BEWUST */
mld_stdmelding_uitvoertijd2, /* BEWUST */
mld_stdmelding_uitvoertijd4, /* BEWUST */
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
)
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_urgentie, /* BEWUST */
v_stdmelding_uitvoertijd, /* BEWUST */
v_stdmelding_uitvoertijd1, /* BEWUST */
v_stdmelding_uitvoertijd2, /* BEWUST */
v_stdmelding_uitvoertijd4, /* BEWUST */
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_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 (1) := ';';
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,
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
)
VALUES ('MLD',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1, srtdiscipline_key
) 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;
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 1, 6 ,7;
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 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;
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_urgentie), NULL) = '
|| TO_CHAR (NVL (TO_NUMBER (rec.mld_stdmelding_urgentie), 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_urgentie,
mld_stdmelding_t_uitvoertijd, --mld_stdmelding_uitvoertijd,
mld_stdmelding_t_uitvtijd_pr1, --mld_stdmelding_uitvoertijd_pr1,
mld_stdmelding_t_uitvtijd_pr2, --mld_stdmelding_uitvoertijd_pr2,
mld_stdmelding_t_uitvtijd_pr4, --mld_stdmelding_uitvoertijd_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
)
VALUES (discipline_key,
rec.mld_stdmelding_omschrijving,
stdmeldinggroep_key,
kostensoort_key,
MLD_T_UITVOERTIJD(rec.mld_stdmelding_urgentie, 'U'),
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
);
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 (1) := ';';
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;
/
--//////////////////////////////////////////////////INS IMPORT STUFF///////////////////////////////////////////
/* Formatted on 2008/08/29 13:45 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE fac_import_ins (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
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_srtkenmerk_key1 VARCHAR2 (255);
v_ins_srtkenmerk_key2 VARCHAR2 (255);
v_ins_srtkenmerk_key3 VARCHAR2 (255);
v_ins_srtkenmerk_key4 VARCHAR2 (255);
v_ins_srtkenmerk_key5 VARCHAR2 (255);
v_ins_srtkenmerk_key6 VARCHAR2 (255);
v_ins_srtkenmerk_key7 VARCHAR2 (255);
v_ins_srtkenmerk_key8 VARCHAR2 (255);
v_ins_srtkenmerk_key9 VARCHAR2 (255);
v_ins_srtkenmerk_key10 VARCHAR2 (255);
v_ins_srtkenmerk_key11 VARCHAR2 (255);
v_ins_srtkenmerk_key12 VARCHAR2 (255);
v_ins_srtkenmerk_key13 VARCHAR2 (255);
v_ins_srtkenmerk_key14 VARCHAR2 (255);
v_ins_srtkenmerk_key15 VARCHAR2 (255);
v_ins_srtkenmerk_key16 VARCHAR2 (255);
v_ins_srtkenmerk_key17 VARCHAR2 (255);
v_ins_srtkenmerk_key18 VARCHAR2 (255);
v_ins_srtkenmerk_key19 VARCHAR2 (255);
v_ins_srtkenmerk_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); -- C10
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_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_kenmerkwaarde1 VARCHAR2 (4000);
v_ins_kenmerkwaarde2 VARCHAR2 (4000);
v_ins_kenmerkwaarde3 VARCHAR2 (4000);
v_ins_kenmerkwaarde4 VARCHAR2 (4000);
v_ins_kenmerkwaarde5 VARCHAR2 (4000);
v_ins_kenmerkwaarde6 VARCHAR2 (4000);
v_ins_kenmerkwaarde7 VARCHAR2 (4000);
v_ins_kenmerkwaarde8 VARCHAR2 (4000);
v_ins_kenmerkwaarde9 VARCHAR2 (4000);
v_ins_kenmerkwaarde10 VARCHAR2 (4000);
v_ins_kenmerkwaarde11 VARCHAR2 (4000);
v_ins_kenmerkwaarde12 VARCHAR2 (4000);
v_ins_kenmerkwaarde13 VARCHAR2 (4000);
v_ins_kenmerkwaarde14 VARCHAR2 (4000);
v_ins_kenmerkwaarde15 VARCHAR2 (4000);
v_ins_kenmerkwaarde16 VARCHAR2 (4000);
v_ins_kenmerkwaarde17 VARCHAR2 (4000);
v_ins_kenmerkwaarde18 VARCHAR2 (4000);
v_ins_kenmerkwaarde19 VARCHAR2 (4000);
v_ins_kenmerkwaarde20 VARCHAR2 (4000);
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_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;
-- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
-- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
-- discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- kw is bijvoorbeeld 'Parkeercode' of 'Parkeercode|3' waarbij de laatste in groep 3 zit
-- het resultaat is NULL (als niet gevonden) of 234|3 voor strkenmer_key 234 in groep 3
-- Als geen groep is meegegeven wordt 234|0 opgeleverd (de default groep)
FUNCTION bepaal_srtkenmerk_key (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_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 ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_key = fac.safe_to_number (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
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 kenmerksoort [' || 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 := '';
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
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_kostensoort);
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_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_reserveerbaar);
fac.imp_getfield (v_newline, c_delim, v_res_deel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_res_deel_prijs);
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_volgnr);
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_res_deel_alg_level);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_kostensoort);
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_ins_deel_aanmaak);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal);
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);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19);
fac.imp_getfield (v_newline, c_delim, 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_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'
THEN
v_ins_srtkenmerk_key1 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde1);
v_ins_srtkenmerk_key2 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde2);
v_ins_srtkenmerk_key3 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde3);
v_ins_srtkenmerk_key4 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde4);
v_ins_srtkenmerk_key5 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde5);
v_ins_srtkenmerk_key6 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde6);
v_ins_srtkenmerk_key7 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde7);
v_ins_srtkenmerk_key8 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde8);
v_ins_srtkenmerk_key9 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde9);
v_ins_srtkenmerk_key10 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde10);
v_ins_srtkenmerk_key11 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde11);
v_ins_srtkenmerk_key12 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde12);
v_ins_srtkenmerk_key13 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde13);
v_ins_srtkenmerk_key14 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde14);
v_ins_srtkenmerk_key15 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde15);
v_ins_srtkenmerk_key16 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde16);
v_ins_srtkenmerk_key17 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde17);
v_ins_srtkenmerk_key18 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde18);
v_ins_srtkenmerk_key19 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde19);
v_ins_srtkenmerk_key20 := bepaal_srtkenmerk_key (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) > 10
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
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 := '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 AND fac.getSetting('ins_explode_objects') = 0)
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;
--
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;
--
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;
-- 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_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
)
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_omschrijving,
v_res_discipline_kostensoort,
v_prs_perslid_matchcode,
v_prs_perslid_matchwaarde,
DECODE (v_ins_srtkenmerk_key1,
NULL, v_ins_kenmerkwaarde1,
TO_CHAR (v_ins_srtkenmerk_key1)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key2,
NULL, v_ins_kenmerkwaarde2,
TO_CHAR (v_ins_srtkenmerk_key2)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key3,
NULL, v_ins_kenmerkwaarde3,
TO_CHAR (v_ins_srtkenmerk_key3)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key4,
NULL, v_ins_kenmerkwaarde4,
TO_CHAR (v_ins_srtkenmerk_key4)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key5,
NULL, v_ins_kenmerkwaarde5,
TO_CHAR (v_ins_srtkenmerk_key5)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key6,
NULL, v_ins_kenmerkwaarde6,
TO_CHAR (v_ins_srtkenmerk_key6)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key7,
NULL, v_ins_kenmerkwaarde7,
TO_CHAR (v_ins_srtkenmerk_key7)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key8,
NULL, v_ins_kenmerkwaarde8,
TO_CHAR (v_ins_srtkenmerk_key8)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key9,
NULL, v_ins_kenmerkwaarde9,
TO_CHAR (v_ins_srtkenmerk_key9)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key10,
NULL, v_ins_kenmerkwaarde10,
TO_CHAR (v_ins_srtkenmerk_key10)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key11,
NULL, v_ins_kenmerkwaarde11,
TO_CHAR (v_ins_srtkenmerk_key11)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key12,
NULL, v_ins_kenmerkwaarde12,
TO_CHAR (v_ins_srtkenmerk_key12)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key13,
NULL, v_ins_kenmerkwaarde13,
TO_CHAR (v_ins_srtkenmerk_key13)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key14,
NULL, v_ins_kenmerkwaarde14,
TO_CHAR (v_ins_srtkenmerk_key14)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key15,
NULL, v_ins_kenmerkwaarde15,
TO_CHAR (v_ins_srtkenmerk_key15)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key16,
NULL, v_ins_kenmerkwaarde16,
TO_CHAR (v_ins_srtkenmerk_key16)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key17,
NULL, v_ins_kenmerkwaarde17,
TO_CHAR (v_ins_srtkenmerk_key17)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key18,
NULL, v_ins_kenmerkwaarde18,
TO_CHAR (v_ins_srtkenmerk_key18)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key19,
NULL, v_ins_kenmerkwaarde19,
TO_CHAR (v_ins_srtkenmerk_key19)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key20,
NULL, v_ins_kenmerkwaarde20,
TO_CHAR (v_ins_srtkenmerk_key20)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)
),
v_ins_deel_aanmaak_d,
v_ins_deel_vervaldatum_d,
v_ins_deel_aantal_n
);
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;
/
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;
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;
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 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);
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;
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),
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_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_srtkenmerkgroepwaarde = '234|1=37-ZB-DR'
-- Ofwel: srtkenmerk_key|groep=waarde
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_srtkenmerkgroepwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_waarde VARCHAR(4000);
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_srtkenmerkgroepwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk van soort [' || p_srtkenmerkgroepwaarde || ']';
v_srtkenmerk_key := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde, 1, INSTR (p_srtkenmerkgroepwaarde, '|') - 1));
v_groep := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde,
INSTR (p_srtkenmerkgroepwaarde, '|') + 1,
INSTR (p_srtkenmerkgroepwaarde, '=') - 1 - INSTR (p_srtkenmerkgroepwaarde, '|')));
v_waarde := SUBSTR (p_srtkenmerkgroepwaarde, INSTR (p_srtkenmerkgroepwaarde, '=') + 1);
SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
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 = v_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 k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('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 [' || v_waarde || ']';
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 [' || v_waarde || ']';
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 [' || v_waarde || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die als 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
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);
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_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) '
|| 'GROUP BY prs_perslid_key';
--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 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)
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)
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
/* Formatted on 16-7-2012 16:30:00 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE fac_import_sle (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
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); -- C10
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 (255);
v_ins_kenmerkwaarde2 VARCHAR2 (255);
v_ins_kenmerkwaarde3 VARCHAR2 (255);
v_ins_kenmerkwaarde4 VARCHAR2 (255);
v_ins_kenmerkwaarde5 VARCHAR2 (255);
-- 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) > 10
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;
/
/* Formatted on 26-7-2012 16:28:16 (QP5 v5.115.810.9015) */
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.GET_DESCRIPTION ('LPN_INS_DEEL',
NULL,
UPPER (rec.ins_srtdeel_code))
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.GET_DESCRIPTION (
'LPN_INS_DEEL',
NULL,
UPPER (rec.ins_srtdeel_code))
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.
*/
/* Formatted on 12/09/2008 13:30 (Formatter Plus v4.8.7) */
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 (1) := ';';
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);
-- 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);
v_aanduiding :=
'importregel: ('
|| v_res_artikel_key
|| '|'
|| v_res_discipline_oms
|| '|'
|| v_res_artikel_nr
|| '|'
|| v_res_artikel_omschrijving
|| ')';
-- 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
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'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarde
IF LTRIM (RTRIM (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 niet gevonden'
);
v_ongeldig := 1;
END IF;
END IF;
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 is nieuw'
);
END;
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;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Kostensoort is nieuw'
);
END;
END IF;
IF LENGTH (v_res_artikel_nr) > 10
THEN
v_res_artikel_nr := SUBSTR (TRIM (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;
IF LENGTH (v_res_artikel_omschrijving) > 40
THEN
v_res_artikel_omschrijving :=
SUBSTR (TRIM (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 LENGTH (v_res_artikel_eenheid) > 10
THEN
v_res_artikel_eenheid :=
SUBSTR (TRIM (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;
IF LENGTH (v_res_artikel_opmerking) > 2000
THEN
v_res_artikel_opmerking :=
SUBSTR (TRIM (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;
IF LENGTH (v_res_artikel_groep) > 10
THEN
v_res_artikel_groep :=
SUBSTR (TRIM (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;
-- 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
)
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_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: <b>'
|| 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;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
SELECT prs_s_prs_kostensoort_key.NEXTVAL
INTO v_res_kostensoort_key
FROM DUAL;
INSERT INTO prs_kostensoort
(prs_kostensoort_key,
prs_kostensoort_oms
)
VALUES (v_res_kostensoort_key,
rec.res_kostensoort_oms
);
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
)
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
);
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
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;
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;
/
/* Formatted on 19/09/2008 17:52 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE fac_import_fac_groep (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
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, 30),
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;
/
/*/* Formatted on 16/10/2008 17:08 (Formatter Plus v4.8.7) */
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;
/
--------------------------------
/* Formatted on 19/09/2008 17:52 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE fac_import_fac_gebruikersgroep (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
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;
/
/*/* Formatted on 16/10/2008 17:08 (Formatter Plus v4.8.7) */
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 CONTACTPERSOON';
-- 15 CONTACT_TELEFOON';
-- 16 CONTACT_FAX';
-- 17 BEDRIJF_XSL';
-- 18 BEDRIJF_MLD_ORDER_ADRES';
-- 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 (1) := ';';
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); -- C20
v_prs_overeenkomst_datum VARCHAR2 (256); -- DATE
v_prs_bedrijf_email VARCHAR2 (256); -- C100
v_prs_bedrijf_opmerking VARCHAR2 (512); -- C320
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: CONTACTPERSOON';
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_MLD_ORDER_ADRES';
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 UPPER (v_prs_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_prs_leverancier_nr) = 'LEVERANCIERNUMMER'
AND UPPER (v_prs_bedrijf_bezoek_adres) = 'BEZOEK_ADRES'
AND UPPER (v_prs_bedrijf_bezoek_postcode) = 'BEZOEK_POSTCODE'
AND UPPER (v_prs_bedrijf_bezoek_plaats) = 'BEZOEK_PLAATS'
AND UPPER (v_prs_bedrijf_bezoek_land) = 'BEZOEK_LAND'
AND UPPER (v_prs_bedrijf_post_adres) = 'POST_ADRES'
AND UPPER (v_prs_bedrijf_post_postcode) = 'POST_POSTCODE'
AND UPPER (v_prs_bedrijf_post_plaats) = 'POST_PLAATS'
AND UPPER (v_prs_bedrijf_post_land) = 'POST_LAND'
AND UPPER (v_prs_bedrijf_telefoon) = 'BEDRIJF_TELEFOON'
AND UPPER (v_prs_bedrijf_fax) = 'BEDRIJF_FAX'
AND UPPER (v_prs_bedrijf_email) = 'BEDRIJF_EMAIL'
AND UPPER (v_prs_bedrijf_contact_persoon) = 'CONTACTPERSOON'
AND UPPER (v_prs_bedrijf_contact_telefoon) = 'CONTACT_TELEFOON'
AND UPPER (v_prs_bedrijf_contact_fax) = 'CONTACT_FAX'
AND UPPER (v_prs_bedrijf_xsl) = 'BEDRIJF_XSL'
AND UPPER (v_prs_bedrijf_mldorder_adres) = 'BEDRIJF_ORDER_ADRES'
AND UPPER (v_prs_bedrijf_leverancier) = 'LEVERANCIER'
AND UPPER (v_prs_bedrijf_uitvoerende) = 'UITVOERENDE'
AND UPPER (v_prs_bedrijf_contract) = 'CONTRACTANT'
AND UPPER (v_prs_bedrijf_huurder) = 'HUURDER'
AND UPPER (v_prs_bedrijf_ingids) = 'TOONINGIDS'
AND UPPER (v_prs_bedrijf_uurloon) = 'UURLOON'
AND UPPER (v_prs_overeenkomst_nr) = 'OVEREENKOMSTNUMMER'
AND UPPER (v_prs_overeenkomst_datum) = 'OVEREENKOMSTDATUM'
AND UPPER (v_prs_bedrijf_opmerking) = 'OPMERKING'
AND UPPER (v_prs_dienst_omschrijving) = 'DIENST'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (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) > 20
THEN
v_prs_overeenkomst_nr :=
SUBSTR (TRIM (v_prs_overeenkomst_nr), 1, 20);
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) > 320
THEN
v_prs_bedrijf_opmerking :=
SUBSTR (TRIM (v_prs_bedrijf_opmerking), 1, 320);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Opmerking wordt afgebroken tot ['
|| v_prs_bedrijf_opmerking
|| ']'
);
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 (1) := ';';
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(32),
v_prs_bedrijfadres_password VARCHAR2 (1000); -- VARCHAR2(320))
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);
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 UPPER (v_prs_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_prs_leverancier_nr) = 'LEVERANCIERNUMMER'
AND UPPER (v_prs_bedrijfadres_type) = 'KANAAL'
AND UPPER (v_mld_typeopdr_omschrijving) = 'OPDRACHTTYPE'
AND UPPER (v_prs_bedrijfadres_url) = 'ADRES'
AND UPPER (v_prs_bedrijfadres_ordermode) = 'ORDERMODE'
AND UPPER (v_prs_bedrijfadres_certificate) = 'CERTIFICAAT'
AND UPPER (v_prs_bedrijfadres_xsl) = 'XSL_TEMPLATE'
AND UPPER (v_prs_bedrijfadres_ext) = 'EXTENSIE'
AND UPPER (v_prs_bedrijfadres_attachfile) = 'VASTE_BIJLAGE'
AND UPPER (v_prs_bedrijfadres_username) = 'LOGIN'
AND UPPER (v_prs_bedrijfadres_password) = 'WACHTWOORD'
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;
END;
IF v_ongeldig = 0
THEN
v_errormsg := 'Opdrachttype niet gevonden';
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;
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) > 32
THEN
v_prs_bedrijfadres_username := SUBSTR(v_prs_bedrijfadres_username, 1, 32);
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;
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)
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);
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)
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);
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 (1);
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 (255);
v_kenmerk2 VARCHAR2 (255);
v_kenmerk3 VARCHAR2 (255);
v_kenmerk4 VARCHAR2 (255);
v_kenmerk5 VARCHAR2 (255);
v_kenmerk6 VARCHAR2 (255);
v_kenmerk7 VARCHAR2 (255);
v_kenmerk8 VARCHAR2 (255);
v_kenmerk9 VARCHAR2 (255);
v_kenmerk10 VARCHAR2 (255);
v_kenmerk11 VARCHAR2 (255);
v_kenmerk12 VARCHAR2 (255);
v_kenmerk13 VARCHAR2 (255);
v_kenmerk14 VARCHAR2 (255);
v_kenmerk15 VARCHAR2 (255);
v_kenmerk16 VARCHAR2 (255);
v_kenmerk17 VARCHAR2 (255);
v_kenmerk18 VARCHAR2 (255);
v_kenmerk19 VARCHAR2 (255);
v_kenmerk20 VARCHAR2 (255);
v_boekmaand VARCHAR2 (255);
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 := ';';
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, 255),
SUBSTR (v_kenmerk2, 1, 255),
SUBSTR (v_kenmerk3, 1, 255),
SUBSTR (v_kenmerk4, 1, 255),
SUBSTR (v_kenmerk5, 1, 255),
SUBSTR (v_kenmerk6, 1, 255),
SUBSTR (v_kenmerk7, 1, 255),
SUBSTR (v_kenmerk8, 1, 255),
SUBSTR (v_kenmerk9, 1, 255),
SUBSTR (v_kenmerk10, 1, 255),
SUBSTR (v_kenmerk11, 1, 255),
SUBSTR (v_kenmerk12, 1, 255),
SUBSTR (v_kenmerk13, 1, 255),
SUBSTR (v_kenmerk14, 1, 255),
SUBSTR (v_kenmerk15, 1, 255),
SUBSTR (v_kenmerk16, 1, 255),
SUBSTR (v_kenmerk17, 1, 255),
SUBSTR (v_kenmerk18, 1, 255),
SUBSTR (v_kenmerk19, 1, 255),
SUBSTR (v_kenmerk20, 1, 255),
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;
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)
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
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;
ELSE
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
c_broc_s1 VARCHAR2 (20);
-- Opdrachtnr na de slash
c_broc_s2 VARCHAR2 (20);
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 try_getbestelling_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_slash_index NUMBER;
-- Opdrachtnr voor de slash
c_broc_s1 VARCHAR2 (20);
-- Opdrachtnr na de slash
c_broc_s2 VARCHAR2 (20);
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_ckey IN OUT NUMBER, p_okey IN OUT NUMBER, p_bkey IN OUT NUMBER)
IS
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);
IF p_ckey IS NULL
THEN
p_okey := try_getopdracht_id (p_broc_nr, p_leverancier_nr);
IF p_okey IS NULL
THEN
p_bkey := try_getbestelling_id (p_broc_nr, p_leverancier_nr);
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_ckey IN NUMBER, p_okey IN NUMBER, p_bkey IN NUMBER)
RETURN DATE
IS
refdatum DATE;
BEGIN
refdatum := NULL;
BEGIN
IF p_bkey IS NOT NULL
THEN
SELECT bes_bestelopdr_datum
INTO refdatum
FROM bes_bestelopdr bo
WHERE bo.bes_bestelopdr_key = p_bkey;
ELSIF p_okey IS NOT NULL
THEN
SELECT mld_opdr_datumbegin
INTO refdatum
FROM mld_opdr o
WHERE o.mld_opdr_key = p_okey;
ELSIF p_ckey IS NOT NULL
THEN
refdatum := SYSDATE;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
refdatum := NULL;
END;
RETURN(refdatum);
END;
-- Bepaalt of het BTW-tarief verlegd is of niet
FUNCTION try_getbtw_verlegd (p_btw_verlegd IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF UPPER(p_btw_verlegd) = 'JA'
THEN
RETURN (1);
ELSIF p_btw_verlegd IS NULL OR UPPER(p_btw_verlegd) = 'NEE'
THEN
RETURN (0);
ELSE
c_opmerking := c_opmerking || CHR(13) || 'BTW verlegd 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)) > 0.01
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;
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)
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);
get_fin_factuur_referentie (rc.ordernr, rc.leveranciernr, c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key);
c_fin_factuur_datum:=try_getdatum (rc.factuurdatum, FALSE);
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') = 2)
THEN
BEGIN
c_boekmaand := TO_CHAR(try_getrefdatum(c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key), '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;
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;
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 (1) := ';'; -- 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 (255);
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, 255),
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 (1) := ';';
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_volgnr VARCHAR2 (256); -- N3
v_fac_usrdata_prijs VARCHAR2 (256); -- N8,2
v_fac_usrdata_vervaldatum VARCHAR2 (256); -- DATE
-- 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_volgnr);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_prijs);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_vervaldatum);
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_volgnr) = 'VOLGNR'
AND UPPER (v_fac_usrdata_prijs) = 'PRIJS'
AND UPPER (v_fac_usrdata_vervaldatum) = 'VERVALDATUM'
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 := '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;
-- 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_volgnr,
fac_usrdata_prijs,
fac_usrdata_vervaldatum)
VALUES (v_fac_usrtab_naam,
v_fac_usrdata_code,
v_fac_usrdata_omschr,
v_fac_usrdata_volgnr_n,
v_fac_usrdata_prijs_n,
v_fac_usrdata_vervaldatum_d);
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_volgnr,
fac_usrdata_prijs,
fac_usrdata_vervaldatum
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;
BEGIN
v_count_tot := 0;
v_count_upd := 0;
v_errormsg := 'Fout bij bepalen eigen tabel [' || p_tabname || '] ';
SELECT COUNT ( * )
INTO v_count
FROM fac_usrtab
WHERE fac_usrtab_naam = p_tabname;
IF (v_count = 0)
THEN
v_errormsg := 'Fout bij toevoegen eigen tabel [' || p_tabname || '] ';
INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving)
VALUES (p_tabname, p_tabname)
RETURNING fac_usrtab_key INTO v_tab_key;
COMMIT;
ELSE
SELECT fac_usrtab_key
INTO v_tab_key
FROM fac_usrtab
WHERE fac_usrtab_naam = p_tabname;
END IF;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
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_volgnr,
fac_usrdata_vervaldatum,
fac_usrdata_prijs)
VALUES (v_tab_key,
rec.fac_usrdata_code,
rec.fac_usrdata_omschr,
rec.fac_usrdata_volgnr,
rec.fac_usrdata_vervaldatum,
rec.fac_usrdata_prijs);
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_volgnr = rec.fac_usrdata_volgnr,
fac_usrdata_vervaldatum = rec.fac_usrdata_vervaldatum,
fac_usrdata_prijs = rec.fac_usrdata_prijs
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;
-- 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 (1) := ';'; -- 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_kenmerk_type VARCHAR2 (300);
v_kenmerk_niveau VARCHAR2 (300);
v_kenmerk_verplicht VARCHAR2 (300);
v_kenmerk_groep 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_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_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);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_dec); -- 10
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_volgnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_default);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_toonbaar); -- 20
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_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);
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel3);
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel4); -- 30
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); -- 34
-- 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_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_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_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';
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;
END IF;
INSERT INTO fac_imp_flex (
fac_kenmerkdomein_omschrijving, -- 1
fac_kenmerkdomein_objectnaam,
fac_kenmerkdomein_kolomnaam,
fac_kenmerkdomein_kolomtxt,
fac_usrtab_naam,
srtkenmerk_omschrijving,
srtkenmerk_kenmerktype,
srtkenmerk_systeem,
srtkenmerk_lengte,
srtkenmerk_dec, -- 10
srtkenmerk_nmin,
srtkenmerk_nmax,
srtkenmerk_dimensie,
kenmerk_niveau,
kenmerk_verplicht,
kenmerk_groep,
kenmerk_volgnummer,
kenmerk_default, --
kenmerk_type,
kenmerk_toonbaar, -- 20
kenmerk_uniek,
kenmerk_hint,
kenmerk_regexp,
kenmerk_show_expr,
kenmerk_omschr,
kenmerk_verwijder,
kenmerk_extra_1,
kenmerk_extra_2,
kenmerk_extra_3,
kenmerk_extra_4, -- 30
res_srtactiviteit,
res_activiteit,
mld_srtdiscipline,
mld_discipline,
mld_stdmelding,
mld_typeopdr,
bes_discipline,
bes_srtgroep,
bes_srtdeel,
cnt_discipline, -- 40
ins_discipline,
ins_srtgroep,
ins_srtdeel -- 43
)
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_omschrijving, 1, 255),
SUBSTR (v_srtkenmerk_kenmerktype, 1, 255),
SUBSTR (v_srtkenmerk_systeem, 1, 255),
SUBSTR (v_srtkenmerk_lengte, 1, 255),
SUBSTR (v_srtkenmerk_dec, 1, 255), -- 10
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_volgnummer, 1, 255),
SUBSTR (v_kenmerk_default, 1, 4000),
SUBSTR (v_kenmerk_type, 1, 255),
SUBSTR (v_kenmerk_toonbaar, 1, 255), -- 20
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_omschr, 1, 255),
SUBSTR (v_kenmerk_verwijder, 1, 255),
SUBSTR (v_kenmerk_extra_1, 1, 255),
SUBSTR (v_kenmerk_extra_2, 1, 255),
SUBSTR (v_kenmerk_extra_3, 1, 255),
SUBSTR (v_kenmerk_extra_4, 1, 255), -- 30
v_res_srtactiviteit,
v_res_activiteit,
v_mld_srtdiscipline,
v_mld_discipline,
v_mld_stdmelding,
v_mld_typeopdr,
v_bes_discipline,
v_bes_srtgroep,
v_bes_srtdeel,
v_cnt_discipline, -- 40
v_ins_discipline,
v_ins_srtgroep,
v_ins_srtdeel -- 43
);
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.cnt_discipline IS NOT NULL THEN
flexmodule := 'CNT';
ELSIF rec.ins_discipline IS NOT NULL THEN
flexmodule := 'INS';
ELSE
flexmodule := 'MLD';
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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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;
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_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_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_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_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_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_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 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_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_omschrijving,
mld_kenmerk_verplicht_status,
mld_kenmerk_code,
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_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_omschr,
fac.safe_to_number (rec.kenmerk_extra_1),
rec.kenmerk_extra_2,
fac.safe_to_number (rec.kenmerk_extra_3),
fac.safe_to_number (rec.kenmerk_extra_4)
)
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_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_omschrijving = rec.kenmerk_omschr,
mld_kenmerk_verplicht_status = fac.safe_to_number (rec.kenmerk_extra_1),
mld_kenmerk_code = rec.kenmerk_extra_2,
mld_kenmerk_onderbreken = fac.safe_to_number (rec.kenmerk_extra_3),
mld_kenmerk_obligation_fill = fac.safe_to_number (rec.kenmerk_extra_4)
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;
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_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_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_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_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_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_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;
SELECT ins_discipline_key
INTO v_discipline_key
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_omschrijving = rec.cnt_discipline;
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;
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_volgnummer,
cnt_kenmerk_uniek,
cnt_kenmerk_verwijder,
cnt_kenmerk_default,
cnt_kenmerk_hint,
cnt_kenmerk_regexp,
cnt_kenmerk_show_expr,
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_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_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_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_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_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_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_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_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_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_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_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;
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 (1) := ';';
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)
-- 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);
v_aanduiding :=
'|'
|| v_ins_discipline_omschrijving
|| '|'
|| v_ins_srtgroep_omschrijving
|| '|'
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtcontrole_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 UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINEOMSCHRIJVING'
AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING'
AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
AND UPPER (v_ins_srtcontrole_omschrijving) = 'CONTROLE OMSCHRIJVING'
AND UPPER (v_ins_srtcontrole_info) = 'CONTROLE INFORMATIE'
AND UPPER (v_ins_srtcontrole_periode) = 'CONTROLE PERIODE'
AND UPPER (v_ins_srtcontrole_eenheid) = 'EENHEID'
AND UPPER (v_ins_srtcontrole_mode) = 'MODE'
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 LENGTH (v_ins_srtcontrole_periode) > 7
THEN
v_ins_srtcontrole_periode := SUBSTR (TRIM (v_ins_srtcontrole_periode), 1, 7);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle periode wordt afgebroken tot ['
|| v_ins_srtcontrole_periode
|| ']');
END IF;
--
v_ins_srtcontrole_eenheid := TRIM (v_ins_srtcontrole_eenheid);
IF LENGTH (v_ins_srtcontrole_eenheid) > 1
THEN
v_ins_srtcontrole_eenheid := SUBSTR (TRIM (v_ins_srtcontrole_eenheid), 1, 1);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle eenheid wordt afgebroken tot ['
|| v_ins_srtcontrole_eenheid
|| ']');
END IF;
--
v_ins_srtcontrole_mode := TRIM (v_ins_srtcontrole_mode);
IF LENGTH (v_ins_srtcontrole_mode) > 1
THEN
v_ins_srtcontrole_mode := SUBSTR (TRIM (v_ins_srtcontrole_mode), 1, 1);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Mode wordt afgebroken tot ['
|| v_ins_srtcontrole_mode
|| ']');
END IF;
--
v_ins_srtcontrole_bits := TRIM (v_ins_srtcontrole_bits);
IF LENGTH (v_ins_srtcontrole_bits) > 4
THEN
v_ins_srtcontrole_bits := SUBSTR (TRIM (v_ins_srtcontrole_bits), 1, 4);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Bits wordt afgebroken tot ['
|| v_ins_srtcontrole_bits
|| ']');
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)
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_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);
header_is_valid NUMBER;
v_count_error NUMBER (10);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_ins_srtinstallatie_key NUMBER (10);
v_ins_srtcontrole_niveau VARCHAR (1);
v_week_bits NUMBER (10);
v_maand_bits NUMBER (10);
CURSOR c_inspecties
IS
SELECT * FROM fac_imp_inspectie;
-- MAIN
BEGIN
FOR rec_ins IN c_inspecties
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
rec_ins.ins_discipline_omschrijving
|| ' - '
|| rec_ins.ins_srtgroep_omschrijving
|| '-'
|| rec_ins.ins_srtdeel_code;
v_errorhint := 'Fout bij bepalen discipline';
IF rec_ins.ins_discipline_omschrijving IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Discipline mag niet leeg zijn: inspectie wordt niet toegevoegd.');
ELSE
SELECT ins_discipline_key, 'D'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_tab_discipline
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (rec_ins.ins_discipline_omschrijving)
AND ins_discipline_module = 'INS'
AND ins_discipline_verwijder IS NULL;
IF rec_ins.ins_srtgroep_omschrijving IS NOT NULL
THEN
SELECT ins_srtgroep_key, 'G'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_srtgroep
WHERE UPPER (ins_srtgroep_omschrijving) =
UPPER (rec_ins.ins_srtgroep_omschrijving)
AND ins_srtgroep_module = 'INS'
AND ins_srtgroep_verwijder IS NULL
AND ins_discipline_key = v_ins_srtinstallatie_key;
IF rec_ins.ins_srtdeel_code IS NOT NULL
THEN
SELECT ins_srtdeel_key, 'S'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_srtdeel
WHERE UPPER (ins_srtdeel_code) = UPPER (rec_ins.ins_srtdeel_code)
AND ins_srtdeel_module = 'INS'
AND ins_srtdeel_verwijder IS NULL
AND ins_srtgroep_key = v_ins_srtinstallatie_key;
END IF;
END IF;
-- Alleen de gezette bits van de dagen van de week.
SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 127), 0)
INTO v_week_bits
FROM DUAL;
-- Alleen de gezette bits van de y-ste xxxdag van de maand.
SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 256 + 512 + 1024) / 256, 0)
INTO v_maand_bits
FROM DUAL;
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,
(SELECT MIN(ctr_ins_discipline_key) -- Compatible 2016.1, altijd controle
FROM ctr_disc_params
WHERE ctr_disc_params_controle_type = 1)
);
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 (1) := ';';
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 (Voor import tot 2500 beperkt)
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)
-- 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_datum_d 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_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);
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_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'
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 2500 tekens';
v_fac_faq_answer := TRIM (v_fac_faq_answer);
IF v_fac_faq_answer IS NULL OR LENGTH (v_fac_faq_answer) > 2500 -- 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 := '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 := '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,
'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;
-- 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_level,
ins_discipline_key,
mld_stdmelding_key,
fac_faq_source,
fac_faq_url,
fac_faq_datum,
fac_faq_lang,
fac_faq_hint)
VALUES (v_fac_faq_question,
v_fac_faq_answer,
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_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);
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;
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 (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_level,
fac_faq_source,
fac_faq_url,
fac_faq_datum,
fac_faq_lang,
fac_faq_hint
)
VALUES (rec_faq.fac_faq_question,
rec_faq.fac_faq_answer,
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
)
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
/* Formatted on 10-9-2013 13:24:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE fac_import_cnt (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
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 (200);
v_cnt_srtkenmerk_key1 NUMBER (10);
v_cnt_srtkenmerk_key2 NUMBER (10);
v_cnt_srtkenmerk_key3 NUMBER (10);
v_cnt_srtkenmerk_key4 NUMBER (10);
v_cnt_srtkenmerk_key5 NUMBER (10);
v_cnt_srtkenmerk_key6 NUMBER (10);
v_cnt_srtkenmerk_key7 NUMBER (10);
v_cnt_srtkenmerk_key8 NUMBER (10);
v_cnt_srtkenmerk_key9 NUMBER (10);
v_cnt_srtkenmerk_key10 NUMBER (10);
v_cnt_srtkenmerk_key11 NUMBER (10);
v_cnt_srtkenmerk_key12 NUMBER (10);
v_cnt_srtkenmerk_key13 NUMBER (10);
v_cnt_srtkenmerk_key14 NUMBER (10);
v_cnt_srtkenmerk_key15 NUMBER (10);
v_cnt_srtkenmerk_key16 NUMBER (10);
v_cnt_srtkenmerk_key17 NUMBER (10);
v_cnt_srtkenmerk_key18 NUMBER (10);
v_cnt_srtkenmerk_key19 NUMBER (10);
v_cnt_srtkenmerk_key20 NUMBER (10);
v_cnt_srtkenmerk_key21 NUMBER (10);
v_cnt_srtkenmerk_key22 NUMBER (10);
v_cnt_srtkenmerk_key23 NUMBER (10);
v_cnt_srtkenmerk_key24 NUMBER (10);
v_cnt_srtkenmerk_key25 NUMBER (10);
-- De importvelden
v_nummer_intern VARCHAR2 (100); -- cnt_contract_nummer_intern
v_nummer_extern VARCHAR2 (100); -- cnt_contract_nummer
v_cnt_soort VARCHAR2 (100); -- ins_discipline_omschrijving
v_beschrijving VARCHAR2 (1000); -- cnt_contract_omschrijving
v_mantel_nr VARCHAR2 (100); -- cnt_contract_nummer_intern
v_omschrijving VARCHAR2 (1000); -- cnt_contract_document
v_versie VARCHAR2 (100); -- cnt_contract_versie
v_dienst VARCHAR2 (100); -- prs_dienst_omschrijving
v_afdeling VARCHAR2 (100); -- prs_afdeling_naam
v_perslid_eig VARCHAR2 (100); -- prs_perslid_oslogin
v_perslid_beh VARCHAR2 (100); -- prs_perslid_oslogin
v_opmerking VARCHAR2 (1000); -- cnt_contract_opmerking
v_datum_ingang VARCHAR2 (100);
v_d_datum_ingang DATE; -- cnt_contract_looptijd_van
v_datum_eind VARCHAR2 (100);
v_d_datum_eind DATE; -- cnt_contract_looptijd_tot
v_datum_opzeg VARCHAR2 (100);
v_d_datum_opzeg DATE; -- opzegdatum
v_datum_rappel VARCHAR2 (100);
v_d_datum_rappel DATE; -- rappeldatum
v_bedrijf_naam VARCHAR2 (100); -- prs_bedrijf_naam/leverancier_nr
v_contact_naam VARCHAR2 (100); -- prs_contactpersoon_naam
v_kpn_code VARCHAR2 (100); -- prs_kostenplaats_nr
v_bedrag VARCHAR2 (100);
v_n_bedrag NUMBER (11, 2); -- cnt_contract_kosten
v_bedrag_termijn VARCHAR2 (100);
v_n_bedrag_termijn NUMBER (11, 2); -- cnt_contract_termijnkosten
v_uurtarief VARCHAR2 (100);
v_n_uurtarief NUMBER (6, 2); -- cnt_contract_uurloon
v_korting VARCHAR2 (100);
v_n_korting NUMBER (4, 2); -- cnt_contract_korting
v_gebouwcode VARCHAR2 (100); -- alg_locatie_code/gebouw_code
v_verlengen VARCHAR2 (100); -- cnt_contract_verlenging
v_flex1 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex2 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex3 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex4 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex5 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex6 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex7 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex8 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex9 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex10 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex11 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex12 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex13 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex14 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex15 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex16 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex17 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex18 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex19 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex20 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex21 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex22 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex23 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex24 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
v_flex25 VARCHAR2 (1000); -- cnt_kenmerkcontract_waarde
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 bestaan van kenmerksoort (of
-- deze -via kenmerk- wel is gedefinieerd voor de betreffende contractsoort,
-- volgt pas tijdens de update-fase)!
FUNCTION bepaal_srtkenmerk_key (kw IN VARCHAR)
RETURN NUMBER
IS
v_srtkenmerk_key NUMBER;
BEGIN
IF fac.safe_to_number (kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT cnt_srtkenmerk_key
INTO v_srtkenmerk_key
FROM cnt_srtkenmerk
WHERE cnt_srtkenmerk_verwijder IS NULL
AND cnt_srtkenmerk_upper = UPPER (kw)
AND cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT cnt_srtkenmerk_key
INTO v_srtkenmerk_key
FROM cnt_srtkenmerk
WHERE cnt_srtkenmerk_verwijder IS NULL
AND cnt_srtkenmerk_key = fac.safe_to_number (kw)
AND cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
END IF;
RETURN v_srtkenmerk_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 kenmerksoort [' || kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || kw || ']',
'Kan kenmerksoort niet 1-duidig bepalen');
COMMIT;
RETURN NULL;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_cnt;
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_nummer_intern);
fac.imp_getfield (v_newline, c_delim, v_nummer_extern);
fac.imp_getfield (v_newline, c_delim, v_cnt_soort);
fac.imp_getfield (v_newline, c_delim, v_beschrijving);
fac.imp_getfield (v_newline, c_delim, v_mantel_nr);
fac.imp_getfield (v_newline, c_delim, v_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_versie);
fac.imp_getfield (v_newline, c_delim, v_dienst);
fac.imp_getfield (v_newline, c_delim, v_afdeling);
fac.imp_getfield (v_newline, c_delim, v_perslid_eig);
fac.imp_getfield (v_newline, c_delim, v_perslid_beh);
fac.imp_getfield (v_newline, c_delim, v_opmerking);
fac.imp_getfield (v_newline, c_delim, v_datum_ingang);
fac.imp_getfield (v_newline, c_delim, v_datum_rappel);
fac.imp_getfield (v_newline, c_delim, v_datum_opzeg);
fac.imp_getfield (v_newline, c_delim, v_datum_eind);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_contact_naam);
fac.imp_getfield (v_newline, c_delim, v_kpn_code);
fac.imp_getfield (v_newline, c_delim, v_bedrag);
fac.imp_getfield (v_newline, c_delim, v_bedrag_termijn);
fac.imp_getfield (v_newline, c_delim, v_uurtarief);
fac.imp_getfield (v_newline, c_delim, v_korting);
fac.imp_getfield (v_newline, c_delim, v_gebouwcode);
fac.imp_getfield (v_newline, c_delim, v_verlengen);
fac.imp_getfield (v_newline, c_delim, v_flex1);
fac.imp_getfield (v_newline, c_delim, v_flex2);
fac.imp_getfield (v_newline, c_delim, v_flex3);
fac.imp_getfield (v_newline, c_delim, v_flex4);
fac.imp_getfield (v_newline, c_delim, v_flex5);
fac.imp_getfield (v_newline, c_delim, v_flex6);
fac.imp_getfield (v_newline, c_delim, v_flex7);
fac.imp_getfield (v_newline, c_delim, v_flex8);
fac.imp_getfield (v_newline, c_delim, v_flex9);
fac.imp_getfield (v_newline, c_delim, v_flex10);
fac.imp_getfield (v_newline, c_delim, v_flex11);
fac.imp_getfield (v_newline, c_delim, v_flex12);
fac.imp_getfield (v_newline, c_delim, v_flex13);
fac.imp_getfield (v_newline, c_delim, v_flex14);
fac.imp_getfield (v_newline, c_delim, v_flex15);
fac.imp_getfield (v_newline, c_delim, v_flex16);
fac.imp_getfield (v_newline, c_delim, v_flex17);
fac.imp_getfield (v_newline, c_delim, v_flex18);
fac.imp_getfield (v_newline, c_delim, v_flex19);
fac.imp_getfield (v_newline, c_delim, v_flex20);
fac.imp_getfield (v_newline, c_delim, v_flex21);
fac.imp_getfield (v_newline, c_delim, v_flex22);
fac.imp_getfield (v_newline, c_delim, v_flex23);
fac.imp_getfield (v_newline, c_delim, v_flex24);
fac.imp_getfield (v_newline, c_delim, v_flex25);
v_aanduiding := '[' || v_cnt_soort || '|' || v_nummer_intern || '] ';
-- 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_nummer_intern) = 'CONTRACTNR'
AND UPPER (v_versie) = 'VERSIE'
AND UPPER (v_dienst) = 'DIENST'
AND UPPER (v_verlengen) = 'VERLENGEN')
THEN
v_cnt_srtkenmerk_key1 := bepaal_srtkenmerk_key (v_flex1);
v_cnt_srtkenmerk_key2 := bepaal_srtkenmerk_key (v_flex2);
v_cnt_srtkenmerk_key3 := bepaal_srtkenmerk_key (v_flex3);
v_cnt_srtkenmerk_key4 := bepaal_srtkenmerk_key (v_flex4);
v_cnt_srtkenmerk_key5 := bepaal_srtkenmerk_key (v_flex5);
v_cnt_srtkenmerk_key6 := bepaal_srtkenmerk_key (v_flex6);
v_cnt_srtkenmerk_key7 := bepaal_srtkenmerk_key (v_flex7);
v_cnt_srtkenmerk_key8 := bepaal_srtkenmerk_key (v_flex8);
v_cnt_srtkenmerk_key9 := bepaal_srtkenmerk_key (v_flex9);
v_cnt_srtkenmerk_key10 := bepaal_srtkenmerk_key (v_flex10);
v_cnt_srtkenmerk_key11 := bepaal_srtkenmerk_key (v_flex11);
v_cnt_srtkenmerk_key12 := bepaal_srtkenmerk_key (v_flex12);
v_cnt_srtkenmerk_key13 := bepaal_srtkenmerk_key (v_flex13);
v_cnt_srtkenmerk_key14 := bepaal_srtkenmerk_key (v_flex14);
v_cnt_srtkenmerk_key15 := bepaal_srtkenmerk_key (v_flex15);
v_cnt_srtkenmerk_key16 := bepaal_srtkenmerk_key (v_flex16);
v_cnt_srtkenmerk_key17 := bepaal_srtkenmerk_key (v_flex17);
v_cnt_srtkenmerk_key18 := bepaal_srtkenmerk_key (v_flex18);
v_cnt_srtkenmerk_key19 := bepaal_srtkenmerk_key (v_flex19);
v_cnt_srtkenmerk_key20 := bepaal_srtkenmerk_key (v_flex20);
v_cnt_srtkenmerk_key21 := bepaal_srtkenmerk_key (v_flex21);
v_cnt_srtkenmerk_key22 := bepaal_srtkenmerk_key (v_flex22);
v_cnt_srtkenmerk_key23 := bepaal_srtkenmerk_key (v_flex23);
v_cnt_srtkenmerk_key24 := bepaal_srtkenmerk_key (v_flex24);
v_cnt_srtkenmerk_key25 := bepaal_srtkenmerk_key (v_flex25);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Contractnr ongeldig';
v_nummer_intern := SUBSTR (TRIM (v_nummer_intern), 1, 30);
v_errormsg := 'Externnr ongeldig';
v_nummer_extern := SUBSTR (TRIM (v_nummer_extern), 1, 30);
--
v_errormsg := 'Contractsoort ongedefinieerd';
v_cnt_soort := SUBSTR (TRIM (v_cnt_soort), 1, 60);
IF (v_cnt_soort IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Beschrijving ongedefinieerd';
v_beschrijving := SUBSTR (TRIM (v_beschrijving), 1, 50);
IF (v_beschrijving IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Mantelnr ongeldig';
v_mantel_nr := SUBSTR (TRIM (v_mantel_nr), 1, 30);
v_errormsg := 'Omschrijving ongeldig';
v_omschrijving := SUBSTR (TRIM (v_omschrijving), 1, 1000);
v_errormsg := 'Versie ongeldig';
v_versie := SUBSTR (TRIM (v_versie), 1, 10);
v_errormsg := 'Dienst ongeldig';
v_dienst := SUBSTR (TRIM (v_dienst), 1, 60);
--
v_errormsg := 'Eigenaarafdeling (code) ongedefinieerd';
v_afdeling := SUBSTR (TRIM (v_afdeling), 1, 15);
IF (v_afdeling IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Eigenaar (login) ongeldig';
v_perslid_eig := SUBSTR (TRIM (v_perslid_eig), 1, 30);
--
v_errormsg := 'Beheerder (login) ongedefinieerd';
v_perslid_beh := SUBSTR (TRIM (v_perslid_beh), 1, 30);
IF (v_perslid_beh IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Opmerking ongeldig';
v_opmerking := SUBSTR (TRIM (v_opmerking), 1, 1000);
--
v_errormsg :=
'Ingansdatum ongedefinieerd/ongeldig [' || TRIM (v_datum_ingang) || ']';
v_d_datum_ingang :=
fac.safe_to_date (TRIM (v_datum_ingang), 'dd-mm-yyyy');
IF (v_d_datum_ingang IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg :=
'Rappeldatum ongeldig [' || TRIM (v_datum_rappel) || ']';
v_d_datum_rappel :=
fac.safe_to_date (TRIM (v_datum_rappel), 'dd-mm-yyyy');
IF (v_datum_rappel IS NOT NULL AND v_d_datum_rappel IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg :=
'Opzegdatum ongeldig [' || TRIM (v_datum_opzeg) || ']';
v_d_datum_opzeg :=
fac.safe_to_date (TRIM (v_datum_opzeg), 'dd-mm-yyyy');
IF (v_datum_opzeg IS NOT NULL AND v_d_datum_opzeg IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Einddatum ongedefinieerd/ongeldig [' || TRIM (v_datum_eind) || ']';
v_d_datum_eind :=
fac.safe_to_date (TRIM (v_datum_eind), 'dd-mm-yyyy');
IF (v_d_datum_eind IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Bedrijfnaam ongedefinieerd';
v_bedrijf_naam := SUBSTR (TRIM (v_bedrijf_naam), 1, 60);
IF (v_bedrijf_naam IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Contactnaam ongeldig';
v_contact_naam := SUBSTR (TRIM (v_contact_naam), 1, 30);
--
v_errormsg := 'Kostenplaatscode ongeldig';
v_kpn_code := SUBSTR (TRIM (v_kpn_code), 1, 30);
IF (v_kpn_code IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg :=
'Contractbedrag ongeldig ]' || TRIM (v_bedrag) || ']';
v_n_bedrag := fac.safe_to_number (v_bedrag);
IF (v_bedrag IS NOT NULL AND v_n_bedrag IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Contractbedrag wordt genegeerd');
END IF;
--
v_errormsg :=
'Termijnbedrag ongeldig ]' || TRIM (v_bedrag_termijn) || ']';
v_n_bedrag_termijn := fac.safe_to_number (v_bedrag_termijn);
IF (v_bedrag_termijn IS NOT NULL AND v_n_bedrag_termijn IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Termijnbedrag wordt genegeerd');
END IF;
--
v_errormsg := 'Uurtarief ongeldig ]' || TRIM (v_uurtarief) || ']';
v_n_uurtarief := fac.safe_to_number (v_uurtarief);
IF (v_uurtarief IS NOT NULL AND v_n_uurtarief IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Uurtarief wordt genegeerd');
END IF;
--
v_errormsg := 'Korting ongeldig ]' || TRIM (v_korting) || ']';
v_n_korting := fac.safe_to_number (v_korting);
IF (v_korting IS NOT NULL AND v_n_korting IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Korting wordt genegeerd');
END IF;
v_errormsg := 'Gebouwcode ongeldig';
v_gebouwcode := SUBSTR (TRIM (v_gebouwcode), 1, 12);
v_errormsg := 'Verlenging ongeldig';
v_verlengen := SUBSTR (TRIM (v_verlengen), 1, 1);
-- De rest alleen ff trimmen.
v_flex1 := TRIM (v_flex1);
v_flex2 := TRIM (v_flex2);
v_flex3 := TRIM (v_flex3);
v_flex4 := TRIM (v_flex4);
v_flex5 := TRIM (v_flex5);
v_flex6 := TRIM (v_flex6);
v_flex7 := TRIM (v_flex7);
v_flex8 := TRIM (v_flex8);
v_flex9 := TRIM (v_flex9);
v_flex10 := TRIM (v_flex10);
v_flex11 := TRIM (v_flex11);
v_flex12 := TRIM (v_flex12);
v_flex13 := TRIM (v_flex13);
v_flex14 := TRIM (v_flex14);
v_flex15 := TRIM (v_flex15);
v_flex16 := TRIM (v_flex16);
v_flex17 := TRIM (v_flex17);
v_flex18 := TRIM (v_flex18);
v_flex19 := TRIM (v_flex19);
v_flex20 := TRIM (v_flex20);
v_flex21 := TRIM (v_flex21);
v_flex22 := TRIM (v_flex22);
v_flex23 := TRIM (v_flex23);
v_flex24 := TRIM (v_flex24);
v_flex25 := TRIM (v_flex25);
-- 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,
nummer_extern,
cnt_soort,
beschrijving,
mantel_nr,
omschrijving,
afdeling,
perslid_eig,
perslid_beh,
opmerking,
datum_ingang,
datum_eind,
datum_opzeg,
datum_rappel,
bedrijf_naam,
contact_naam,
kpn_code,
bedrag,
bedrag_termijn,
uurtarief,
korting,
gebouwcode,
verlengen,
versie,
dienst,
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_nummer_extern,
v_cnt_soort,
v_beschrijving,
v_mantel_nr,
v_omschrijving,
v_afdeling,
v_perslid_eig,
v_perslid_beh,
v_opmerking,
v_d_datum_ingang,
v_d_datum_eind,
v_d_datum_opzeg,
v_d_datum_rappel,
v_bedrijf_naam,
v_contact_naam,
v_kpn_code,
v_n_bedrag,
v_n_bedrag_termijn,
v_n_uurtarief,
v_n_korting,
v_gebouwcode,
v_verlengen,
v_versie,
v_dienst,
DECODE (v_cnt_srtkenmerk_key1, NULL, v_flex1, TO_CHAR (v_cnt_srtkenmerk_key1) || '=' || SUBSTR (v_flex1, 1, 200)),
DECODE (v_cnt_srtkenmerk_key2, NULL, v_flex2, TO_CHAR (v_cnt_srtkenmerk_key2) || '=' || SUBSTR (v_flex2, 1, 200)),
DECODE (v_cnt_srtkenmerk_key3, NULL, v_flex3, TO_CHAR (v_cnt_srtkenmerk_key3) || '=' || SUBSTR (v_flex3, 1, 200)),
DECODE (v_cnt_srtkenmerk_key4, NULL, v_flex4, TO_CHAR (v_cnt_srtkenmerk_key4) || '=' || SUBSTR (v_flex4, 1, 200)),
DECODE (v_cnt_srtkenmerk_key5, NULL, v_flex5, TO_CHAR (v_cnt_srtkenmerk_key5) || '=' || SUBSTR (v_flex5, 1, 200)),
DECODE (v_cnt_srtkenmerk_key6, NULL, v_flex6, TO_CHAR (v_cnt_srtkenmerk_key6) || '=' || SUBSTR (v_flex6, 1, 200)),
DECODE (v_cnt_srtkenmerk_key7, NULL, v_flex7, TO_CHAR (v_cnt_srtkenmerk_key7) || '=' || SUBSTR (v_flex7, 1, 200)),
DECODE (v_cnt_srtkenmerk_key8, NULL, v_flex8, TO_CHAR (v_cnt_srtkenmerk_key8) || '=' || SUBSTR (v_flex8, 1, 200)),
DECODE (v_cnt_srtkenmerk_key9, NULL, v_flex9, TO_CHAR (v_cnt_srtkenmerk_key9) || '=' || SUBSTR (v_flex9, 1, 200)),
DECODE (v_cnt_srtkenmerk_key10, NULL, v_flex10, TO_CHAR (v_cnt_srtkenmerk_key10) || '=' || SUBSTR (v_flex10, 1, 200)),
DECODE (v_cnt_srtkenmerk_key11, NULL, v_flex11, TO_CHAR (v_cnt_srtkenmerk_key11) || '=' || SUBSTR (v_flex11, 1, 200)),
DECODE (v_cnt_srtkenmerk_key12, NULL, v_flex12, TO_CHAR (v_cnt_srtkenmerk_key12) || '=' || SUBSTR (v_flex12, 1, 200)),
DECODE (v_cnt_srtkenmerk_key13, NULL, v_flex13, TO_CHAR (v_cnt_srtkenmerk_key13) || '=' || SUBSTR (v_flex13, 1, 200)),
DECODE (v_cnt_srtkenmerk_key14, NULL, v_flex14, TO_CHAR (v_cnt_srtkenmerk_key14) || '=' || SUBSTR (v_flex14, 1, 200)),
DECODE (v_cnt_srtkenmerk_key15, NULL, v_flex15, TO_CHAR (v_cnt_srtkenmerk_key15) || '=' || SUBSTR (v_flex15, 1, 200)),
DECODE (v_cnt_srtkenmerk_key16, NULL, v_flex16, TO_CHAR (v_cnt_srtkenmerk_key16) || '=' || SUBSTR (v_flex16, 1, 200)),
DECODE (v_cnt_srtkenmerk_key17, NULL, v_flex17, TO_CHAR (v_cnt_srtkenmerk_key17) || '=' || SUBSTR (v_flex17, 1, 200)),
DECODE (v_cnt_srtkenmerk_key18, NULL, v_flex18, TO_CHAR (v_cnt_srtkenmerk_key18) || '=' || SUBSTR (v_flex18, 1, 200)),
DECODE (v_cnt_srtkenmerk_key19, NULL, v_flex19, TO_CHAR (v_cnt_srtkenmerk_key19) || '=' || SUBSTR (v_flex19, 1, 200)),
DECODE (v_cnt_srtkenmerk_key20, NULL, v_flex20, TO_CHAR (v_cnt_srtkenmerk_key20) || '=' || SUBSTR (v_flex20, 1, 200)),
DECODE (v_cnt_srtkenmerk_key21, NULL, v_flex21, TO_CHAR (v_cnt_srtkenmerk_key21) || '=' || SUBSTR (v_flex21, 1, 200)),
DECODE (v_cnt_srtkenmerk_key22, NULL, v_flex22, TO_CHAR (v_cnt_srtkenmerk_key22) || '=' || SUBSTR (v_flex22, 1, 200)),
DECODE (v_cnt_srtkenmerk_key23, NULL, v_flex23, TO_CHAR (v_cnt_srtkenmerk_key23) || '=' || SUBSTR (v_flex23, 1, 200)),
DECODE (v_cnt_srtkenmerk_key24, NULL, v_flex24, TO_CHAR (v_cnt_srtkenmerk_key24) || '=' || SUBSTR (v_flex24, 1, 200)),
DECODE (v_cnt_srtkenmerk_key25, NULL, v_flex25, TO_CHAR (v_cnt_srtkenmerk_key25) || '=' || SUBSTR (v_flex25, 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',
'Contracten/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Contracten/#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 contracten afgebroken!');
END fac_import_cnt;
/
/* Formatted on 16-9-2013 13:25:35 (QP5 v5.115.810.9015) */
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
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_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.bedrijf_naam,
a.prs_bedrijf_key,
a.contact_naam,
cp.prs_contactpersoon_key,
a.kpn_code,
a.prs_kostenplaats_key,
a.bedrag,
a.bedrag_termijn,
a.uurtarief,
a.korting,
a.gebouwcode locgeb_code,
COALESCE (l.alg_locatie_key, g.alg_gebouw_key) plaats_key,
DECODE (l.alg_locatie_key,
NULL, DECODE (g.alg_gebouw_key, NULL, NULL, 'G'),
'L')
plaats_code,
a.verlengen,
fac.safe_to_number (SUBSTR (a.flex1, 1, INSTR (a.flex1, '=') - 1)) srtkenmerk_key1,
SUBSTR (a.flex1, INSTR (a.flex1, '=') + 1) waarde1,
fac.safe_to_number (SUBSTR (a.flex2, 1, INSTR (a.flex2, '=') - 1)) srtkenmerk_key2,
SUBSTR (a.flex2, INSTR (a.flex2, '=') + 1) waarde2,
fac.safe_to_number (SUBSTR (a.flex3, 1, INSTR (a.flex3, '=') - 1)) srtkenmerk_key3,
SUBSTR (a.flex3, INSTR (a.flex3, '=') + 1) waarde3,
fac.safe_to_number (SUBSTR (a.flex4, 1, INSTR (a.flex4, '=') - 1)) srtkenmerk_key4,
SUBSTR (a.flex4, INSTR (a.flex4, '=') + 1) waarde4,
fac.safe_to_number (SUBSTR (a.flex5, 1, INSTR (a.flex5, '=') - 1)) srtkenmerk_key5,
SUBSTR (a.flex5, INSTR (a.flex5, '=') + 1) waarde5,
fac.safe_to_number (SUBSTR (a.flex6, 1, INSTR (a.flex6, '=') - 1)) srtkenmerk_key6,
SUBSTR (a.flex6, INSTR (a.flex6, '=') + 1) waarde6,
fac.safe_to_number (SUBSTR (a.flex7, 1, INSTR (a.flex7, '=') - 1)) srtkenmerk_key7,
SUBSTR (a.flex7, INSTR (a.flex7, '=') + 1) waarde7,
fac.safe_to_number (SUBSTR (a.flex8, 1, INSTR (a.flex8, '=') - 1)) srtkenmerk_key8,
SUBSTR (a.flex8, INSTR (a.flex8, '=') + 1) waarde8,
fac.safe_to_number (SUBSTR (a.flex9, 1, INSTR (a.flex9, '=') - 1)) srtkenmerk_key9,
SUBSTR (a.flex9, INSTR (a.flex9, '=') + 1) waarde9,
fac.safe_to_number (SUBSTR (a.flex10, 1, INSTR (a.flex10, '=') - 1)) srtkenmerk_key10,
SUBSTR (a.flex10, INSTR (a.flex10, '=') + 1) waarde10,
fac.safe_to_number (SUBSTR (a.flex11, 1, INSTR (a.flex11, '=') - 1)) srtkenmerk_key11,
SUBSTR (a.flex11, INSTR (a.flex11, '=') + 1) waarde11,
fac.safe_to_number (SUBSTR (a.flex12, 1, INSTR (a.flex12, '=') - 1)) srtkenmerk_key12,
SUBSTR (a.flex12, INSTR (a.flex12, '=') + 1) waarde12,
fac.safe_to_number (SUBSTR (a.flex13, 1, INSTR (a.flex13, '=') - 1)) srtkenmerk_key13,
SUBSTR (a.flex13, INSTR (a.flex13, '=') + 1) waarde13,
fac.safe_to_number (SUBSTR (a.flex14, 1, INSTR (a.flex14, '=') - 1)) srtkenmerk_key14,
SUBSTR (a.flex14, INSTR (a.flex14, '=') + 1) waarde14,
fac.safe_to_number (SUBSTR (a.flex15, 1, INSTR (a.flex15, '=') - 1)) srtkenmerk_key15,
SUBSTR (a.flex15, INSTR (a.flex15, '=') + 1) waarde15,
fac.safe_to_number (SUBSTR (a.flex16, 1, INSTR (a.flex16, '=') - 1)) srtkenmerk_key16,
SUBSTR (a.flex16, INSTR (a.flex16, '=') + 1) waarde16,
fac.safe_to_number (SUBSTR (a.flex17, 1, INSTR (a.flex17, '=') - 1)) srtkenmerk_key17,
SUBSTR (a.flex17, INSTR (a.flex17, '=') + 1) waarde17,
fac.safe_to_number (SUBSTR (a.flex18, 1, INSTR (a.flex18, '=') - 1)) srtkenmerk_key18,
SUBSTR (a.flex18, INSTR (a.flex18, '=') + 1) waarde18,
fac.safe_to_number (SUBSTR (a.flex19, 1, INSTR (a.flex19, '=') - 1)) srtkenmerk_key19,
SUBSTR (a.flex19, INSTR (a.flex19, '=') + 1) waarde19,
fac.safe_to_number (SUBSTR (a.flex20, 1, INSTR (a.flex20, '=') - 1)) srtkenmerk_key20,
SUBSTR (a.flex20, INSTR (a.flex20, '=') + 1) waarde20,
fac.safe_to_number (SUBSTR (a.flex21, 1, INSTR (a.flex21, '=') - 1)) srtkenmerk_key21,
SUBSTR (a.flex21, INSTR (a.flex21, '=') + 1) waarde21,
fac.safe_to_number (SUBSTR (a.flex22, 1, INSTR (a.flex22, '=') - 1)) srtkenmerk_key22,
SUBSTR (a.flex22, INSTR (a.flex22, '=') + 1) waarde22,
fac.safe_to_number (SUBSTR (a.flex23, 1, INSTR (a.flex23, '=') - 1)) srtkenmerk_key23,
SUBSTR (a.flex23, INSTR (a.flex23, '=') + 1) waarde23,
fac.safe_to_number (SUBSTR (a.flex24, 1, INSTR (a.flex24, '=') - 1)) srtkenmerk_key24,
SUBSTR (a.flex24, INSTR (a.flex24, '=') + 1) waarde24,
fac.safe_to_number (SUBSTR (a.flex25, 1, INSTR (a.flex25, '=') - 1)) srtkenmerk_key25,
SUBSTR (a.flex25, INSTR (a.flex25, '=') + 1) waarde25
FROM (SELECT i.nummer_intern,
i.nummer_extern,
i.cnt_soort,
disc.ins_discipline_key,
i.beschrijving,
i.mantel_nr,
mntl.cnt_contract_key mantel_key,
i.omschrijving,
i.versie,
i.dienst,
d.prs_dienst_key,
i.afdeling,
afd.prs_afdeling_key,
i.perslid_eig,
eig.prs_perslid_key prs_perslid_key_eig,
eig.prs_afdeling_key
prs_afdeling_key_eig,
i.perslid_beh,
beh.prs_perslid_key prs_perslid_key_beh,
i.opmerking,
i.datum_ingang,
i.datum_eind,
i.datum_opzeg,
i.datum_rappel,
i.bedrijf_naam,
(SELECT MIN (prs_bedrijf_key)
FROM prs_v_aanwezigbedrijf
WHERE 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
)))
prs_bedrijf_key,
i.contact_naam,
i.kpn_code,
kpn.prs_kostenplaats_key,
i.bedrag,
i.bedrag_termijn,
i.uurtarief,
i.korting,
i.gebouwcode,
-- NULL --> Onbekend
-- J --> Ja (verlengen), nog wel te wijzigen
-- N --> Nee (niet verlengen), nog wel te wijzigen
DECODE (i.verlengen,
NULL, NULL,
'J', 1,
'N', 0,
NULL)
verlengen,
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
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) =
COALESCE (
TRIM (
eig.prs_perslid_oslogin(+)
),
TRIM (
eig.prs_perslid_oslogin2(+)
)
)
AND UPPER (i.perslid_beh) =
COALESCE (
TRIM (
beh.prs_perslid_oslogin(+)
),
TRIM (
beh.prs_perslid_oslogin2(+)
)
)
AND UPPER (i.kpn_code) =
TRIM (
kpn.prs_kostenplaats_upper(+)
)) a
LEFT JOIN
cnt_disc_params dp
ON a.ins_discipline_key = dp.cnt_ins_discipline_key
LEFT JOIN
prs_contactpersoon cp
ON cp.prs_contactpersoon_verwijder IS NULL
AND UPPER (a.contact_naam) =
UPPER (TRIM (cp.prs_contactpersoon_naam))
AND a.prs_bedrijf_key = cp.prs_bedrijf_key
LEFT JOIN
( SELECT TRIM (alg_locatie_code) alg_locatie_code,
MIN (alg_locatie_key) alg_locatie_key
FROM alg_v_aanweziglocatie
GROUP BY TRIM (alg_locatie_code)) l
ON UPPER (a.gebouwcode) = UPPER (l.alg_locatie_code)
LEFT JOIN
( SELECT TRIM (alg_gebouw_code) alg_gebouw_code,
MIN (alg_gebouw_key) alg_gebouw_key
FROM alg_v_aanweziggebouw
GROUP BY TRIM (alg_gebouw_code)) g
ON UPPER (a.gebouwcode) = UPPER (g.alg_gebouw_code);
-- 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 (6);
-- SUBPROC
PROCEDURE bepaal_termijn (p_start IN DATE, p_eind IN DATE)
AS
v_num_months NUMBER;
BEGIN
v_termijn_type := 'D';
v_termijn_aantal := 0;
IF p_start IS NOT NULL AND p_eind > p_start
THEN
-- Kijk of het verschil een of meer jaren is.
IF (TO_CHAR (p_eind, 'ddmm') = TO_CHAR (p_start, 'ddmm'))
THEN
-- Verschil is aantal jaren.
v_termijn_type := 'Y';
v_termijn_aantal :=
TO_NUMBER (TO_CHAR (p_eind, 'yyyy'))
- TO_NUMBER (TO_CHAR (p_start, 'yyyy'));
ELSE
v_num_months := ROUND ( (p_eind - p_start) / 30);
IF (ADD_MONTHS (p_eind, -v_num_months) = p_start)
--IF (TO_CHAR (p_eind, 'dd') = TO_CHAR (p_start, 'dd') )
THEN
-- Verschil is aantal maanden.
v_termijn_type := 'M';
v_termijn_aantal :=
(TO_NUMBER (TO_CHAR (p_eind, 'yyyy')) * 12
+ TO_NUMBER (TO_CHAR (p_eind, 'mm')))
- (TO_NUMBER (TO_CHAR (p_start, 'yyyy')) * 12
+ TO_NUMBER (TO_CHAR (p_start, 'mm')));
ELSE
-- Verschil is aantal dagen.
v_termijn_type := 'D';
v_termijn_aantal := p_eind - p_start;
END IF;
END IF;
END IF;
IF v_termijn_aantal < 0
THEN
-- 0 weken = termijn 'Geen'.
v_termijn_aantal := 0;
v_termijn_type := 'W';
END IF;
IF v_termijn_aantal > 999
THEN
v_termijn_aantal := 999;
END IF;
END;
-- SUBPROC
PROCEDURE upsert_cntkenmerk (p_cnt_key IN NUMBER,
p_srtkenmerk_key IN NUMBER,
p_waarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_waarde VARCHAR2 (255);
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_srtkenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
v_errormsg :=
'Fout bij bepalen kenmerk van soort [' || p_srtkenmerk_key || ']';
SELECT k.cnt_kenmerk_key, sk.cnt_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
FROM cnt_v_aanwezigcontract c, cnt_kenmerk k, cnt_srtkenmerk sk
WHERE c.cnt_contract_key = p_cnt_key
AND c.ins_discipline_key = k.cnt_srtcontract_key
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtkenmerk_key = p_srtkenmerk_key
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND sk.cnt_srtkenmerk_verwijder IS NULL;
IF v_srtkenmerk_type IN ('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 = p_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 [' || p_waarde || ']';
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 = p_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 (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 cnt_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.cnt_srtkenmerk_key = p_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', 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 (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 ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']';
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 [' || v_waarde || ']';
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_waarde = v_waarde
WHERE cnt_kenmerkcontract_key = v_kenmerkdeel_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;
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.
-- *niet gevonden, wel meegegeven
IF (rec.perslid_eig IS NOT NULL AND rec.prs_perslid_key_eig IS NULL)
THEN
v_errormsg := 'Fout bij bepalen eigenaar: ' || rec.perslid_eig;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'leeg gelaten');
-- *wel gevonden (impliceert meegegeven)
ELSIF (rec.prs_perslid_key_eig IS NOT NULL)
THEN
v_perslid_key_eig := rec.prs_perslid_key_eig;
-- *niet meegegeven, dus niet gevonden
-- Speciaal geval abonnementen: abonnee (eigenaar) is dan verplicht.
-- Contract is een abonnement, als de contractsoort aan een catalogus
-- gekoppeld is.
ELSIF (rec.ins_discipline_key IS NOT NULL)
THEN
-- 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;
-- 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.
-- TODO: Moet de beheerder hier rechten op hebben? (en welke dan?)
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;
-- Locatie/gebouw (als meegegeven): moet bestaan en ook passen bij de
-- contractsoort (type_key 3=Ondersteuning of 5=Leverancier).
v_errormsg := 'Fout bij bepalen locatie/gebouw: ' || rec.locgeb_code;
IF (rec.locgeb_code IS NOT NULL)
THEN
-- Geen locatie/gebouw gevonden.
IF (rec.plaats_key IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Contract 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 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;
-- 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 contractsoort 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.
v_errormsg := 'Fout bij bepalen opzegtermijn';
IF (rec.datum_opzeg IS NULL)
THEN
-- Opzegtermijn 'Geen' = 0 weken.
v_termijn_aantal := 0;
v_termijn_type := 'W';
ELSE
bepaal_termijn (rec.datum_opzeg, rec.datum_eind);
END IF;
-- 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)
|| DECODE (v_termijn_type,
'Y',
' Jaar',
'M',
' Maand(en)',
'D',
' Dag(en)'),
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.
v_errormsg := 'Fout bij bepalen rappeltermijn';
IF (rec.datum_rappel IS NULL)
THEN
-- Rappeltermijn 'Geen' = 0 weken.
v_termijn_aantal := 0;
v_termijn_type := 'W';
ELSE
-- Als geen opzegdatum, dan einddatum.
bepaal_termijn (rec.datum_rappel,
COALESCE (rec.datum_opzeg, rec.datum_eind));
END IF;
-- 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)
|| DECODE (v_termijn_type,
'Y',
' Jaar',
'M',
' Maand(en)',
'D',
' Dag(en)'),
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;
ELSE
v_cnt_status := 0;
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,
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.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_srtnoti_code := 'CNTNEW';
v_count_cntnew := v_count_cntnew + 1;
ELSE -- Contract bestaat al --> bijwerken.
SELECT cnt_contract_key
INTO v_contract_key
FROM cnt_contract
WHERE cnt_contract_nummer_intern = rec.nummer_intern
AND cnt_contract_verwijder IS NULL;
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,
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 (rec.plaats_key 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 = rec.plaats_key
AND cnt_alg_plaats_code = rec.plaats_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,
rec.plaats_key,
rec.plaats_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.srtkenmerk_key1, rec.waarde1);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key2, rec.waarde2);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key3, rec.waarde3);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key4, rec.waarde4);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key5, rec.waarde5);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key6, rec.waarde6);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key7, rec.waarde7);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key8, rec.waarde8);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key9, rec.waarde9);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key10, rec.waarde10);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key11, rec.waarde11);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key12, rec.waarde12);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key13, rec.waarde13);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key14, rec.waarde14);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key15, rec.waarde15);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key16, rec.waarde16);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key17, rec.waarde17);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key18, rec.waarde18);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key19, rec.waarde19);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key20, rec.waarde20);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key21, rec.waarde21);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key22, rec.waarde22);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key23, rec.waarde23);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key24, rec.waarde24);
upsert_cntkenmerk (v_contract_key, rec.srtkenmerk_key25, rec.waarde25);
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
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
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 (1);
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 := ';';
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;
/
/* Formatted on 08-Jul-16 18:19:24 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE fac_import_translation (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
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;
/
/* Formatted on 09-Jul-16 17:40:50 (QP5 v5.136.908.31019) */
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;
/
REGISTERRUN('$Id$')