Files
Database/FAC/FAC_PACF.SRC
Peter Feij 9949fdf9bc FSN#26947 perslidwerkplek_verwijder en werkplek_verwijder vervallen
svn path=/Database/trunk/; revision=19016
2013-09-06 16:03:27 +00:00

18282 lines
742 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 VARCHAR2 (1000); -- 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);
-- 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);
-- 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!
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;
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
)
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)
);
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;
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;
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;
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
INTO l_omschrijving,
l_prijs,
l_inkprijs,
l_veelvoud,
l_minimum,
l_wijzigdagen,
l_annuleerdagen
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
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;
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)
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)
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 VARCHAR2 (1000); -- 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 (30) := '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;
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_uitvoertijd,
mld_stdmelding_planbaar
)
VALUES (stdmelding_key,
discipline_key,
SUBSTR (rec1.ELEMENT, 1, 60),
c_stdmelding_notfrontend,
c_stdmelding_uitvoertijd,
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;
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_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
)
VALUES (melding_key,
meldbron_key,
stdmelding_key,
locatie_key,
gebouw_key,
v_melding_uitvoertijd,
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')
);
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 VARCHAR2 (1000); -- 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); -- 35
v_locatie_postcode VARCHAR2 (255); -- 12
v_locatie_plaats VARCHAR2 (255); -- 30
v_locatie_land VARCHAR2 (255); -- 30
v_locatie_post_adres VARCHAR2 (255); -- 35
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');
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');
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) > 30
THEN
v_gebouw_naam := SUBSTR (v_gebouw_naam, 1, 30);
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) > 35
THEN
v_locatie_adres := SUBSTR (v_locatie_adres, 1, 35);
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) > 35
THEN
v_locatie_post_adres := SUBSTR (v_locatie_post_adres, 1, 35);
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;
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 ('''
|| p_waarde
|| ''')';
EXECUTE IMMEDIATE sql_stmt INTO v_waarde;
END IF;
ELSE -- C(haracter)/D(ate)/N(umeric)
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 VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_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); -- 30
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');
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');
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_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 || ']';
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 || ']';
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 || ']';
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 || ']';
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 || ']';
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) = ''
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 || ']';
IF LENGTH (v_afdeling_naam) > 10
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 10);
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) = ''
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 || ']';
IF LENGTH (v_res_discipline_omschrijving) > 30
THEN
v_res_discipline_omschrijving := SUBSTR (v_res_discipline_omschrijving, 1, 30);
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 prijs reserveerbare ruimte [' || v_res_ruimte_prijs || ']';
v_errorhint := 'Maximaal grootte getal is 99999.99 ';
IF (TRIM (v_res_ruimte_prijs) = '')
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 || ']';
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) = ''
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 || ']';
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 || ']';
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_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_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 VARCHAR2 (1000); -- 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); -- 35
v_locatie_postcode VARCHAR2(255); -- 12
v_locatie_plaats VARCHAR2(255); -- 30
v_locatie_land VARCHAR2(255); -- 30
v_locatie_post_adres VARCHAR2(255); -- 35
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);
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
FROM FAC_IMP_ONRGOED2
WHERE reserveerbaar in ('Y','y','J','j')
GROUP BY upper(res_discipline_omschrijving);
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);
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 (''' || p_waarde || ''')';
EXECUTE IMMEDIATE sql_stmt INTO v_waarde;
END IF;
ELSE -- C(haracter)/D(ate)/N(umeric)
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);
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;
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(*)
INTO v_count
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;
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)
VALUES
(v_discipline_key);
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) > 10
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 10);
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) > 10
THEN
v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 10);
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 VARCHAR2 (1000); -- 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 = '') 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 = '') 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 = '') 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;
/
/* Formatted on 11-3-2010 15:37:18 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE fac_import_perslid (p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_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_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
v_alg_verdieping_volgnr VARCHAR2 (256);
v_alg_verdieping_volgnr_num NUMBER (3);
v_alg_ruimte_nr VARCHAR2 (256);
v_prs_werkplek_volgnr VARCHAR2 (256);
v_prs_werkplek_volgnr_num NUMBER (3);
v_prs_werkplek_omschrijving VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_titel VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_prs_perslid_wachtwoord VARCHAR2 (256);
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_perslid;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
v_aanduiding := '';
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := '';
v_errorhint := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
-- 02
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
-- 03
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_verdieping_volgnr);
-- 04
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr);
-- 05
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_werkplek_volgnr);
-- 06
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_werkplek_omschrijving);
-- 07
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
-- 08
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 09
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
-- 10
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
-- 11
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
-- 12
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_titel);
-- 13
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
-- 14
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
-- 15
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 16
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
-- 17
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
-- 18
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
-- 19
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_wachtwoord);
--
v_aanduiding := v_prs_perslid_naam || '|' || v_prs_perslid_voornaam || '| ';
-- Controleer alle veldwaarde
IF (header_is_valid = 0)
THEN
IF UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
v_errorhint := 'Ongeldige locatiecode';
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 || 'Locatie-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_alg_locatie_code || ']'
);
END IF;
--
v_errorhint := 'Ongeldige gebouw code';
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 || 'Gebouw-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_alg_gebouw_code || ']'
);
END IF;
--
v_errorhint := 'Ongeldig verdieping volgnummer';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
IF (v_alg_verdieping_volgnr IS NULL)
THEN
v_alg_verdieping_volgnr_num := TO_NUMBER (v_alg_verdieping_volgnr);
ELSE
BEGIN
v_alg_verdieping_volgnr_num := TO_NUMBER (v_alg_verdieping_volgnr);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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_aanduiding || v_errormsg, v_errorhint);
END;
END IF;
--
v_errorhint := 'Ongeldige ruimte nr';
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 || 'Ruimtenr-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_alg_ruimte_nr || ']'
);
END IF;
--
v_errorhint := 'Ongeldig werkplek volgnummer';
v_prs_werkplek_volgnr := TRIM (v_prs_werkplek_volgnr);
IF (v_prs_werkplek_volgnr IS NULL)
THEN
v_prs_werkplek_volgnr_num := TO_NUMBER (v_prs_werkplek_volgnr);
ELSE
BEGIN
v_alg_verdieping_volgnr_num := TO_NUMBER (v_alg_verdieping_volgnr);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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_aanduiding || v_errormsg, v_errorhint);
END;
END IF;
--
v_errorhint := 'Ongeldige werkplek omschrijving';
v_prs_werkplek_omschrijving := TRIM (v_prs_werkplek_omschrijving);
IF LENGTH (v_prs_werkplek_omschrijving) > 30
THEN
v_prs_werkplek_omschrijving := SUBSTR (v_prs_werkplek_omschrijving, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Werkplek-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_werkplek_omschrijving || ']'
);
END IF;
--
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF LENGTH (v_prs_afdeling_naam) > 10
THEN
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingscode is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_afdeling_naam || ']'
);
ELSE
IF (v_prs_afdeling_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Afdelingscode onbekend',
'Afdelingscode moet worden opgegeven'
);
END IF;
END IF;
--
v_errorhint := 'Ongeldige naam persoon';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 60
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Naam persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_naam || ']'
);
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Naam persoon onbekend',
'Naam persoon moet worden opgegeven'
);
END IF;
END IF;
--
v_errorhint := 'Ongeldige tussenvoegsel persoon';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
THEN
v_prs_perslid_tussenvoegsel := SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Tussenvoegsel persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_tussenvoegsel || ']'
);
END IF;
--
v_errorhint := 'Ongeldige voorletters persoon';
v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);
IF LENGTH (v_prs_perslid_voorletters) > 10
THEN
v_prs_perslid_voorletters := SUBSTR (v_prs_perslid_voorletters, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Voorletters persoon zijn te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_voorletters || ']'
);
END IF;
--
v_errorhint := 'Voornaam persoon';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam := SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Voornaam persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_voornaam || ']'
);
END IF;
--
v_errorhint := 'Ongeldige titel persoon';
v_prs_perslid_titel := TRIM (v_prs_perslid_titel);
IF LENGTH (v_prs_perslid_titel) > 15
THEN
v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Titel persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_titel || ']'
);
END IF;
--
v_errorhint := 'Ongeldige titel persoon';
v_prs_perslid_titel := TRIM (v_prs_perslid_titel);
IF LENGTH (v_prs_perslid_titel) > 15
THEN
v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Titel persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_titel || ']'
);
END IF;
--
v_errorhint := 'Ongeldige telefoonnr. persoon';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr := SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Telefoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']'
);
END IF;
--
v_errorhint := 'Ongeldige mobielnr. persoon';
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
IF LENGTH (v_prs_perslid_mobiel) > 15
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Mobielnr. persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_mobiel || ']'
);
END IF;
--
v_errorhint := 'Ongeldige email persoon';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 200
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Email persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_email || ']'
);
END IF;
--
v_errorhint := 'Ongeldige functie persoon';
v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
THEN
v_prs_srtperslid_omschrijving := SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Functie-aanduiding persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_srtperslid_omschrijving || ']'
);
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Functie persoon onbekend',
'Functie persoon moet worden opgegeven'
);
END IF;
END IF;
--
v_errorhint := 'Ongeldige persoonnr.';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Persoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_nr || ']'
);
END IF;
--
v_errorhint := 'Ongeldige loginnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Loginnaam persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_oslogin || ']'
);
END IF;
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_prs_afdeling_naam || ']';
INSERT INTO fac_imp_perslid (
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_afdeling_naam,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_titel,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_srtperslid_omschrijving,
prs_perslid_nr,
prs_perslid_oslogin,
prs_perslid_wachtwoord
)
VALUES (
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr,
v_alg_ruimte_nr,
v_prs_werkplek_volgnr,
v_prs_werkplek_omschrijving,
v_prs_afdeling_naam,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam,
v_prs_perslid_titel,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel,
v_prs_perslid_email,
v_prs_srtperslid_omschrijving,
v_prs_perslid_nr,
v_prs_perslid_oslogin,
v_prs_perslid_wachtwoord
);
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', 'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key,
'S',
'Persoon: 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_aanduiding || v_errormsg, v_errorhint);
END fac_import_perslid;
/
CREATE OR REPLACE PROCEDURE fac_import_perslid_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_perslid(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE fac_update_perslid (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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_perslid_key NUMBER(10);
v_afdeling_key NUMBER(10);
v_srtperslid_key NUMBER(10);
v_werkplek_volgnr NUMBER(3);
v_werkplek_omschrijving VARCHAR2(30);
v_ruimte_key NUMBER(10);
v_locatie_key NUMBER(10);
v_gebouw_key NUMBER(10);
v_verdieping_key NUMBER(10);
v_prs_werkplek_key NUMBER(10);
CURSOR cSPERSLID
IS
SELECT min(PRS_PERSLID_NAAM) PRS_PERSLID_NAAM,
min(PRS_PERSLID_VOORNAAM) PRS_PERSLID_VOORNAAM,
min(PRS_SRTPERSLID_OMSCHRIJVING) PRS_SRTPERSLID_OMSCHRIJVING
FROM FAC_IMP_PERSLID
GROUP BY UPPER(prs_srtperslid_omschrijving);
recSPersLid cSPersLid%ROWTYPE;
CURSOR cPERSLID
IS
SELECT *
FROM FAC_IMP_PERSLID;
recPersLid cPersLid%ROWTYPE;
CURSOR cWP
IS
SELECT *
FROM FAC_IMP_PERSLID
WHERE ((alg_locatie_code IS NOT NULL) OR
(alg_gebouw_code IS NOT NULL) OR
(alg_verdieping_volgnr IS NOT NULL) OR
(alg_ruimte_nr IS NOT NULL));
recWP cWP%ROWTYPE;
BEGIN
OPEN cSPersLid;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cSPersLid%ISOPEN THEN
LOOP
BEGIN
v_aanduiding := '';
v_errormsg := '';
v_errorhint := '';
FETCH cSPersLid INTO recSPersLid;
EXIT WHEN cSPersLid%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recSPersLid.PRS_PERSLID_NAAM||'|'||recSPersLid.PRS_PERSLID_VOORNAAM||'|'||recSPersLid.PRS_SRTPERSLID_OMSCHRIJVING||'| ';
v_errorhint := 'Fout bij bepalen functie';
SELECT count(*)
INTO v_count
FROM PRS_SRTPERSLID
WHERE UPPER(prs_srtperslid_omschrijving) = UPPER(recSPersLid.prs_srtperslid_omschrijving)
AND prs_srtperslid_verwijder is null;
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen functie';
insert into PRS_SRTPERSLID
(prs_srtperslid_omschrijving
)
values
(recSPersLid.prs_srtperslid_omschrijving
);
COMMIT;
END IF;
COMMIT;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := ' (ORACLE error number = <' || ORACLE_err_num || '> ORACLE error message = <' || 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',
'Personeelsfunctie: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Personeelsfunctie: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
COMMIT; -- logging
CLOSE cSPersLid;
END IF;
OPEN cPersLid;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cPersLid%ISOPEN THEN
LOOP
BEGIN
v_aanduiding := '';
v_errormsg := '';
v_errorhint := '';
FETCH cPersLid INTO recPersLid;
EXIT WHEN cPersLid%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recPersLid.PRS_PERSLID_NAAM||'|'||recPersLid.PRS_PERSLID_NAAM||'| ';
v_errormsg := '';
v_errorhint := 'Fout bij bepalen functie';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder is null
AND UPPER(PRS_SRTPERSLID_OMSCHRIJVING) = UPPER(recPersLid.PRS_SRTPERSLID_OMSCHRIJVING);
v_errorhint := 'Afdeling niet gevonden ['||recPersLid.PRS_AFDELING_NAAM||']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE UPPER(PRS_AFDELING_NAAM) = UPPER(recPersLid.PRS_AFDELING_NAAM)
AND prs_afdeling_verwijder is null;
v_errorhint := 'Kijken of de persoon al bestaat';
SELECT count(*)
INTO v_count
FROM prs_perslid
WHERE prs_perslid_verwijder is null
AND upper(prs_perslid_naam) = upper(recPersLid.prs_perslid_naam)
AND upper(prs_perslid_voornaam) = upper(recPersLid.prs_perslid_voornaam);
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen persoon';
insert into PRS_PERSLID
(PRS_PERSLID_MODULE
,PRS_SRTPERSLID_KEY
,PRS_AFDELING_KEY
,PRS_PERSLID_NAAM
,PRS_PERSLID_VOORLETTERS
,PRS_PERSLID_TUSSENVOEGSEL
,PRS_PERSLID_VOORNAAM
,PRS_PERSLID_TELEFOONNR
,PRS_PERSLID_MOBIEL
,PRS_PERSLID_EMAIL
,PRS_PERSLID_NR
,PRS_PERSLID_TITEL
,PRS_PERSLID_OSLOGIN
)
values
('PRS'
,v_srtperslid_key
,v_afdeling_key
,recPersLid.PRS_PERSLID_NAAM
,recPersLid.PRS_PERSLID_VOORLETTERS
,recPersLid.PRS_PERSLID_TUSSENVOEGSEL
,recPersLid.PRS_PERSLID_VOORNAAM
,recPersLid.PRS_PERSLID_TELEFOONNR
,recPersLid.PRS_PERSLID_MOBIEL
,recPersLid.PRS_PERSLID_EMAIL
,recPersLid.PRS_PERSLID_NR
,recPersLid.PRS_PERSLID_TITEL
,recPersLid.PRS_PERSLID_OSLOGIN
) RETURNING prs_perslid_key INTO v_perslid_key;
prs.setpassword(v_perslid_key, recPersLid.PRS_PERSLID_WACHTWOORD);
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);
v_errormsg := ' (ORACLE error number = <' || ORACLE_err_num || '> ORACLE error message = <' || 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',
'Persoon: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Persoon: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
CLOSE cPersLid;
END IF;
OPEN cWP;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cWP%ISOPEN THEN
COMMIT;
LOOP
BEGIN
v_aanduiding := '';
v_errormsg := '';
v_errorhint := '';
FETCH cWP INTO recWP;
EXIT WHEN cWP%NOTFOUND; -- Geen werkplekken meer?
v_count_tot := v_count_tot + 1;
v_aanduiding := recWP.PRS_PERSLID_NAAM||'|'||recWP.PRS_PERSLID_VOORNAAM||'|'||recWP.alg_locatie_code||'|'||recWP.alg_gebouw_code||'|'||recWP.alg_verdieping_volgnr||'|'||recWP.alg_ruimte_nr||'| ';
v_errormsg := '';
v_errorhint := 'Fout bij bepalen persoon ['||recWP.PRS_PERSLID_VOORNAAM||'|'||recWP.PRS_PERSLID_NAAM||']';
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_perslid
WHERE prs_perslid_verwijder is null
AND upper(prs_perslid_naam) = upper(recWP.prs_perslid_naam)
AND upper(prs_perslid_voornaam) = upper(recWP.prs_perslid_voornaam);
v_errorhint := 'Fout bij bepalen of persoon al een werkplek heeft';
select count(*)
into v_count
from prs_perslid p, prs_perslidwerkplek w
where p.PRS_PERSLID_KEY = v_perslid_key
and p.PRS_PERSLID_KEY = w.prs_perslid_key;
IF (v_count = 0) THEN
v_errorhint := 'Fout bij bepalen locatie';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE UPPER(alg_locatie_code) = UPPER(recWP.alg_locatie_code)
AND alg_locatie_verwijder is null;
v_errorhint := 'Fout bij bepalen gebouw ['||recWP.alg_gebouw_code||']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_gebouw
WHERE upper(alg_gebouw_code) = upper(recWP.alg_gebouw_code)
and alg_locatie_key = v_locatie_key;
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 = recWP.alg_verdieping_volgnr
AND alg_verdieping_verwijder is null;
v_errorhint := 'Fout bij bepalen ruimte ['||to_char(recWP.alg_ruimte_nr)||']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_ruimte
WHERE alg_verdieping_key = v_verdieping_key
AND UPPER(alg_ruimte_nr) = UPPER(recWP.alg_ruimte_nr);
v_errorhint := 'Fout bij bepalen werkplekvolgnr.';
IF (recWP.prs_werkplek_volgnr IS NULL) THEN
SELECT COALESCE(MAX(prs_werkplek_volgnr),0)+1
INTO v_werkplek_volgnr
FROM prs_werkplek
WHERE prs_alg_ruimte_key = v_ruimte_key;
IF recWP.prs_werkplek_omschrijving IS NULL THEN
v_werkplek_omschrijving := recWP.alg_ruimte_nr||'/'||to_char(v_werkplek_volgnr);
ELSE
v_werkplek_omschrijving := recWP.prs_werkplek_omschrijving;
END IF;
ELSE
v_werkplek_volgnr := recWP.prs_werkplek_volgnr;
v_werkplek_omschrijving := recWP.prs_werkplek_omschrijving;
END IF;
v_errorhint := 'Fout bij bepalen of de persoon in de opgegeven ruimte een werkplek heeft';
SELECT count(*)
INTO v_count
FROM prs_perslidwerkplek pw, prs_werkplek wp
WHERE wp.prs_alg_ruimte_key = v_ruimte_key
AND wp.prs_werkplek_key = pw.prs_werkplek_key
AND pw.prs_perslid_key = v_perslid_key;
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen werkplek';
SELECT prs_s_prs_werkplek_key.NEXTVAL
INTO v_prs_werkplek_key
FROM DUAL;
INSERT INTO prs_werkplek
(PRS_WERKPLEK_KEY
,PRS_WERKPLEK_MODULE
,PRS_WERKPLEK_VOLGNR
,PRS_WERKPLEK_OMSCHRIJVING
,PRS_ALG_RUIMTE_KEY
) VALUES (
v_prs_werkplek_key
,'PRR'
,v_werkplek_volgnr
,v_werkplek_omschrijving
,v_ruimte_key
);
v_errorhint := 'Fout bij werkplek';
INSERT INTO prs_perslidwerkplek
(prs_perslid_key
,prs_werkplek_key)
VALUES
(v_perslid_key
,v_prs_werkplek_key);
END IF;
END IF;
COMMIT; -- Alles OK, bewaren dan maar
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := ' (ORACLE error number = <' || ORACLE_err_num || '> ORACLE error message = <' || ORACLE_err_mes || '>)';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
COMMIT; -- tbv logging
END;
END LOOP; -- Volgende werkplek ...
fac.imp_writelog (p_import_key,
'S',
'Werkplek: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Werkplek: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
END IF;
CLOSE cWP;
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///////////////////////////////////////////
/* Formatted on 20-7-2010 16:49:23 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE fac_import_mld (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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- 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); -- C30
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
-- Overige velden:
v_stdmelding_urgentie_n mld_stdmelding.mld_stdmelding_urgentie%TYPE;
v_stdmelding_uitvoertijd_n mld_stdmelding.mld_stdmelding_uitvoertijd%TYPE;
v_stdmelding_uitvoertijd1_n mld_stdmelding.mld_stdmelding_uitvoertijd_pr1%TYPE;
v_stdmelding_uitvoertijd2_n mld_stdmelding.mld_stdmelding_uitvoertijd_pr2%TYPE;
v_stdmelding_uitvoertijd4_n mld_stdmelding.mld_stdmelding_uitvoertijd_pr4%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
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_kostensoort
|| '|'
|| v_stdmelding_urgentie
|| '|'
|| v_stdmelding_uitvoertijd
|| '|'
|| v_discipline_directklaar
|| '| ';
-- 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'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarde
v_srtdiscipline_omschrijving := TRIM (v_srtdiscipline_omschrijving);
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;
--
v_srtdiscipline_prefix := TRIM (v_srtdiscipline_prefix);
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) > 30
THEN
v_discipline_omschrijving := SUBSTR (v_discipline_omschrijving, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Vakgroep wordt afgebroken tot [' || v_discipline_omschrijving || ']'
);
END IF;
--
v_stdmelding_omschrijving := TRIM (v_stdmelding_omschrijving);
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;
--
v_stdmelding_kostensoort := TRIM (v_stdmelding_kostensoort);
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;
-- Insert geformatteerde import record
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,
mld_stdmelding_uitvoertijd,
mld_stdmelding_uitvoertijd1,
mld_stdmelding_uitvoertijd2,
mld_stdmelding_uitvoertijd4,
mld_discipline_directklaar,
prs_dienst,
mld_stdmelding_notfrontend,
alg_onrgoed_niveau,
mld_typeopdr_omschrijving
)
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,
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_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;
/
/* Formatted on 2008/08/25 23:56 (Formatter Plus v4.8.5) */
CREATE OR REPLACE PROCEDURE fac_update_mld (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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);
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);
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, 30),
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_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);
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;
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;
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;
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_urgentie,
mld_stdmelding_uitvoertijd,
mld_stdmelding_uitvoertijd_pr1,
mld_stdmelding_uitvoertijd_pr2,
mld_stdmelding_uitvoertijd_pr4,
prs_dienst_key,
mld_stdmelding_notfrontend,
alg_onrgoed_niveau,
mld_typeopdr_key
)
VALUES (discipline_key,
rec.mld_stdmelding_omschrijving,
stdmeldinggroep_key,
kostensoort_key,
rec.mld_stdmelding_urgentie,
COALESCE(rec.mld_stdmelding_uitvoertijd, 2),
rec.mld_stdmelding_uitvoertijd1,
rec.mld_stdmelding_uitvoertijd2,
rec.mld_stdmelding_uitvoertijd4,
dienst_key,
rec.mld_stdmelding_notfrontend,
rec.alg_onrgoed_niveau,
typeopdr_key
);
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_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;
/
//////////////////////////////////////////////////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 VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
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); -- C30
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_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); -- C30
v_res_discipline_kostensoort VARCHAR2 (255); -- C60
v_prs_perslid_matchcode VARCHAR2 (255);
v_prs_perslid_matchwaarde VARCHAR2 (255);
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);
v_ins_kenmerkwaarde6 VARCHAR2 (255);
v_ins_kenmerkwaarde7 VARCHAR2 (255);
v_ins_kenmerkwaarde8 VARCHAR2 (255);
v_ins_kenmerkwaarde9 VARCHAR2 (255);
v_ins_kenmerkwaarde10 VARCHAR2 (255);
v_ins_kenmerkwaarde11 VARCHAR2 (255);
v_ins_kenmerkwaarde12 VARCHAR2 (255);
v_ins_kenmerkwaarde13 VARCHAR2 (255);
v_ins_kenmerkwaarde14 VARCHAR2 (255);
v_ins_kenmerkwaarde15 VARCHAR2 (255);
v_ins_kenmerkwaarde16 VARCHAR2 (255);
v_ins_kenmerkwaarde17 VARCHAR2 (255);
v_ins_kenmerkwaarde18 VARCHAR2 (255);
v_ins_kenmerkwaarde19 VARCHAR2 (255);
v_ins_kenmerkwaarde20 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;
-- 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)!
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 ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S');
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 (kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S');
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;
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_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_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_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) = 'OBJECTOMSCHRIJVING'
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'
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) > 30
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;
-- 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) > 30
THEN
v_res_discipline_omschrijving :=
SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 30);
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;
-- 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,
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
)
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_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, 200)
),
DECODE (
v_ins_srtkenmerk_key2,
NULL, v_ins_kenmerkwaarde2,
TO_CHAR (v_ins_srtkenmerk_key2)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde2, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key3,
NULL, v_ins_kenmerkwaarde3,
TO_CHAR (v_ins_srtkenmerk_key3)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde3, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key4,
NULL, v_ins_kenmerkwaarde4,
TO_CHAR (v_ins_srtkenmerk_key4)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde4, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key5,
NULL, v_ins_kenmerkwaarde5,
TO_CHAR (v_ins_srtkenmerk_key5)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde5, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key6,
NULL, v_ins_kenmerkwaarde6,
TO_CHAR (v_ins_srtkenmerk_key6)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde6, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key7,
NULL, v_ins_kenmerkwaarde7,
TO_CHAR (v_ins_srtkenmerk_key7)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde7, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key8,
NULL, v_ins_kenmerkwaarde8,
TO_CHAR (v_ins_srtkenmerk_key8)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde8, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key9,
NULL, v_ins_kenmerkwaarde9,
TO_CHAR (v_ins_srtkenmerk_key9)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde9, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key10,
NULL, v_ins_kenmerkwaarde10,
TO_CHAR (v_ins_srtkenmerk_key10)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde10, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key11,
NULL, v_ins_kenmerkwaarde11,
TO_CHAR (v_ins_srtkenmerk_key11)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde11, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key12,
NULL, v_ins_kenmerkwaarde12,
TO_CHAR (v_ins_srtkenmerk_key12)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde12, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key13,
NULL, v_ins_kenmerkwaarde13,
TO_CHAR (v_ins_srtkenmerk_key13)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde13, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key14,
NULL, v_ins_kenmerkwaarde14,
TO_CHAR (v_ins_srtkenmerk_key14)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde14, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key15,
NULL, v_ins_kenmerkwaarde15,
TO_CHAR (v_ins_srtkenmerk_key15)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde15, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key16,
NULL, v_ins_kenmerkwaarde16,
TO_CHAR (v_ins_srtkenmerk_key16)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde16, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key17,
NULL, v_ins_kenmerkwaarde17,
TO_CHAR (v_ins_srtkenmerk_key17)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde17, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key18,
NULL, v_ins_kenmerkwaarde18,
TO_CHAR (v_ins_srtkenmerk_key18)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde18, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key19,
NULL, v_ins_kenmerkwaarde19,
TO_CHAR (v_ins_srtkenmerk_key19)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde19, 1, 200)
),
DECODE (
v_ins_srtkenmerk_key20,
NULL, v_ins_kenmerkwaarde20,
TO_CHAR (v_ins_srtkenmerk_key20)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde20, 1, 200)
)
);
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!');
END fac_import_ins;
/
/* Formatted on 1-3-2013 17:27:29 (QP5 v5.136.908.31019) */
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
|| ' ORACLE (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, 30),
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
|| ' ORACLE (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, 30),
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
|| ' ORACLE (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
|| ' ORACLE (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
|| ' ORACLE (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
PROCEDURE upsert_inskenmerk (p_deel_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;
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.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 = p_srtkenmerk_key
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_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 = 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 ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
WHERE sk.ins_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 ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_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 ('''
|| p_waarde
|| ''')';
EXECUTE IMMEDIATE sql_stmt INTO v_waarde;
END IF;
ELSE -- C(haracter)/D(ate)/N(umeric)
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 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;
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_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,
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,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde1, 1, INSTR (ins_kenmerkwaarde1, '=') - 1))
srtkenmerk_key1,
SUBSTR (ins_kenmerkwaarde1, INSTR (ins_kenmerkwaarde1, '=') + 1) waarde1,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde2, 1, INSTR (ins_kenmerkwaarde2, '=') - 1))
srtkenmerk_key2,
SUBSTR (ins_kenmerkwaarde2, INSTR (ins_kenmerkwaarde2, '=') + 1) waarde2,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde3, 1, INSTR (ins_kenmerkwaarde3, '=') - 1))
srtkenmerk_key3,
SUBSTR (ins_kenmerkwaarde3, INSTR (ins_kenmerkwaarde3, '=') + 1) waarde3,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde4, 1, INSTR (ins_kenmerkwaarde4, '=') - 1))
srtkenmerk_key4,
SUBSTR (ins_kenmerkwaarde4, INSTR (ins_kenmerkwaarde4, '=') + 1) waarde4,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde5, 1, INSTR (ins_kenmerkwaarde5, '=') - 1))
srtkenmerk_key5,
SUBSTR (ins_kenmerkwaarde5, INSTR (ins_kenmerkwaarde5, '=') + 1) waarde5,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde6, 1, INSTR (ins_kenmerkwaarde6, '=') - 1))
srtkenmerk_key6,
SUBSTR (ins_kenmerkwaarde6, INSTR (ins_kenmerkwaarde6, '=') + 1) waarde6,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde7, 1, INSTR (ins_kenmerkwaarde7, '=') - 1))
srtkenmerk_key7,
SUBSTR (ins_kenmerkwaarde7, INSTR (ins_kenmerkwaarde7, '=') + 1) waarde7,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde8, 1, INSTR (ins_kenmerkwaarde8, '=') - 1))
srtkenmerk_key8,
SUBSTR (ins_kenmerkwaarde8, INSTR (ins_kenmerkwaarde8, '=') + 1) waarde8,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde9, 1, INSTR (ins_kenmerkwaarde9, '=') - 1))
srtkenmerk_key9,
SUBSTR (ins_kenmerkwaarde9, INSTR (ins_kenmerkwaarde9, '=') + 1) waarde9,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde10, 1, INSTR (ins_kenmerkwaarde10, '=') - 1))
srtkenmerk_key10,
SUBSTR (ins_kenmerkwaarde10, INSTR (ins_kenmerkwaarde10, '=') + 1) waarde10,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde11, 1, INSTR (ins_kenmerkwaarde11, '=') - 1))
srtkenmerk_key11,
SUBSTR (ins_kenmerkwaarde11, INSTR (ins_kenmerkwaarde11, '=') + 1) waarde11,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde12, 1, INSTR (ins_kenmerkwaarde12, '=') - 1))
srtkenmerk_key12,
SUBSTR (ins_kenmerkwaarde12, INSTR (ins_kenmerkwaarde12, '=') + 1) waarde12,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde13, 1, INSTR (ins_kenmerkwaarde13, '=') - 1))
srtkenmerk_key13,
SUBSTR (ins_kenmerkwaarde13, INSTR (ins_kenmerkwaarde13, '=') + 1) waarde13,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde14, 1, INSTR (ins_kenmerkwaarde14, '=') - 1))
srtkenmerk_key14,
SUBSTR (ins_kenmerkwaarde14, INSTR (ins_kenmerkwaarde14, '=') + 1) waarde14,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde15, 1, INSTR (ins_kenmerkwaarde15, '=') - 1))
srtkenmerk_key15,
SUBSTR (ins_kenmerkwaarde15, INSTR (ins_kenmerkwaarde15, '=') + 1) waarde15,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde16, 1, INSTR (ins_kenmerkwaarde16, '=') - 1))
srtkenmerk_key16,
SUBSTR (ins_kenmerkwaarde16, INSTR (ins_kenmerkwaarde16, '=') + 1) waarde16,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde17, 1, INSTR (ins_kenmerkwaarde17, '=') - 1))
srtkenmerk_key17,
SUBSTR (ins_kenmerkwaarde17, INSTR (ins_kenmerkwaarde17, '=') + 1) waarde17,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde18, 1, INSTR (ins_kenmerkwaarde18, '=') - 1))
srtkenmerk_key18,
SUBSTR (ins_kenmerkwaarde18, INSTR (ins_kenmerkwaarde18, '=') + 1) waarde18,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde19, 1, INSTR (ins_kenmerkwaarde19, '=') - 1))
srtkenmerk_key19,
SUBSTR (ins_kenmerkwaarde19, INSTR (ins_kenmerkwaarde19, '=') + 1) waarde19,
fac.safe_to_number (
SUBSTR (ins_kenmerkwaarde20, 1, INSTR (ins_kenmerkwaarde20, '=') - 1))
srtkenmerk_key20,
SUBSTR (ins_kenmerkwaarde20, INSTR (ins_kenmerkwaarde20, '=') + 1) waarde20
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);
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);
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_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 (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 '2'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '3'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '4'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '5'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
ELSE
-- voor developers only: indien geen code wordt gebruikt,
-- kan als persoonmatchcode een kolom uit de perslid-tabel
-- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
v_matchkolom := 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 ('''
|| rec.prs_perslid_matchwaarde
|| ''') '
|| 'GROUP BY prs_perslid_key';
EXECUTE IMMEDIATE sql_stmt INTO v_ruimte_key, ccount;
IF ccount != 1
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Kan persoon niet 1-duidig bepalen');
END IF;
v_ruimte_type := 'P';
-- 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_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key)
VALUES (v_discipline_key,
v_srtdeel_key,
'INS',
rec.ins_deel_omschrijving,
v_ruimte_key,
v_ruimte_type,
v_locatie_key)
RETURNING ins_deel_key
INTO v_deel_key;
-- Overslaan als reserveerbaar en geen RES-discipline of andersom,
-- dus verder geen controle op eventuele inconsistentie!
IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL)
THEN
v_errormsg :=
'Fout bij bepalen RES-discipline ['
|| rec.res_discipline_omschrijving
|| ']';
SELECT ins_discipline_key
INTO v_rdiscipline_key
FROM res_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.res_discipline_omschrijving);
v_errormsg := 'Fout bij toevoegen RES-object';
INSERT INTO res_deel (res_ins_deel_key,
res_deel_omschrijving,
res_deel_eenheid,
res_deel_prijs,
res_discipline_key,
res_deel_alg_level)
VALUES (v_deel_key,
rec.ins_deel_omschrijving,
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)!
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key1, rec.waarde1);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key2, rec.waarde2);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key3, rec.waarde3);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key4, rec.waarde4);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key5, rec.waarde5);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key6, rec.waarde6);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key7, rec.waarde7);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key8, rec.waarde8);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key9, rec.waarde9);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key10, rec.waarde10);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key11, rec.waarde11);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key12, rec.waarde12);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key13, rec.waarde13);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key14, rec.waarde14);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key15, rec.waarde15);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key16, rec.waarde16);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key17, rec.waarde17);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key18, rec.waarde18);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key19, rec.waarde19);
upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key20, rec.waarde20);
fac.trackaction (v_srtnoti_code,
v_deel_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',
'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 || ' ORACLE (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 VARCHAR2 (1000); -- 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),
v_srtdeel_key)
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),
v_srtdeel_key
)
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 VARCHAR2 (1000); -- 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)) <> ''
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) > 30
THEN
v_res_artikel_omschrijving :=
SUBSTR (TRIM (v_res_artikel_omschrijving), 1, 30);
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_omschrijving :=
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 <> '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, 30)
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_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
SELECT ins_s_ins_discipline_key.NEXTVAL
INTO v_res_discipline_key
FROM DUAL;
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 VARCHAR2 (1000); -- 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, 30),
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 VARCHAR2 (1000); -- 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;
/
CREATE OR REPLACE PROCEDURE fac_import_ext_bedrijf (
p_import_key IN NUMBER
)
IS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_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); -- C35
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); -- C35
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_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
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;
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
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJFSNAAM';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIERNUMMER';
fac.imp_getfield (v_newline, c_delim, v_prs_leverancier_nr);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_ADRES';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_bezoek_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_POSTCODE';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_bezoek_postcode);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_PLAATS';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_bezoek_plaats);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_LAND';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_bezoek_land);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_ADRES';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_post_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_POSTCODE';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_post_postcode);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_PLAATS';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_post_plaats);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_LAND';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_post_land);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_TELEFOON';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_telefoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_FAX';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_fax);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_EMAIL';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_email);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACTPERSOON';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_contact_persoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT_TELEFOON';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_contact_telefoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT_FAX';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_contact_fax);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_XSL';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_xsl);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_MLD_ORDER_ADRES';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_mldorder_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIER';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_leverancier);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UITVOERENDE';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_uitvoerende);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTRACTANT';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_contract);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: HUURDER';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_huurder);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: TOONINGIDS';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_ingids);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UURLOON';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_uurloon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTNUMMER';
fac.imp_getfield (v_newline, c_delim, v_prs_overeenkomst_nr);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTDATUM';
fac.imp_getfield (v_newline, c_delim, v_prs_overeenkomst_datum);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OPMERKING';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_opmerking);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: DIENST';
fac.imp_getfield (v_newline, c_delim, v_prs_dienst_omschrijving);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LOCATIECODE';
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: GEBOUWCODE';
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG1';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_overig1);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG2';
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_overig2);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG3';
fac.imp_getfield (v_newline, c_delim, 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 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'
THEN
header_is_valid := 1;
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) > 35
THEN
v_prs_bedrijf_bezoek_adres :=
SUBSTR (TRIM (v_prs_bedrijf_bezoek_adres), 1, 35);
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) > 35
THEN
v_prs_bedrijf_post_adres :=
SUBSTR (TRIM (v_prs_bedrijf_post_adres), 1, 35);
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;
-- 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_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_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_ext_bedrijf;
/
CREATE OR REPLACE PROCEDURE fac_update_ext_bedrijf (p_import_key IN NUMBER
)
AS
CURSOR c_bedrijf
IS
SELECT 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
FROM fac_imp_ext_bedrijf
GROUP BY 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;
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_errormsg VARCHAR2 (1000);
v_error_hint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
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_update := 0;
FOR rec1 IN c_bedrijf
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Kan relatie niet wegschrijven [' || rec1.prs_bedrijf_naam || '] ';
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_xsl,
prs_bedrijf_mldorder_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
)
VALUES (
rec1.prs_bedrijf_naam,
rec1.prs_leverancier_nr,
rec1.prs_bedrijf_bezoek_adres,
rec1.prs_bedrijf_bezoek_postcode,
rec1.prs_bedrijf_bezoek_plaats,
rec1.prs_bedrijf_bezoek_land,
rec1.prs_bedrijf_post_adres,
rec1.prs_bedrijf_post_postcode,
rec1.prs_bedrijf_post_plaats,
rec1.prs_bedrijf_post_land,
rec1.prs_bedrijf_telefoon,
rec1.prs_bedrijf_fax,
rec1.prs_bedrijf_email,
rec1.prs_bedrijf_contact_persoon,
rec1.prs_bedrijf_contact_telefoon,
rec1.prs_bedrijf_contact_fax,
rec1.prs_bedrijf_xsl,
rec1.prs_bedrijf_order_adres,
DECODE(rec1.prs_bedrijf_leverancier,1,1,NULL),
DECODE(rec1.prs_bedrijf_uitvoerende,1,1,NULL),
DECODE(rec1.prs_bedrijf_contract,1,1,NULL),
DECODE(rec1.prs_bedrijf_huurder,1,1,NULL),
DECODE(rec1.prs_bedrijf_ingids,1,1,NULL),
rec1.prs_bedrijf_uurloon,
rec1.prs_overeenkomst_nr,
rec1.prs_overeenkomst_datum,
rec1.prs_bedrijf_opmerking
);
v_count_update := v_count_update + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := 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_error_hint
);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Relaties: aantal ingelezen: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Relaties: aantal toegevoegd: '
|| TO_CHAR (v_count_update),
''
);
v_count_tot := 0;
v_count_update := 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_update := v_count_update + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := 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_error_hint
);
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_update),
''
);
v_count_tot := 0;
v_count_update := 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_update := v_count_update + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := 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_error_hint
);
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_update),
''
);
COMMIT;
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 relaties afgebroken!',
v_errormsg
);
END fac_update_ext_bedrijf;
/
-- 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_kenmerk1: 17
-- v_kenmerk1: 18
-- v_kenmerk1: 19
-- v_kenmerk1: 20
-- 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);
-- 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(50);
-- 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 blift 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';
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 (100);
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_check_dec_sign NUMBER (5, 2);
v_seq_of_columns VARCHAR2(100);
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;
CURSOR cfactuur
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
v_errorhint := 'Verwijderen vorige import';
DELETE FROM fac_imp_factuur
WHERE fac_import_key <> p_import_key;
SELECT COALESCE(MAX(fac_imp_file_index), 0)+1
INTO v_count
FROM fac_imp_factuur;
-- 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);
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);
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)
VALUES ( v_rec.fac_import_key,
v_count,
UPPER (SUBSTR (v_leveranciernr, 1, 20)),
SUBSTR (REPLACE(v_ordernr,' ',''), 1, 15),
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, 10),
SUBSTR (v_afleverdatum, 1, 10),
v_btw_bedrag,
SUBSTR (v_docid, 1, 255),
SUBSTR (v_omschrijving, 1, 60),
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)
);
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,
fac_import_key,
fac_imp_file_index
FROM fac_imp_factuur
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_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;
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_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_nummer_intern || '.' || cnt_contract_versie = 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
WHERE o.mld_melding_key = fac.safe_to_number (c_broc_s1)
AND 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;
-- Default wordt de user als "invoerder" van een te importeren factuur als volgt bepaald:
-- A) Eerst (indien aanwezig) de in fac_setting geregistreerde persoon
-- B) En anders (persoon niet in fac_setting aanwezig) als volgt:
---- 1) personen met FINFOF rechten
---- 2) indien meer personen met FO, dan diegene met de hoogste FO-rechten
---- 3) indien meer personen met FO en dezelfde hoogste rechten, dan de persoon die ook BO-rechten heeft
---- 4) indien meer personen met FO hoogste rechten + BO rechten, dan een willekeurige persoon (maakt niet meer uit)
-- C) En anders (indien bij B ook niets aanwezig) de persoon 'Facilitor' (soort van system-user).
-- D) En anders (indien bij C niets) een willekeurige persoon (de laatste persoon die is toegevoegd -> met de hoogste key)
FUNCTION get_factuur_key_user
RETURN NUMBER
IS
CURSOR fin_fof IS
SELECT p.prs_perslid_key, MAX (fac_functie_code) fo, MIN(gr.fac_gebruiker_prs_level_write) rechten, count(*) aantal
FROM prs_perslid p, fac_groeprechten gr, fac_gebruikersgroep gg, fac_functie f
WHERE p.prs_perslid_key = gg.prs_perslid_key
AND gr.fac_groep_key = gg.fac_groep_key
AND gr.fac_functie_key = f.fac_functie_key
AND (f.fac_functie_code = 'WEB_FINFOF' OR f.fac_functie_code = 'WEB_FINBOF')
AND gr.fac_gebruiker_prs_level_write < 9
AND p.prs_perslid_oslogin <> '_FACILITOR'
GROUP BY p.prs_perslid_key
ORDER BY aantal DESC, fo, rechten, p.prs_perslid_key DESC;
p_prs_perslid_key_user NUMBER(10);
BEGIN
p_prs_perslid_key_user:=NULL;
BEGIN
SELECT fac.getSetting('fin_import_perslid_key')
INTO p_prs_perslid_key_user
FROM DUAL;
IF (p_prs_perslid_key_user IS NULL OR p_prs_perslid_key_user = -1)
THEN
FOR rc IN fin_fof
LOOP
p_prs_perslid_key_user := rc.prs_perslid_key;
EXIT WHEN p_prs_perslid_key_user IS NOT NULL;
END LOOP;
IF p_prs_perslid_key_user IS NULL
THEN
SELECT MAX(prs_perslid_key)
INTO p_prs_perslid_key_user
FROM prs_perslid
WHERE prs_perslid_oslogin = '_FACILITOR'
AND prs_perslid_verwijder IS NULL;
IF p_prs_perslid_key_user IS NULL
THEN
SELECT MAX(prs_perslid_key)
INTO p_prs_perslid_key_user
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
p_prs_perslid_key_user := NULL;
END;
RETURN p_prs_perslid_key_user;
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 itd.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 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;
-- 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_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) || '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 bij regel ' || c_factuurregel || ': kon niet worden toegevoegd';
ELSE
c_opmerking := c_opmerking || CHR(13) || 'BTW-percentage bij regel ' || c_factuurregel || ': 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 ROUND(l_btwbedrag,2) <> ROUND(c_btw_bedrag,2)
THEN
c_opmerking := c_opmerking || CHR(13) || 'BTW-bedrag bij regel ' || c_factuurregel || ': is op ' || l_btwbedrag || ' gezet';
c_factuur_statuses_key := 3; -- Incompleet
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)
VALUES (c_factuur_key, c_factuurregel, l_kostprijs, l_btwbedrag, c_omschrijving, c_locatie, c_btwtabelwaarde_key)
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, 'Factuur ge<67>mporteerd met fouten');
l_opmerking := 'Ge<47>mporteerde factuur op ' || TO_CHAR(SYSDATE,'dd-mm-yyyy') || ' heeft fouten.' || CHR(13) || '----' || l_opmerking;
ELSE
fac.trackaction ('FINNEW', c_factuur_key, NULL, NULL, 'Factuur korrekt ge<67>mporteerd');
-- l_opmerking := 'Succesvol ge<67>mporteerde factuur op ' || 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;
UPDATE fin_factuur
SET fin_factuur_statuses_key = c_factuur_statuses_key,
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;
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,
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;
IF UPPER(rc.btw_verlegd) = 'JA'
THEN
c_btw_verlegd := 1;
ELSIF rc.btw_verlegd IS NULL OR UPPER(rc.btw_verlegd) = 'NEE'
THEN
c_btw_verlegd := 0;
ELSE
c_btw_verlegd := 0;
c_opmerking := c_opmerking || CHR(13) || 'BTW verlegd is onbekend ('|| rc.btw_verlegd ||')';
c_factuur_statuses_key := 3; -- Incompleet
END IF;
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 (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;
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
)
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_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;
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,
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
);
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;
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 VARCHAR2 (1000); -- 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 NUMBER (3); -- N3
v_fac_usrdata_prijs_n NUMBER (8, 2); -- N8,2
v_fac_usrdata_vervaldatum_d DATE; -- 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_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_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
-- autorisatiegroep-import (transport), volgens UWVA#20708
CREATE OR REPLACE PROCEDURE fac_import_flex (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);
-- 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_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_verwijder VARCHAR2 (300);
v_deflevel1 VARCHAR2 (300); /* res_srtactiviteit, mld_srtdiscipline of bes_discipline */
v_deflevel2 VARCHAR2 (300); /* res_activiteit, mld_discipline of bes_srtgroep */
v_deflevel3 VARCHAR2 (300); /* niks, mld_stdmelding of bes_srtdeel */
v_deflevel4 VARCHAR2 (300); /* niks, mld_typeopdr of niks */
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);
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);
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);
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_volgnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_default);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_toonbaar);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_uniek);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_hint);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_regexp);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_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);
-- 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_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_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';
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;
END IF;
INSERT INTO fac_imp_flex (
fac_kenmerkdomein_omschrijving,
fac_kenmerkdomein_objectnaam,
fac_kenmerkdomein_kolomnaam,
fac_kenmerkdomein_kolomtxt,
fac_usrtab_naam,
srtkenmerk_omschrijving,
srtkenmerk_kenmerktype,
srtkenmerk_systeem,
srtkenmerk_lengte,
srtkenmerk_dec,
srtkenmerk_nmin,
srtkenmerk_nmax,
srtkenmerk_dimensie,
kenmerk_niveau,
kenmerk_verplicht,
kenmerk_volgnummer,
kenmerk_default,
kenmerk_type,
kenmerk_toonbaar,
kenmerk_uniek,
kenmerk_hint,
kenmerk_regexp,
kenmerk_verwijder,
res_srtactiviteit,
res_activiteit,
mld_srtdiscipline,
mld_discipline,
mld_stdmelding,
mld_typeopdr,
bes_discipline,
bes_srtgroep,
bes_srtdeel
)
VALUES (
SUBSTR (v_fac_kenmerkdomein_omschr, 1, 255),
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),
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_volgnummer, 1, 255),
SUBSTR (v_kenmerk_default, 1, 4000),
SUBSTR (v_kenmerk_type, 1, 255),
SUBSTR (v_kenmerk_toonbaar, 1, 255),
SUBSTR (v_kenmerk_uniek, 1, 255),
SUBSTR (v_kenmerk_hint, 1, 255),
SUBSTR (v_kenmerk_regexp, 1, 255),
SUBSTR (v_kenmerk_verwijder, 1, 255),
v_res_srtactiviteit,
v_res_activiteit,
v_mld_srtdiscipline,
v_mld_discipline,
v_mld_stdmelding,
v_mld_typeopdr,
v_bes_discipline,
v_bes_srtgroep,
v_bes_srtdeel
);
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
-- 3. Dan de verdere handling in fac_update_flex
-- flexkenmerken-import (transport) voor RES, volgens UWVA#20706
CREATE OR REPLACE PROCEDURE fac_update_flex (p_import_key IN NUMBER)
AS
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';
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;
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;
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;
END CASE;
fac.imp_writelog (p_import_key,
'I',
'Kenmerksoort aangepast',
v_desc || ' (' || v_srtkenmerk_key || ')'
);
END IF;
END IF;
-- Kenmerken
-- 1) bepaal key activiteit (via activiteitsoort + activiteit)
-- 2a) voeg toe
-- 2b) update
v_activiteit_key := NULL;
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_volgnummer,
bes_kenmerk_default,
bes_kenmerk_verwijder,
bes_kenmerk_toonbaar,
bes_kenmerk_uniek,
bes_kenmerk_hint,
bes_kenmerk_regexp
)
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_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
)
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_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
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 srtdiscipline / vakgroep / stdmelding
v_srtdiscipline_key := NULL;
v_typeopdr_key := NULL;
v_stdmelding_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;
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
v_desc := rec.srtkenmerk_omschrijving || '[' || v_srtkenmerk_key || '] (' || rec.mld_srtdiscipline || '/' || rec.mld_discipline || '/' || rec.mld_stdmelding || ' - ' || rec.mld_typeopdr || ')';
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_stdmelding_key = v_stdmelding_key
OR mld_typeopdr_key = v_typeopdr_key
);
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_volgnummer,
mld_kenmerk_default,
mld_kenmerk_verwijder,
mld_kenmerk_toonbaar,
mld_kenmerk_uniek,
mld_kenmerk_hint,
mld_kenmerk_regexp
)
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_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
)
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_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
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_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;
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.res_srtactiviteit || '/' || rec.res_activiteit || ')';
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_volgnummer,
res_kenmerk_default,
res_kenmerk_verwijder,
res_kenmerk_toonbaar,
res_kenmerk_uniek,
res_kenmerk_hint,
res_kenmerk_regexp
)
VALUES (
v_srtkenmerk_key,
v_activiteit_key,
rec.kenmerk_niveau,
fac.safe_to_number (rec.kenmerk_verplicht),
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
)
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_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
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;
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 VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C30
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); -- N4
-- 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);
v_aanduiding :=
'|'
|| v_ins_discipline_omschrijving
|| '|'
|| v_ins_srtgroep_omschrijving
|| '|'
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtcontrole_omschrijving
|| '|'
|| v_ins_srtcontrole_periode
|| '| ';
-- 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'
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) > 30
THEN
v_ins_discipline_omschrijving :=
SUBSTR (TRIM (v_ins_discipline_omschrijving), 1, 30);
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) > 4
THEN
v_ins_srtcontrole_periode := SUBSTR (TRIM (v_ins_srtcontrole_periode), 1, 4);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle periode wordt afgebroken tot ['
|| v_ins_srtcontrole_periode
|| ']');
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)
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_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);
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;
IF rec_ins.ins_srtcontrole_omschrijving IS NOT NULL
AND rec_ins.ins_srtcontrole_periode IS NOT NULL
THEN
INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
ins_srtcontrole_niveau,
ins_srtcontrole_omschrijving,
ins_srtcontrole_info,
ins_srtcontrole_periode)
VALUES (v_ins_srtinstallatie_key,
v_ins_srtcontrole_niveau,
rec_ins.ins_srtcontrole_omschrijving,
rec_ins.ins_srtcontrole_info,
rec_ins.ins_srtcontrole_periode);
ELSE
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Controle omschrijving en/of Controle Periode mag niet leeg zijn: inspectie wordt niet toegevoegd.');
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 VARCHAR2 (4000); -- 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
newkey NUMBER (10);
-- 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,
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_fac_faq_source,
v_fac_faq_url,
v_fac_faq_datum_d,
v_fac_faq_lang,
v_fac_faq_hint)
RETURNING fac_faq_key
INTO newkey;
IF v_ins_discipline_key_n IS NOT NULL
THEN
INSERT INTO mld_stdmeldingfaq
(ins_discipline_key,
mld_stdmelding_key,
fac_faq_key
)
VALUES (v_ins_discipline_key_n,
v_mld_stdmelding_key_n,
newkey
);
END IF;
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
CREATE OR REPLACE PROCEDURE fac_import_cnt (
p_import_key IN NUMBER
)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- 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_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_afdeling VARCHAR2 (100); -- prs_afdeling_upper
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 VARCHAR2 (100); -- cnt_termijn_omschrijving
v_datum_rappel VARCHAR2 (100);
v_d_datum_rappel VARCHAR2 (100); -- cnt_termijn_omschrijving
v_bedrijf_naam VARCHAR2 (100); -- prs_bedrijf_naam_upper
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_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
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_cnt;
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_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_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);
v_aanduiding := v_cnt_soort || ' [' || v_nummer_intern || '] ';
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Fout inlezen (intern) contractnummer';
v_nummer_intern := SUBSTR(TRIM (v_nummer_intern),1, 30);
v_errormsg := 'Fout inlezen extern contractnummer';
v_nummer_extern := SUBSTR(TRIM (v_nummer_extern),1, 30);
v_errormsg := 'Fout inlezen contractsoort';
v_cnt_soort := SUBSTR(TRIM (v_cnt_soort),1, 30);
v_errormsg := 'Fout inlezen beschrijving';
v_beschrijving := SUBSTR(TRIM (v_beschrijving),1, 50);
v_errormsg := 'Fout inlezen mantelcontract';
v_mantel_nr := SUBSTR(TRIM (v_mantel_nr),1, 30);
v_errormsg := 'Fout inlezen omschrijving';
v_omschrijving := SUBSTR(TRIM (v_omschrijving),1, 1000);
v_errormsg := 'Fout inlezen contractafdeling';
v_afdeling := SUBSTR(TRIM (v_afdeling),1, 10);
v_errormsg := 'Fout inlezen contactpersoon (contracteigenaar)';
v_perslid_eig := SUBSTR(TRIM (v_perslid_eig),1, 30);
v_errormsg := 'Fout inlezen contractbeheerder';
v_perslid_beh := SUBSTR(TRIM (v_perslid_beh),1, 30);
v_errormsg := 'Fout inlezen opmerking';
v_opmerking := SUBSTR(TRIM (v_opmerking),1, 1000);
v_errormsg := 'Fout inlezen ingansdatum';
v_d_datum_ingang := fac.safe_to_date(TRIM (v_datum_ingang), 'dd-mm-yyyy');
v_errormsg := 'Fout inlezen rappeldatum';
v_d_datum_rappel := fac.safe_to_date(TRIM (v_datum_rappel), 'dd-mm-yyyy');
v_errormsg := 'Fout inlezen opzegdatum';
v_d_datum_opzeg := fac.safe_to_date(TRIM (v_datum_opzeg), 'dd-mm-yyyy');
v_errormsg := 'Fout inlezen einddatum';
v_d_datum_eind := fac.safe_to_date(TRIM (v_datum_eind), 'dd-mm-yyyy');
v_errormsg := 'Fout inlezen bedrijf';
v_bedrijf_naam := SUBSTR(TRIM (v_bedrijf_naam),1, 60);
v_errormsg := 'Fout inlezen contactpersoon bedrijf';
v_contact_naam := SUBSTR(TRIM (v_contact_naam),1, 30);
v_errormsg := 'Fout inlezen kostenplaatscode';
v_kpn_code := SUBSTR(TRIM (v_kpn_code),1, 30);
v_errormsg := 'Fout inlezen contractbedrag';
v_n_bedrag := fac.safe_to_number(v_bedrag);
v_errormsg := 'Fout inlezen termijnbedrag';
v_n_bedrag_termijn := fac.safe_to_number(v_bedrag_termijn);
v_errormsg := 'Fout inlezen uurtarief';
v_n_uurtarief := fac.safe_to_number(v_uurtarief);
v_errormsg := 'Fout inlezen kortingspercentage';
v_n_korting := fac.safe_to_number(v_korting);
v_errormsg := 'Fout inlezen gebouwcode';
v_gebouwcode := SUBSTR(TRIM (v_gebouwcode),1, 12);
v_errormsg := 'Fout inlezen verlenging';
v_verlengen := SUBSTR(TRIM (v_verlengen),1, 1);
v_errormsg := 'Fout inlezen flexveld 1';
v_flex1 := SUBSTR(TRIM (v_flex1),1, 1000);
v_errormsg := 'Fout inlezen flexveld 2';
v_flex2 := SUBSTR(TRIM (v_flex2),1, 1000);
v_errormsg := 'Fout inlezen flexveld 3';
v_flex3 := SUBSTR(TRIM (v_flex3),1, 1000);
v_errormsg := 'Fout inlezen flexveld 4';
v_flex4 := SUBSTR(TRIM (v_flex4),1, 1000);
v_errormsg := 'Fout inlezen flexveld 5';
v_flex5 := SUBSTR(TRIM (v_flex5),1, 1000);
v_ongeldig := 0;
-- Headerregel overslaan
IF (UPPER(v_nummer_intern) = 'CONTRACTNR')
THEN
v_count_tot := v_count_tot - 1;
ELSIF (v_ongeldig = 0)
THEN
-- Datatypes checken (string-to-date/number conversie)
IF (v_d_datum_ingang IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldige ingangsdatum "'|| v_datum_ingang || '"');
END IF;
IF (v_datum_rappel IS NOT NULL AND v_d_datum_rappel IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldige rappeldatum "'|| v_datum_rappel || '"');
END IF;
IF (v_datum_opzeg IS NOT NULL AND v_d_datum_opzeg IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldige opzegdatum "'|| v_datum_opzeg || '"');
END IF;
IF (v_d_datum_eind IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldige einddatum "'|| v_datum_eind || '"');
END IF;
IF (v_bedrag IS NOT NULL AND v_n_bedrag IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldig getal "'|| v_bedrag || '"');
END IF;
IF (v_bedrag_termijn IS NOT NULL AND v_n_bedrag_termijn IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldig getal"'|| v_bedrag_termijn || '"');
END IF;
IF (v_uurtarief IS NOT NULL AND v_n_uurtarief IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldig getal"'|| v_uurtarief || '"');
END IF;
IF (v_korting IS NOT NULL AND v_n_korting IS NULL)
THEN
fac.imp_writelog ( p_import_key, 'W',
'Inleesproces: Contract ' || v_nummer_intern || '.',
'Ongeldig getal"'|| v_korting || '"');
END IF;
v_errormsg := 'Fout toevoegen contract';
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,
flex1,
flex2,
flex3,
flex4,
flex5)
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_flex1,
v_flex2,
v_flex3,
v_flex4,
v_flex5);
v_count_import := v_count_import + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := 'Fout bij toevoegen regel aan importtabel! Contract:' || v_aanduiding || ' [' || v_errormsg || ']';
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_errormsg,
v_errorhint
);
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ingelezen importregels (exclusief headerregel): '
|| 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),
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := 'Inleesproces contracten afgebroken! contract: ' || v_aanduiding || ' [' || v_errormsg || ']';
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
/
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,
a.ins_discipline_key,
a.beschrijving,
a.mantel_nr,
a.mantel_key,
a.omschrijving,
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,
b.prs_contactpersoon_key,
a.kpn_code,
a.prs_kostenplaats_key,
a.bedrag,
a.bedrag_termijn,
a.uurtarief,
a.korting,
a.gebouwcode,
a.alg_gebouw_key,
a.verlengen,
a.flex1,
a.flex2,
a.flex3,
a.flex4,
a.flex5
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.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,
bedr.prs_bedrijf_key,
i.contact_naam,
i.kpn_code,
kpn.prs_kostenplaats_key,
i.bedrag,
i.bedrag_termijn,
i.uurtarief,
i.korting,
i.gebouwcode,
g.alg_gebouw_key,
-- 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
FROM fac_imp_cnt i,
(SELECT * FROM cnt_discipline WHERE ins_discipline_verwijder IS NULL) disc,
cnt_v_aanwezigcontract mntl,
(SELECT * FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_contract IS NOT NULL) bedr,
(SELECT * FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL) afd,
prs_v_aanwezigperslid eig,
prs_v_aanwezigperslid beh,
prs_v_aanwezigkostenplaats kpn,
alg_v_aanweziggebouw g
WHERE UPPER(cnt_soort) = UPPER(disc.ins_discipline_omschrijving(+))
AND UPPER(mantel_nr) = UPPER(mntl.cnt_contract_nummer_intern(+))
AND UPPER(afdeling) = afd.prs_afdeling_upper(+)
AND UPPER(perslid_eig) = eig.prs_perslid_oslogin(+)
AND UPPER(perslid_beh) = beh.prs_perslid_oslogin(+)
AND UPPER(bedrijf_naam) = bedr.prs_bedrijf_naam_upper(+)
AND UPPER(kpn_code) = kpn.prs_kostenplaats_upper(+)
AND UPPER(gebouwcode) = g.alg_gebouw_upper(+)
) a
LEFT OUTER JOIN
(
SELECT prs_contactpersoon_key, prs_contactpersoon_naam, prs_bedrijf_key
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL
) b
ON b.prs_bedrijf_key = a.prs_bedrijf_key
AND UPPER(a.contact_naam) = UPPER(b.prs_contactpersoon_naam);
-- Constanten
c_contract_type NUMBER := 5; -- Leverancier (met scope)
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER;
v_count NUMBER;
v_count_chg NUMBER;
v_geldig NUMBER (1);
v_actie VARCHAR2 (10);
v_facilitor_key NUMBER;
v_typecontract_key NUMBER;
v_cnt_discipline_key NUMBER;
v_perslid_key_eig NUMBER;
v_perslid_key_beh NUMBER;
v_bedrijf_key NUMBER;
v_contactpersoon_key NUMBER;
v_termijn_type VARCHAR2 (1);
v_termijn_aantal NUMBER;
v_termijn_key_opzeg NUMBER;
v_termijn_key_rappel NUMBER;
v_nummer_intern VARCHAR2 (30);
v_contract_key NUMBER;
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 jaar 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
v_termijn_aantal := 0;
-- 0 weken = termijn 'Geen'
v_termijn_type := 'W';
END IF;
IF v_termijn_aantal > 999
THEN
v_termijn_aantal := 999;
END IF;
END;
BEGIN
v_count_tot := 0;
v_count_chg := 0;
v_errormsg := '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_aanduiding := rec.nummer_intern||' ('||rec.nummer_extern||': '||rec.beschrijving||')';
v_count_tot := v_count_tot + 1;
-- Eerst controleren of de ingevulde gegevens wel zinning/geldig zijn.
-- Voor ontbrekende verplichte gegevens proberen we wat zinnigs (en
-- geldigs!) te bedenken.
-- Aanmaken wordt pas gedaan als alles zinnig bevonden is.
-- Verplichte velden: deze velden zijn in de interface verplicht, dus
-- in de import ook.
IF ( rec.beschrijving IS NULL
OR rec.cnt_soort IS NULL
OR rec.afdeling IS NULL
OR rec.perslid_beh IS NULL
OR rec.bedrijf_naam IS NULL
OR rec.kpn_code IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '. ('
|| rec.beschrijving || '/'
|| rec.cnt_soort || '/'
|| rec.afdeling || '/'
|| rec.perslid_beh || '/'
|| rec.bedrijf_naam || '/'
|| rec.kpn_code||')',
'E<>n of meer verplichte gegevens (beschrijving/soort/afdeling/beheerder/bedrijf/kostenplaats) ontbreken. Contract wordt overgeslagen.'
);
-- Contract niet verder behandelen
v_geldig := 0;
ELSIF (rec.datum_ingang IS NULL OR rec.datum_eind IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Ongeldige of ontbrekende ingangs- of einddatum. Contract wordt overgeslagen.'
);
-- Contract niet verder behandelen
v_geldig := 0;
END IF;
IF (v_geldig = 1)
THEN
-- Afdeling: moet bestaan
IF (rec.prs_afdeling_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Onbekende afdeling "' || rec.afdeling || '". Contract wordt overgeslagen.'
);
v_geldig := 0;
END IF;
-- Eigenaar (als meegegeven): backup _FACILITOR.
-- 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
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Onbekende eigenaar "' || rec.perslid_eig || '", _FACILITOR gebruikt'
);
v_perslid_key_eig := v_facilitor_key;
-- *wel gevonden (impliceert meegegeven)
ELSIF (rec.prs_perslid_key_eig IS NOT NULL)
THEN
v_perslid_key_eig := rec.prs_perslid_key_eig;
-- Een bestaand persoon moet matchen met afdeling
-- (we gaan niet zoeken naar de afdeling van _FACILITOR)
IF (rec.prs_afdeling_key_eig != rec.prs_afdeling_key)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Eigenaar "' || rec.perslid_eig || '" niet in afdeling "' || rec.afdeling || '"'
);
v_geldig := 0;
END IF;
-- *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
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Abonnee is verplicht. Contract wordt overgeslagen.'
);
v_geldig := 0;
END IF;
END IF;
-- Beheerder: backup _FACILITOR.
IF (rec.prs_perslid_key_beh IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Onbekende beheerder "' || rec.perslid_beh || '", _FACILITOR gebruikt'
);
v_perslid_key_beh := v_facilitor_key;
ELSE
v_perslid_key_beh := rec.prs_perslid_key_beh;
END IF;
-- Kostenplaats: moet bestaan
-- TODO: moet de beheerder hier rechten op hebben? (en welke dan?)
IF (rec.prs_kostenplaats_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Onbekende kostenplaats "' || rec.kpn_code || '". Contract wordt overgeslagen.'
);
v_geldig := 0;
END IF;
-- Gebouwscope: gebouw moet bestaan en
-- contracttype moet gebouwscope hebben (type_key 3 en 5)
IF (rec.gebouwcode IS NOT NULL)
THEN
-- Geen gebouw gevonden
IF (rec.alg_gebouw_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Onbekend gebouw "' || rec.gebouwcode || '". Contract wordt overgeslagen.'
);
v_geldig := 0;
END IF;
-- Als een bestaande contractsoort is opgegeven, moet deze type_key
-- 3 (Ondersteuning) of 5 (Leverancier) hebben (want anders geen scope).
IF (rec.ins_discipline_key IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen contracttype.';
SELECT cnt_srtcontract_type
INTO v_typecontract_key
FROM cnt_disc_params
WHERE cnt_ins_discipline_key = rec.ins_discipline_key;
-- Ander type, dus geen gebouwscope toegestaan
IF (v_typecontract_key != 3 AND v_typecontract_key != 5)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || ' op gebouw "' || rec.gebouwcode || '".',
'Contractsoort "' || rec.cnt_soort || '" kent geen scope. Contract wordt overgeslagen.'
);
v_geldig := 0;
END IF;
END IF;
END IF;
END IF; -- v_geldig = 1
-- Alleen verder gaan als alles zinnig bevonden is.
IF (v_geldig = 1)
THEN
-- Contractsoort: aanmaken (type Leverancier)
IF (rec.ins_discipline_key IS NULL)
THEN
-- Misschien is de contractsoort tijdens deze import al toegevoegd? (dan was 'ie er
-- voor de cursor nog niet)
BEGIN
v_errormsg := 'Zoeken 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; aanmaken
v_errormsg := 'Fout bij toevoegen contractsoort.';
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',
'Contract ' || v_aanduiding || '.',
'Contractsoort "' || rec.cnt_soort || '" aangemaakt'
);
END;
ELSE
v_cnt_discipline_key := rec.ins_discipline_key;
END IF;
-- Mantel: niet verplicht, wel rapporteren als niets gevonden
IF (rec.mantel_nr IS NOT NULL AND rec.mantel_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
'Contract ' || v_aanduiding || '.',
'Mantelcontract "' || rec.mantel_nr || '" niet gevonden'
);
END IF;
-- Bedrijf: aanmaken (kan alleen als de naam het matchingscriterium is)
-- moet uiteraard contractant zijn (en geen uitvoerende wat wel default is)
IF (rec.prs_bedrijf_key IS NULL)
THEN
-- Misschien is het bedrijf tijdens deze import al toegevoegd? (dan was 'ie er voor
-- de cursor nog niet)
BEGIN
v_errormsg := 'Zoeken bedrijf';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_v_aanwezigbedrijf
WHERE prs_bedrijf_contract IS NOT NULL
AND prs_bedrijf_naam_upper = UPPER(rec.bedrijf_naam);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- Bedrijf bestaat gewoon niet; aanmaken
v_errormsg := 'Fout bij toevoegen bedrijf.';
INSERT INTO prs_bedrijf (
prs_bedrijf_naam,
prs_bedrijf_contract,
prs_bedrijf_uitvoerende)
VALUES (
rec.bedrijf_naam,
1,
NULL)
RETURNING prs_bedrijf_key INTO v_bedrijf_key;
fac.imp_writelog (
p_import_key,
'I',
'Contract ' || v_aanduiding || '.',
'Bedrijf "' || rec.bedrijf_naam || '" aangemaakt'
);
END;
ELSE
v_bedrijf_key := rec.prs_bedrijf_key;
END IF;
-- Contactpersoon: aanmaken bij bedrijf
IF (rec.prs_contactpersoon_key IS NULL AND rec.contact_naam IS NOT NULL)
THEN
-- Misschien is de contactpersoon tijdens deze import al toegevoegd? (dan was 'ie er
-- voor de cursor nog niet)
BEGIN
v_errormsg := 'Zoeken contactpersoon';
SELECT prs_contactpersoon_key
INTO v_contactpersoon_key
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL
AND prs_bedrijf_key = v_bedrijf_key
AND UPPER(prs_contactpersoon_naam) = UPPER(rec.contact_naam);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- Contactpersoon bestaat gewoon niet; aanmaken
v_errormsg := 'Fout bij toevoegen contactpersoon bedrijf.';
INSERT INTO prs_contactpersoon (
prs_contactpersoon_naam,
prs_bedrijf_key)
VALUES (
rec.contact_naam,
v_bedrijf_key)
RETURNING prs_contactpersoon_key INTO v_contactpersoon_key;
fac.imp_writelog (
p_import_key,
'I',
'Contract ' || v_aanduiding || '.',
'Contact "' || rec.contact_naam || '" aangemaakt bij bedrijf "'
|| rec.bedrijf_naam || '"'
);
END;
ELSE
v_contactpersoon_key := rec.prs_contactpersoon_key;
END IF;
-- Opzegtermijn: bepalen en toevoegen
-- Als geen opzegtermijn ingevuld, dan is er geen opzegtermijn
IF (rec.datum_opzeg IS NULL)
THEN
-- Opzegtermijn 'Geen' = 0 weken
v_termijn_aantal := 0;
v_termijn_type := 'W';
ELSE
v_errormsg := 'Bepalen lengte opzegtermijn';
bepaal_termijn(rec.datum_opzeg, rec.datum_eind);
END IF;
-- Bestaat de termijn al?
BEGIN
v_errormsg := '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 := '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 en toevoegen
-- Als geen rappeltermijn ingevuld, dan is er geen rappeltermijn
IF (rec.datum_rappel IS NULL)
THEN
-- Rappeltermijn 'Geen' = 0 weken
v_termijn_aantal := 0;
v_termijn_type := 'W';
ELSE
v_errormsg := 'Bepalen lengte rappeltermijn';
-- 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;
-- Als geen intern contractnummer is opgegeven, dan is dit een nieuw
-- contract. Dan moeten we een nieuw contractnummer verzinnen (en
-- zijn er altijd 0 contracten met dit nummer).
IF (rec.nummer_intern IS NULL)
THEN
v_count := 0;
SELECT COALESCE( MAX(fac.safe_to_number(cnt_contract_nummer_intern) ), 0) + 1
INTO v_nummer_intern
FROM cnt_contract;
ELSE
-- Controleren of er al een contract met hetzelfde nummer bestaat;
-- aanmaken vs. bijwerken
v_errormsg := 'Check bestaand contract';
SELECT COUNT(*)
INTO v_count
FROM cnt_contract
WHERE cnt_contract_nummer_intern = rec.nummer_intern
AND cnt_contract_verwijder IS NULL;
v_nummer_intern := rec.nummer_intern;
END IF;
IF (v_count = 0)
THEN
-- Contract bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen contract.';
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_looptijd_van,
prs_kostenplaats_key,
cnt_contract_termijnkosten,
cnt_contract_opmerking,
cnt_contract_mantel_key,
cnt_contract_opzegtermijn,
cnt_contract_rappeltermijn,
cnt_contract_verlenging)
VALUES (
rec.nummer_extern,
rec.beschrijving,
rec.datum_eind,
rec.bedrag,
rec.uurtarief,
v_bedrijf_key,
v_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,
rec.datum_ingang,
rec.prs_kostenplaats_key,
rec.bedrag_termijn,
rec.opmerking,
rec.mantel_key,
v_termijn_key_opzeg,
v_termijn_key_rappel,
rec.verlengen
)
RETURNING cnt_contract_key INTO v_contract_key;
-- Track toevoeging
fac.trackaction ('CNTNEW',
v_contract_key,
v_facilitor_key,
NULL,
NULL);
v_actie := 'INSERT';
ELSE
-- Contract bestaat al --> bijwerken
v_errormsg := 'Fout bij bepalen bestaand contract.';
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;
fac.imp_writelog (
p_import_key,
'I',
'Contract ' || v_aanduiding || '.',
'Bestaand contract met dit nummer wordt bijgewerkt'
);
v_errormsg := 'Fout bij aanpassen 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 = v_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_verlenging = rec.verlengen
WHERE cnt_contract_key = v_contract_key;
-- Track aanpassing
fac.trackaction ('CNTUPD',
v_contract_key,
v_facilitor_key,
NULL,
NULL);
v_actie := 'UPDATE';
END IF;
-- Upsert gebouwscope: bij UPDATE eerst kijken of deze 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.alg_gebouw_key IS NOT NULL)
THEN
-- 'Teller op nul'
v_count := 0;
IF (v_actie = 'UPDATE')
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.alg_gebouw_key
AND cnt_alg_plaats_code = 'G';
END IF;
-- Scope komt nog niet voor (INSERT of (UPDATE met v_count = 0) ),
-- dus aanmaken
IF (v_count = 0)
THEN
v_errormsg := 'Fout bij vastleggen scope.';
INSERT INTO cnt_contract_plaats (
cnt_contract_key,
cnt_alg_plaats_key,
cnt_alg_plaats_code)
VALUES (
v_contract_key,
rec.alg_gebouw_key,
'G');
END IF;
END IF;
--TODO: voor contracttypes zonder scope de gebouwscope leeg maken?
COMMIT;
-- Succesvol toegevoegd/bijgewerkt
v_count_chg := v_count_chg + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint :=
'Fout bij toevoegen contract! contract:'
|| v_aanduiding
|| ' ['
|| v_errormsg
|| ']';
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Updateproces: aantal verwerkte updateregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Updateproces: aantal ongeldige niet verwerkte updateregels: '
|| TO_CHAR (v_count_tot - v_count_chg),
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint :=
'Updateproces contracten afgebroken! contract: '
|| v_aanduiding
|| ' ['
|| v_errormsg
|| ']';
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
/
-------------------------------- 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 COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), 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 COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), 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 COALESCE(MAX(mld_melding_kto_verstuurd), 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 COALESCE(MAX(mld_melding_kto_verstuurd), 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 COALESCE(MAX(bes_bestelling_kto_verstuurd), 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 COALESCE(MAX(bes_bestelling_kto_verstuurd), 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;
/
REGISTERRUN('$Workfile: FAC_PACF.SRC $','$Revision$')