Files
Customer/DVON/dvon.sql
Robin Stoker eba02fc5cd DJIN#41120 -- dbuser = fmd
svn path=/Customer/trunk/; revision=42855
2019-06-05 08:41:21 +00:00

5786 lines
233 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for DVON.
DEFINE thisfile = 'DVON.SQL'
DEFINE dbuser = '^FMD'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE dvon_import_prs (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_newline FAC_IMP_FILE.FAC_IMP_FILE_LINE%TYPE;
BEGIN
BEGIN
SELECT fac_imp_file_line
INTO v_newline
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
IF v_newline LIKE
CHR (TO_NUMBER ('EF', 'xx'))
|| CHR (TO_NUMBER ('BB', 'xx'))
|| CHR (TO_NUMBER ('BF', 'xx'))
|| '%'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.'
);
v_newline := SUBSTR (v_newline, 4);
END IF;
-- Verwijder de dubbele quotes
v_newline := REPLACE (v_newline, '"');
UPDATE fac_imp_file
SET fac_imp_file_line = v_newline
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
EXCEPTION WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij controle op Byte Order Mark',
''
);
END;
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;5;2;0;3;'||
'0;0;0;0;0;0;0;4;0;0;'||
'5;1;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'accountnaam;achternaam;voornaam;e-mail;afdeling'
);
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving = 'Onbekend'
WHERE fac_import_key = p_import_key;
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, v_errorhint);
END dvon_import_prs;
/
CREATE OR REPLACE PROCEDURE dvon_update_prs (
p_import_key IN NUMBER
) IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_oslogin = i.prs_perslid_oslogin(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_oslogin IS NOT NULL
AND i.prs_perslid_oslogin IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin NOT LIKE '%_%'
AND p.prs_perslid_oslogin2 IS NULL
ORDER BY 2;
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 150
THEN
fac.imp_writelog (p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count) || ')',
'Zie Specificatie'
);
RETURN;
END IF;
-- 'LOGIN' betekent dat op basis van oslogin wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'LOGIN', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
END dvon_update_prs;
/
-- Custom imports hier
-- Catalogusartikelen import, gebaseerd op de FIP uit FAC_PACF.SRC incl kenmerken van bestelregel
CREATE OR REPLACE PROCEDURE DVON_IMPORT_CATARTIKEL (
p_import_key IN NUMBER
)
IS
p_discipline_key NUMBER(10);
p_bedrijf_key NUMBER(10);
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_discipline_omschrijving VARCHAR2 (255); -- Catalogus naam (moet al bestaan)
v_bedrijf_naam VARCHAR2 (255); -- Leverancier
v_srtdeel_nr VARCHAR2 (255); -- Artikelnr
v_srtgroep_omschrijving VARCHAR2 (255); -- Artikelgroep
v_srtdeel_omschrijving VARCHAR2 (255); -- Artikelomschrijving
v_srtdeel_prijs VARCHAR2 (255); -- v_srtdeel_prijs = 0
v_srtdeel_eenheid VARCHAR2 (255); -- Stuk / Pak / etc.
v_srtdeel_image VARCHAR2 (255); -- Picture
v_srtdeel_wijzigdagen VARCHAR2 (255); -- Behouden
v_srtdeel_annuleerdagen VARCHAR2 (255); -- Behouden
v_srtdeel_vervaldatum VARCHAR2 (255); -- DueDate
v_srtdeel_minimumvoorraad VARCHAR2 (255); -- Minimumvoorraad
v_srtdeel_maximumvoorraad VARCHAR2 (255); -- Maximumvoorraad
v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000
v_srtdeel_objectsrtcode VARCHAR2 (255); -- Objectsoortcode
v_srtdeel_kenmerksrt VARCHAR2 (255); -- Kenmerksoort (moet deze al bestaan? - Ja, maat)
v_srtdeel_volgnr VARCHAR2 (255); -- Volgnummer
v_srtdeel_verplicht VARCHAR2 (255); -- Verplicht
v_srtdeel_groep VARCHAR2 (255); -- Kenmerkgroep
-- 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 DVON_IMP_CATARTIKEL;
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_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_wijzigdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimumvoorraad);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_maximumvoorraad);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_objectsrtcode);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_kenmerksrt);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_volgnr);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_verplicht);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_groep);
-- 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_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_wijzigdagen)) = 'WIJZIGDAGEN'
AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE'
AND UPPER (TRIM (v_srtdeel_minimumvoorraad)) = 'MINIMUMVOORRAAD'
AND UPPER (TRIM (v_srtdeel_maximumvoorraad)) = 'MAXIMUMVOORRAAD'
AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING'
AND UPPER (TRIM (v_srtdeel_objectsrtcode)) = 'OBJECTSOORTCODE'
AND UPPER (TRIM (v_srtdeel_kenmerksrt)) = 'KENMERKSOORT'
AND UPPER (TRIM (v_srtdeel_volgnr)) = 'VOLGNUMMER'
AND UPPER (TRIM (v_srtdeel_verplicht)) = 'VERPLICHT'
AND UPPER (TRIM (v_srtdeel_groep)) = 'KENMERKGROEP'
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 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';
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;
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;
IF v_srtdeel_wijzigdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0
OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal wijzigdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL!
v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen);
IF v_srtdeel_annuleerdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0
OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal annuleerdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking);
IF LENGTH (v_srtdeel_opmerking) > 2000
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Opmerking te lang',
'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
IF v_ongeldig = 0
THEN
v_errorhint := 'Fout toevoegen importregel';
INSERT INTO DVON_IMP_CATARTIKEL (
fac_import_key,
ins_discipline_key,
prs_bedrijf_key,
ins_srtdeel_nr,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_srtdeel_prijs,
ins_srtdeel_eenheid,
ins_srtdeel_image,
ins_srtdeel_vervaldatum,
ins_srtdeel_minimumvoorraad,
ins_srtdeel_maximumvoorraad,
ins_srtdeel_wijzigdagen,
ins_srtdeel_annuleerdagen,
ins_srtdeel_opmerking,
ins_kenmerk_objectsrtcode,
ins_kenmerk_kenmerksrt,
ins_kenmerk_volgnr,
ins_kenmerk_verplicht,
ins_kenmerk_groep )
VALUES (
p_import_key,
v_discipline_key,
v_bedrijf_key,
SUBSTR (v_srtdeel_nr, 1, 32),
SUBSTR (v_srtgroep_omschrijving, 1, 60),
SUBSTR (v_srtdeel_omschrijving, 1, 100),
COALESCE (fac.safe_to_number (v_srtdeel_prijs), 0),
SUBSTR (v_srtdeel_eenheid, 1, 30),
SUBSTR (v_srtdeel_image, 1, 255),
fac.safe_to_date (v_srtdeel_vervaldatum,
'yyyymmdd'),
fac.safe_to_number (v_srtdeel_minimumvoorraad),
fac.safe_to_number (v_srtdeel_maximumvoorraad),
fac.safe_to_number (v_srtdeel_wijzigdagen),
fac.safe_to_number (v_srtdeel_annuleerdagen),
SUBSTR (v_srtdeel_opmerking, 1, 2000),
SUBSTR (v_srtdeel_objectsrtcode, 1, 10),
SUBSTR (v_srtdeel_kenmerksrt, 1, 50),
fac.safe_to_number (v_srtdeel_volgnr),
fac.safe_to_number (v_srtdeel_verplicht),
fac.safe_to_number (v_srtdeel_groep)
);
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 artikelen afgebroken!');
END DVON_IMPORT_CATARTIKEL;
/
-- Update artikelen
CREATE OR REPLACE PROCEDURE DVON_UPDATE_CATARTIKEL (
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);
-- Update artikelen
PROCEDURE l_update_catartikel (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
CURSOR c_updsrtdeel
IS
SELECT s.bes_srtdeel_key, d.*
FROM dvon_imp_catartikel d, bes_srtgroep g, bes_srtdeel s
WHERE fac_import_key = p_import_key
AND d.ins_discipline_key = g.ins_discipline_key
-- AND d.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 (d.ins_srtdeel_nr)
-- AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL;
CURSOR c_inssrtdeel
IS
SELECT d.*
FROM dvon_imp_catartikel d
WHERE fac_import_key = p_import_key
-- AND d.ins_discipline_key = cdisc_key
-- AND d.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep g, bes_srtdeel s
WHERE g.ins_discipline_key = d.ins_discipline_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) =
UPPER (d.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_minimumvoorraad bes_srtdeel.bes_srtdeel_voorraadmin%TYPE;
l_maximumvoorraad bes_srtdeel.bes_srtdeel_voorraadmax%TYPE;
l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE;
l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE;
l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE;
BEGIN
-- UPDATE SRTDEEL
ccount := 0;
FOR rec IN c_updsrtdeel
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 = rec.ins_discipline_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_voorraadmin,
bes_srtdeel_voorraadmax,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking
INTO l_omschrijving,
l_prijs,
-- l_inkprijs,
-- l_veelvoud,
-- l_minimum,
-- l_minimum,
l_minimumvoorraad,
l_maximumvoorraad,
l_wijzigdagen,
l_annuleerdagen,
l_opmerking
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr;
-- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs.
-- Later nog eens TODO
UPDATE bes_srtdeel
SET bes_srtgroep_key = l_srtgroep_key,
bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
bes_srtdeel_image = rec.ins_srtdeel_image,
-- bes_srtdeel_btw = rec.ins_srtdeel_btw,
bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid,
bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
-- bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud,
bes_srtdeel_voorraadmin = rec.ins_srtdeel_minimumvoorraad,
bes_srtdeel_voorraadmax = rec.ins_srtdeel_maximumvoorraad,
-- bes_staffeltabel_key = rec.bes_staffeltabel_key,
bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen,
bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking,
ins_srtdeel_key = (select ins_srtdeel_key
from ins_srtdeel i
where i.ins_srtdeel_code_upper = UPPER (rec.ins_kenmerk_objectsrtcode))
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
UPDATE bes_kenmerk
SET bes_srtkenmerk_key = (select bes_srtkenmerk_key
from bes_srtkenmerk b
where b.bes_srtkenmerk_upper = UPPER (rec.ins_kenmerk_kenmerksrt)),
-- bes_kenmerk_type = 'I',
-- bes_kenmerk_niveau = 'S',
bes_kenmerk_verplicht = rec.ins_kenmerk_verplicht,
bes_kenmerk_groep = rec.ins_kenmerk_groep,
bes_kenmerk_volgnummer = rec.ins_kenmerk_volgnr
WHERE bes_srtinstallatie_key = l_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, 0);
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_minimumvoorraad <> rec.ins_srtdeel_minimumvoorraad
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Miinimumvoorraad '
|| l_minimumvoorraad
|| ' -> '
|| rec.ins_srtdeel_minimumvoorraad
);
END IF;
IF l_maximumvoorraad <> rec.ins_srtdeel_maximumvoorraad
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Maximumvoorraad '
|| l_maximumvoorraad
|| ' -> '
|| rec.ins_srtdeel_maximumvoorraad
);
END IF;
IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Wijzigdagen '
|| l_wijzigdagen
|| ' -> '
|| rec.ins_srtdeel_wijzigdagen
);
END IF;
IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Annuleerdagen '
|| l_annuleerdagen
|| ' -> '
|| rec.ins_srtdeel_annuleerdagen
);
END IF;
IF l_opmerking <> rec.ins_srtdeel_opmerking
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_opmerking
|| ' is gewijzigd',
'Opmerking '
|| l_opmerking
|| ' -> '
|| rec.ins_srtdeel_opmerking
);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen bijgewerkt',
''
);
COMMIT;
-- INSERT SRTDEEL
ccount := 0;
FOR rec IN c_inssrtdeel
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 = rec.ins_discipline_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_voorraadmin,
bes_srtdeel_voorraadmax,
-- bes_staffeltabel_key,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking,
ins_srtdeel_key)
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_minimumvoorraad,
rec.ins_srtdeel_minimumvoorraad,
-- rec.bes_staffeltabel_key,
rec.ins_srtdeel_wijzigdagen,
rec.ins_srtdeel_annuleerdagen,
rec.ins_srtdeel_opmerking,
(select i.ins_srtdeel_key
from ins_srtdeel i
where i.ins_srtdeel_code_upper = UPPER (rec.ins_kenmerk_objectsrtcode)))
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, 0);
INSERT INTO bes_kenmerk (bes_srtkenmerk_key,
bes_srtinstallatie_key,
bes_kenmerk_type,
bes_kenmerk_niveau,
bes_kenmerk_verplicht,
bes_kenmerk_groep,
bes_kenmerk_volgnummer)
VALUES ((select bes_srtkenmerk_key
from bes_srtkenmerk b
where b.bes_srtkenmerk_upper = UPPER (rec.ins_kenmerk_kenmerksrt)),
l_bes_srtdeel_key,
'I',
'S',
rec.ins_kenmerk_verplicht,
rec.ins_kenmerk_groep,
rec.ins_kenmerk_volgnr);
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 dvon_imp_catartikel
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_catartikel (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 DVON_UPDATE_CATARTIKEL;
/
-- Objectsoorten import
CREATE OR REPLACE PROCEDURE DVON_IMPORT_OBJSRT (
p_import_key IN NUMBER
)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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_key_objsrtkey VARCHAR2 (255); -- Key van bestaande objectsoort (alleen bij exports)
v_discipline_omschrijving VARCHAR2 (255); -- Discipline omschrijving (moet al bestaan)
v_srtgroep_omschrijving VARCHAR2 (255); -- Objectgroep naam (moet al bestaan)
v_srtdeel_code VARCHAR2 (255); -- Objectcode
v_srtdeel_omschrijving VARCHAR2 (255); -- Objectomschrijving
v_srtdeel_uitleenbaar VARCHAR2 (255); -- Uitleenbaar ja/nee
v_bedrijf_naam VARCHAR2 (255); -- Leverancier (kenmerk bij objectsoort)
v_srtdeel_vervaldatum VARCHAR2 (255); -- Vervaldatum object
v_srtkenmerk_naam VARCHAR2 (255); -- Kenmerksoort (moet al bestaan)
v_srtkenmerk_bewerkbij VARCHAR2 (255); -- Kenmerk bewerken bij object of objectsoort
v_srtkenmerk_volgnr VARCHAR2 (255); -- Volgnummer
v_srtkenmerk_verplicht VARCHAR2 (255); -- Verplicht
v_srtkenmerk_groep VARCHAR2 (255); -- Kenmerkgroep
v_file_index NUMBER;
-- Overige velden
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_leverancier_key NUMBER (10);
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 (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF fac.safe_to_number (v_kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_key = fac.safe_to_number (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
-- Eerst opruiming
BEGIN
DELETE FROM DVON_IMP_OBJSRT;
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_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_key_objsrtkey);
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_uitleenbaar);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_naam);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_bewerkbij);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_volgnr);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_verplicht);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_groep);
v_aanduiding :=
'['
|| v_discipline_omschrijving
|| '|'
|| v_srtgroep_omschrijving
|| '|'
|| v_srtdeel_code
|| '|'
|| v_srtdeel_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 (TRIM (v_key_objsrtkey)) = 'OBJSRTKEY'
AND UPPER (TRIM (v_discipline_omschrijving)) LIKE 'DISCIPLINEOMSCHRIJVING%'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEPSOORTOMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_code)) = 'OBJECTSOORTCODE'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OBJECTSOORTOMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_uitleenbaar)) = 'UITLEENBAAR'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'VERVALDATUM'
AND UPPER (TRIM (v_srtkenmerk_naam)) = 'KENMERKSOORT'
AND UPPER (TRIM (v_srtkenmerk_bewerkbij)) LIKE 'BEWERKEN%'
AND UPPER (TRIM (v_srtkenmerk_volgnr)) = 'VOLGNUMMER'
AND UPPER (TRIM (v_srtkenmerk_verplicht)) = 'VERPLICHT'
AND UPPER (TRIM (v_srtkenmerk_groep)) = 'GROEP'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_discipline_omschrijving :=
TRIM (v_discipline_omschrijving);
IF v_discipline_omschrijving IS NULL
OR LENGTH (v_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF v_srtgroep_omschrijving IS NULL
OR LENGTH (v_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_srtdeel_code := TRIM (v_srtdeel_code);
IF v_srtdeel_code IS NULL OR LENGTH (v_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_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF v_srtdeel_omschrijving IS NULL
OR LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint := 'Discipline 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 ins_discipline_module = 'INS'
AND ins_discipline_verwijder IS NULL;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
v_errorhint :=
'Objectgroep onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE UPPER (ins_srtgroep_omschrijving) = UPPER (v_srtgroep_omschrijving)
AND ins_discipline_key = v_discipline_key
AND ins_srtgroep_verwijder IS NULL;
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE prs_bedrijf_naam_upper LIKE '%DIENST VERVOER%'
AND prs_bedrijf_verwijder IS NULL;
IF v_bedrijf_naam IS NOT NULL
THEN
SELECT f.fac_usrdata_key
INTO v_leverancier_key
FROM fac_usrdata f
WHERE UPPER (f.fac_usrdata_omschr) = UPPER (v_bedrijf_naam);
END IF;
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO DVON_IMP_OBJSRT (
fac_import_key,
ins_objsrt_key,
ins_discipline_key,
prs_bedrijf_key,
ins_srtgroep_key,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep
)
VALUES (
p_import_key,
v_key_objsrtkey,
v_discipline_key,
v_bedrijf_key,
v_srtgroep_key,
v_srtdeel_code,
v_srtdeel_omschrijving,
DECODE (v_srtdeel_uitleenbaar, 'ja', 1, NULL),
v_leverancier_key,
TO_DATE (v_srtdeel_vervaldatum, 'DD-MM-YYYY'),
v_srtkenmerk_naam,
v_srtkenmerk_bewerkbij,
v_srtkenmerk_volgnr,
DECODE (v_srtkenmerk_verplicht, 'ja', 1, NULL),
v_srtkenmerk_groep
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END DVON_IMPORT_OBJSRT;
/
CREATE OR REPLACE PROCEDURE DVON_UPDATE_OBJSRT (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_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_key,
ins_srtgroep_key,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep,
prs_bedrijf_key
FROM DVON_IMP_OBJSRT
WHERE ins_objsrt_key IS NULL;
-- GROUP BY ins_discipline_key,
-- ins_srtgroep_key,
-- UPPER (ins_srtdeel_code),
-- UPPER (ins_srtdeel_omschrijving);
CURSOR c2
IS
SELECT ins_objsrt_key,
ins_discipline_key,
ins_srtgroep_key,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
prs_bedrijf_key,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep
FROM DVON_IMP_OBJSRT
WHERE ins_objsrt_key IS NOT NULL;
-- GROUP BY ins_objsrt_key,
-- ins_discipline_key,
-- ins_srtgroep_key,
-- ins_srtdeel_code,
-- 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);
v_srtdeel_key NUMBER (10);
v_srtkenmerk_key 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 ins_discipline_key = rec.ins_discipline_key;
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 ins_srtgroep_key = rec.ins_srtgroep_key;
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;
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (rec.ins_srtkenmerk_naam);
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_vervaldatum,
ins_srtdeel_uitleenbaar,
ins_srtdeel_binding,
prs_bedrijf_key)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_vervaldatum,
rec.ins_srtdeel_uitleenbaar,
17,
rec.prs_bedrijf_key)
RETURNING ins_srtdeel_key
INTO v_srtdeel_key;
INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
ins_srtinstallatie_key,
ins_kenmerk_niveau,
ins_kenmerk_bewerkniveau,
ins_kenmerk_wissen,
ins_kenmerk_volgnummer,
ins_kenmerk_verplicht)
VALUES (v_srtkenmerk_key,
DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', v_discipline_key,
'deel', v_srtdeel_key),
'S',
DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', 'S',
'deel', 'D'),
0,
rec.ins_srtkenmerk_volgnr,
rec.ins_srtkenmerk_verplicht);
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde
)
VALUES (v_srtdeel_key,
241, -- kenmerkkey van leverancier
rec.ins_srtkenmerk_levkey);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
FOR rec IN c2
LOOP
BEGIN
-- Bepaal de soort kenmerk key
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (rec.ins_srtkenmerk_naam);
UPDATE ins_srtdeel
SET ins_srtgroep_key = rec.ins_srtgroep_key,
ins_srtdeel_code = rec.ins_srtdeel_code,
ins_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
ins_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
ins_srtdeel_uitleenbaar = rec.ins_srtdeel_uitleenbaar,
prs_bedrijf_key = rec.prs_bedrijf_key
WHERE ins_srtdeel_key = rec.ins_objsrt_key
RETURNING ins_srtdeel_key INTO v_srtdeel_key;
UPDATE ins_kenmerk
SET ins_kenmerk_bewerkniveau = DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', 'S',
'deel', 'D'),
ins_kenmerk_volgnummer = rec.ins_srtkenmerk_volgnr,
ins_kenmerk_verplicht = rec.ins_srtkenmerk_verplicht
WHERE ins_srtinstallatie_key = v_srtdeel_key;
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = rec.ins_srtkenmerk_levkey
WHERE ins_deel_key = v_srtdeel_key
AND ins_kenmerk_key = 241
AND ins_kenmerkdeel_waarde != rec.ins_srtkenmerk_levkey;
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;
-- MAIN
BEGIN
-- add_kostensoort (p_import_key);
-- add_insdiscipline (p_import_key);
-- add_resdiscipline (p_import_key);
-- add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
-- add_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END DVON_UPDATE_OBJSRT;
/
CREATE OR REPLACE PROCEDURE dvon_import_orgkost (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); -- Overlap hier met import_kpn
v_kostenplaats_omschrijving VARCHAR2 (255);
v_kostenplaats_module VARCHAR2 (255);
v_kostenplaats_begin VARCHAR2 (255);
v_kostenplaats_begin_d DATE;
v_kostenplaats_eind VARCHAR2 (255);
v_kostenplaats_eind_d DATE;
v_kostenplaatsgrp_oms VARCHAR2 (255);
v_kostenplaatsgrp_key NUMBER (10);
v_perslid VARCHAR2 (255);
v_perslid_key NUMBER (10);
v_kostenplaats_limiet VARCHAR2 (255);
v_kostenplaats_limietperiode VARCHAR2 (255);
v_kostenplaats_extern VARCHAR2 (255);
v_kostenplaats_fiat VARCHAR2 (255);
v_fiatteur_1 VARCHAR2 (255);
v_fiatteur_1_key NUMBER (10);
v_fiatteur_2 VARCHAR2 (255);
v_fiatteur_2_key NUMBER (10);
v_fiatteur_3 VARCHAR2 (255);
v_fiatteur_3_key NUMBER (10);
v_kostenplaatsgrp_nr VARCHAR2 (255);
v_kostenplaatsgrp_limiet VARCHAR2 (255);
v_kostenplaatsgrp_limietp VARCHAR2 (255);
-- 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 DVON_IMP_ORGKOST;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam_parent);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_module);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_begin);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_eind);
fac.imp_getfield (v_newline, c_fielddelimitor, v_perslid);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limiet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limietperiode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_extern);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_fiat);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_1);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_2);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_3);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_limiet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_limietp);
v_aanduiding := v_bedrijf_naam || '|' || v_afdeling_naam || '|' || v_afdeling_omschrijving || '|' || v_kostenplaats_nr || '|' || v_kostenplaats_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'
AND UPPER (v_perslid) = 'BUDGETHOUDER'
AND UPPER (v_kostenplaats_fiat) = 'OPDRACHTENFIATTEREN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_bedrijf_naam := TRIM (v_bedrijf_naam);
IF LENGTH (v_bedrijf_naam) > 60
THEN
v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Bedrijf-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_bedrijf_naam || ']'
);
END IF;
--
v_afdeling_naam := TRIM (v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 15
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']'
);
END IF;
--
v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);
IF LENGTH (v_afdeling_naam_parent) > 15
THEN
v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']'
);
END IF;
--
v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);
IF LENGTH (v_afdeling_omschrijving) > 60
THEN
v_afdeling_omschrijving := SUBSTR (v_afdeling_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingsomschrijving is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_omschrijving || ']'
);
END IF;
--
v_kostenplaats_nr := TRIM (v_kostenplaats_nr);
IF LENGTH (v_kostenplaats_nr) > 30
THEN
v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Kostenplaats-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_kostenplaats_nr || ']'
);
END IF;
IF LENGTH (v_kostenplaats_omschrijving) > 60
THEN
v_kostenplaats_omschrijving := SUBSTR (v_kostenplaats_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenpaatsomschrijving is te lang',
'Kostenpaatsomschrijving wordt afgebroken tot ['
|| v_kostenplaats_omschrijving
|| ']');
END IF;
--
v_kostenplaats_module := UPPER (TRIM (v_kostenplaats_module));
IF v_kostenplaats_module NOT IN ('ALG', 'PRS', 'PRJ')
THEN
v_kostenplaats_module := 'PRS';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Ongelding kostenplaatstype',
'Kostenplaatstype wordt aangepast naar [' || v_kostenplaats_module || ']');
END IF;
--
v_kostenplaats_begin := TRIM (v_kostenplaats_begin);
v_kostenplaats_begin_d := fac.safe_to_date (v_kostenplaats_begin, 'dd-mm-yyyy');
IF v_kostenplaats_begin IS NOT NULL AND v_kostenplaats_begin_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatsbegin is ongeldig',
'Kostenplaatsbegin wordt leeg gemaakt');
END IF;
--
v_kostenplaats_eind := TRIM (v_kostenplaats_eind);
v_kostenplaats_eind_d := fac.safe_to_date (v_kostenplaats_eind, 'dd-mm-yyyy');
IF v_kostenplaats_eind IS NOT NULL AND v_kostenplaats_eind_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatseind is ongeldig',
'Kostenplaatseind wordt leeg gemaakt');
END IF;
--
v_kostenplaatsgrp_oms := TRIM (v_kostenplaatsgrp_oms);
IF v_kostenplaatsgrp_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (v_kostenplaatsgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostenplaatsgrp_key := v_kostenplaatsgrp_key;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaatsgroep-aanduiding kan niet gevonden worden',
'Kostenplaatsgroep wordt aangemaakt [' || v_kostenplaatsgrp_oms || ']');
END;
ELSE
v_kostenplaatsgrp_key := NULL;
END IF;
--
v_perslid := TRIM (v_perslid);
IF v_perslid IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_perslid)
OR prs_perslid_oslogin = UPPER (v_perslid);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_perslid_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden',
'Budgethouder wordt leeg gemaakt [' || v_perslid || ']');
END;
ELSE
v_perslid_key := NULL;
END IF;
v_kostenplaats_limiet := TRIM (v_kostenplaats_limiet);
v_kostenplaats_limietperiode := UPPER (TRIM (v_kostenplaats_limietperiode));
IF v_kostenplaats_limietperiode IS NOT NULL
AND v_kostenplaats_limietperiode NOT IN ('J', 'M')
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgetperiode-aanduiding kan niet gevonden worden',
'Budgetperiode wordt leeg gemaakt [' || v_kostenplaats_limietperiode || ']');
END IF;
v_kostenplaats_extern := TRIM (v_kostenplaats_extern);
IF v_kostenplaats_extern IS NOT NULL AND v_kostenplaats_extern NOT IN ('0', '1')
THEN
v_kostenplaats_extern := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaats extern-aanduiding kan niet gevonden worden',
'Kostenplaats_extern-aanduiding wordt leeg gemaakt');
END IF;
v_kostenplaats_fiat := TRIM (v_kostenplaats_fiat);
IF v_kostenplaats_fiat IS NOT NULL AND v_kostenplaats_fiat NOT IN ('0', '1')
THEN
v_kostenplaats_fiat := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Opdrachtfiatteren-aanduiding kan niet gevonden worden',
'Opdrachtfiatteren-aanduiding wordt leeg gemaakt');
END IF;
IF v_fiatteur_1 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_1_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_1)
OR prs_perslid_oslogin = UPPER (v_fiatteur_1);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_1_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 1 kan niet gevonden worden',
'Fiatteur 1 wordt leeg gemaakt [' || v_fiatteur_1 || ']');
END;
ELSE
v_fiatteur_1_key := NULL;
END IF;
IF v_fiatteur_2 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_2_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_2)
OR prs_perslid_oslogin = UPPER (v_fiatteur_2);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_2_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 2 kan niet gevonden worden',
'Fiatteur 3 wordt leeg gemaakt [' || v_fiatteur_2 || ']');
END;
ELSE
v_fiatteur_2_key := NULL;
END IF;
IF v_fiatteur_3 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_3_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_3)
OR prs_perslid_oslogin = UPPER (v_fiatteur_3);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_3_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 3 kan niet gevonden worden',
'Fiatteur 3 wordt leeg gemaakt [' || v_fiatteur_3 || ']');
END;
ELSE
v_fiatteur_3_key := NULL;
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/kostenplaats [' || v_aanduiding || ']';
INSERT INTO DVON_IMP_ORGKOST (prs_bedrijf_naam,
prs_afdeling_naam,
prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_key,
prs_perslid_key,
prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode,
prs_kostenplaats_extern,
prs_kostenplaats_fiat,
prs_fiatteur_1,
prs_fiatteur_2,
prs_fiatteur_3,
prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_nr,
prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limietp
)
VALUES (
v_bedrijf_naam,
v_afdeling_naam,
v_afdeling_naam_parent,
v_afdeling_omschrijving,
v_kostenplaats_nr,
v_kostenplaats_omschrijving,
v_kostenplaats_module,
v_kostenplaats_begin_d,
v_kostenplaats_eind_d,
v_kostenplaatsgrp_key,
v_perslid_key,
fac.safe_to_number (v_kostenplaats_limiet),
DECODE (v_kostenplaats_limietperiode, 'M', 1, 'J', 2, 0),
fac.safe_to_number (v_kostenplaats_extern),
fac.safe_to_number (v_kostenplaats_fiat),
v_fiatteur_1_key,
v_fiatteur_2_key,
v_fiatteur_3_key,
v_kostenplaatsgrp_oms,
v_kostenplaatsgrp_nr,
fac.safe_to_number (v_kostenplaatsgrp_limiet),
DECODE (v_kostenplaatsgrp_limietp, 'M', 1, 'J', 2, 0)
);
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 dvon_import_orgkost;
/
CREATE OR REPLACE PROCEDURE dvon_import_orgkost_del (
p_import_key IN NUMBER
) IS
BEGIN
dvon_import_orgkost(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE DVON_UPDATE_ORGKOST (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_organisatie (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER(10);
v_ongeldig NUMBER(1);
v_count_update NUMBER(10);
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
--
v_bedrijf_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_prs_afdeling_parentkey NUMBER(10);
CURSOR cBedrijf
IS
SELECT min(prs_bedrijf_naam) prs_bedrijf_naam
FROM DVON_IMP_ORGKOST
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 DVON_IMP_ORGKOST
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 DVON_IMP_ORGKOST 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 DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST 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 DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST 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 DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST a3, DVON_IMP_ORGKOST 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 DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST a3, DVON_IMP_ORGKOST a4, DVON_IMP_ORGKOST 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;
-- SUBPROC
PROCEDURE add_organisatie_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_prs_delete_organisatie(p_import_key,1);
add_organisatie(p_import_key);
END;
-- SUBPROC
PROCEDURE update_kostenplaats (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT DISTINCT
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_key,
prs_perslid_key,
prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode,
prs_kostenplaats_extern,
prs_kostenplaats_fiat,
prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_nr,
prs_fiatteur_1,
prs_fiatteur_2,
prs_fiatteur_3,
prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limietp
FROM DVON_IMP_ORGKOST;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE;
v_kostenplaatsgrp_key prs_kostenplaatsgrp.prs_kostenplaatsgrp_key%TYPE;
BEGIN
FOR rec IN c
LOOP
BEGIN
BEGIN
v_aanduiding := rec.prs_kostenplaatsgrp_nr || '|' || rec.prs_kostenplaatsgrp_oms;
v_errorhint := 'Opzoeken kostenplaatsgroep';
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (rec.prs_kostenplaatsgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostenplaatsgroep';
INSERT INTO prs_kostenplaatsgrp (prs_kostenplaatsgrp_oms)
VALUES (rec.prs_kostenplaats_omschrijving)
RETURNING prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key;
END;
BEGIN
v_aanduiding := rec.prs_kostenplaats_nr || '|' || rec.prs_kostenplaats_omschrijving;
v_errorhint := 'Opzoeken kostenplaats';
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_upper = UPPER (rec.prs_kostenplaats_nr);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostenplaats';
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr,
prs_kostenplaats_module,
prs_kostenplaats_omschrijving)
VALUES (rec.prs_kostenplaats_nr,
rec.prs_kostenplaats_module,
rec.prs_kostenplaats_omschrijving)
RETURNING prs_kostenplaats_key
INTO v_kostenplaats_key;
END;
-- Even de kostenplaats groep updaten, dit kunnen fiatteuren en/of limieten zijn
UPDATE prs_kostenplaatsgrp g
SET prs_kostenplaatsgrp_oms = rec.prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_limiet = rec.prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limperiode = rec.prs_kostenplaatsgrp_limietp,
prs_kostenplaatsgrp_nr = rec.prs_kostenplaatsgrp_nr,
prs_perslid_key = rec.prs_fiatteur_1,
prs_kostenplaatsgrp_fiat2_key = rec.prs_fiatteur_2,
prs_kostenplaatsgrp_fiat3_key = rec.prs_fiatteur_3
WHERE g.prs_kostenplaatsgrp_key = v_kostenplaatsgrp_key;
-- We hebben nu een kostenplaats record aangemaakt of gevonden.
-- Dan gaan we deze nu updaten.
v_errorhint := 'Aanpassen kostenplaats';
UPDATE prs_kostenplaats k
SET prs_kostenplaats_omschrijving = rec.prs_kostenplaats_omschrijving,
prs_kostenplaats_module = rec.prs_kostenplaats_module,
prs_kostenplaats_begin = rec.prs_kostenplaats_begin,
prs_kostenplaats_eind = rec.prs_kostenplaats_eind,
prs_kostenplaatsgrp_key = rec.prs_kostenplaatsgrp_key,
prs_perslid_key = rec.prs_perslid_key,
prs_kostenplaats_limiet = rec.prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode = rec.prs_kostenplaats_limietperiode,
prs_kostenplaats_extern =
COALESCE (rec.prs_kostenplaats_extern, prs_kostenplaats_extern),
prs_kostenplaats_fiat = COALESCE (rec.prs_kostenplaats_fiat, prs_kostenplaats_fiat)
WHERE k.prs_kostenplaats_key = v_kostenplaats_key;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' | ' || v_aanduiding);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' | ' || v_aanduiding);
END;
-- MAIN
BEGIN
add_organisatie (p_import_key);
add_organisatie_del (p_import_key);
update_kostenplaats (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces afgebroken!');
END DVON_UPDATE_ORGKOST;
/
CREATE OR REPLACE PROCEDURE dvon_import_extrains (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
v_ins_srtkenmerk_key1 VARCHAR2 (255);
v_ins_srtkenmerk_key2 VARCHAR2 (255);
v_ins_srtkenmerk_key3 VARCHAR2 (255);
v_ins_srtkenmerk_key4 VARCHAR2 (255);
v_ins_srtkenmerk_key5 VARCHAR2 (255);
v_ins_srtkenmerk_key6 VARCHAR2 (255);
v_ins_srtkenmerk_key7 VARCHAR2 (255);
v_ins_srtkenmerk_key8 VARCHAR2 (255);
v_ins_srtkenmerk_key9 VARCHAR2 (255);
v_ins_srtkenmerk_key10 VARCHAR2 (255);
v_ins_srtkenmerk_key11 VARCHAR2 (255);
v_ins_srtkenmerk_key12 VARCHAR2 (255);
v_ins_srtkenmerk_key13 VARCHAR2 (255);
v_ins_srtkenmerk_key14 VARCHAR2 (255);
v_ins_srtkenmerk_key15 VARCHAR2 (255);
v_ins_srtkenmerk_key16 VARCHAR2 (255);
v_ins_srtkenmerk_key17 VARCHAR2 (255);
v_ins_srtkenmerk_key18 VARCHAR2 (255);
v_ins_srtkenmerk_key19 VARCHAR2 (255);
v_ins_srtkenmerk_key20 VARCHAR2 (255);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C60
v_ins_discipline_kostensoort VARCHAR2 (255); --C60
v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
v_ins_deel_omschrijving VARCHAR2 (255); -- C60
v_ins_deel_opmerking VARCHAR2 (1000); -- C320
v_reserveerbaar VARCHAR2 (255); -- C1
v_reserveerbaar_n NUMBER (1); -- N1
v_res_deel_eenheid VARCHAR2 (255); -- C10
v_res_deel_prijs VARCHAR2 (255); -- N7,2
v_res_deel_prijs_n NUMBER (7, 2); -- N7,2
v_alg_locatie_code VARCHAR2 (255); -- C10
v_alg_gebouw_code VARCHAR2 (255); -- C12
v_alg_verdieping_volgnr VARCHAR2 (255); -- N3
v_alg_verdieping_volgnr_n NUMBER (3); -- N3
v_alg_ruimte_nr VARCHAR2 (255); -- C10
v_res_deel_alg_level VARCHAR2 (255); -- C1 (naar -1 t/m 5)
v_res_deel_alg_level_n NUMBER (1); -- N1
v_res_discipline_omschrijving VARCHAR2 (255); -- C60
v_res_discipline_kostensoort VARCHAR2 (255); -- C60
v_prs_perslid_matchcode VARCHAR2 (255);
v_prs_perslid_matchwaarde VARCHAR2 (255);
v_ins_kenmerkwaarde1 VARCHAR2 (4000);
v_ins_kenmerkwaarde2 VARCHAR2 (4000);
v_ins_kenmerkwaarde3 VARCHAR2 (4000);
v_ins_kenmerkwaarde4 VARCHAR2 (4000);
v_ins_kenmerkwaarde5 VARCHAR2 (4000);
v_ins_kenmerkwaarde6 VARCHAR2 (4000);
v_ins_kenmerkwaarde7 VARCHAR2 (4000);
v_ins_kenmerkwaarde8 VARCHAR2 (4000);
v_ins_kenmerkwaarde9 VARCHAR2 (4000);
v_ins_kenmerkwaarde10 VARCHAR2 (4000);
v_ins_kenmerkwaarde11 VARCHAR2 (4000);
v_ins_kenmerkwaarde12 VARCHAR2 (4000);
v_ins_kenmerkwaarde13 VARCHAR2 (4000);
v_ins_kenmerkwaarde14 VARCHAR2 (4000);
v_ins_kenmerkwaarde15 VARCHAR2 (4000);
v_ins_kenmerkwaarde16 VARCHAR2 (4000);
v_ins_kenmerkwaarde17 VARCHAR2 (4000);
v_ins_kenmerkwaarde18 VARCHAR2 (4000);
v_ins_kenmerkwaarde19 VARCHAR2 (4000);
v_ins_kenmerkwaarde20 VARCHAR2 (4000);
v_file_index NUMBER;
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
-- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
-- discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- kw is bijvoorbeeld 'Parkeercode' of 'Parkeercode|3' waarbij de laatste in groep 3 zit
-- het resultaat is NULL (als niet gevonden) of 234|3 voor strkenmer_key 234 in groep 3
-- Als geen groep is meegegeven wordt 234|0 opgeleverd (de default groep)
FUNCTION bepaal_srtkenmerk_key (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF p_kw LIKE 'maat'
THEN -- maat, dus maar even wegzetten (wordt later gesplitst)
SELECT 9999
INTO v_srtkenmerk_key
FROM DUAL;
ELSE -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_ins;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
v_prs_perslid_matchcode := '';
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_reserveerbaar);
fac.imp_getfield (v_newline, c_delim, v_res_deel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_res_deel_prijs);
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_volgnr);
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_res_deel_alg_level);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde);
fac.imp_getfield (v_newline, c_delim, v_ins_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_ins_deel_opmerking) = 'OBJECTOPMERKING'
AND UPPER (v_reserveerbaar) = 'RESERVEERBAAR'
AND UPPER (v_res_deel_eenheid) = 'EENHEID'
AND UPPER (v_res_deel_prijs) = 'PRIJS'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE'
AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM'
AND UPPER (v_res_discipline_kostensoort) =
'CATALOGUSKOSTENSOORT'
AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
THEN
v_ins_srtkenmerk_key1 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde1);
v_ins_srtkenmerk_key2 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde2);
v_ins_srtkenmerk_key3 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde3);
v_ins_srtkenmerk_key4 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde4);
v_ins_srtkenmerk_key5 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde5);
v_ins_srtkenmerk_key6 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde6);
v_ins_srtkenmerk_key7 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde7);
v_ins_srtkenmerk_key8 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde8);
v_ins_srtkenmerk_key9 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde9);
v_ins_srtkenmerk_key10 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde10);
v_ins_srtkenmerk_key11 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde11);
v_ins_srtkenmerk_key12 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde12);
v_ins_srtkenmerk_key13 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde13);
v_ins_srtkenmerk_key14 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde14);
v_ins_srtkenmerk_key15 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde15);
v_ins_srtkenmerk_key16 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde16);
v_ins_srtkenmerk_key17 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde17);
v_ins_srtkenmerk_key18 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde18);
v_ins_srtkenmerk_key19 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde19);
v_ins_srtkenmerk_key20 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde20);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_ins_discipline_omschrijving :=
TRIM (v_ins_discipline_omschrijving);
IF v_ins_discipline_omschrijving IS NULL
OR LENGTH (v_ins_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Kostensoort ongeldig';
v_ins_discipline_kostensoort :=
TRIM (v_ins_discipline_kostensoort);
IF LENGTH (v_ins_discipline_kostensoort) > 60
THEN
v_ins_discipline_kostensoort :=
SUBSTR (v_ins_discipline_kostensoort, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Disciplinekostensoort wordt afgebroken tot ['
|| v_ins_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);
IF v_ins_srtgroep_omschrijving IS NULL
OR LENGTH (v_ins_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortcode ongeldig';
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortomschrijving ongeldig';
v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);
IF v_ins_srtdeel_omschrijving IS NULL
OR LENGTH (v_ins_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectomschrijving ongeldig';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF v_ins_deel_omschrijving IS NULL
OR LENGTH (v_ins_deel_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Objectopmerking ongeldig';
v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);
IF LENGTH (v_ins_deel_opmerking) > 320
THEN
v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Objectopmerking wordt afgebroken tot ['
|| v_ins_deel_opmerking
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1),
'J', 1,
0)
INTO v_reserveerbaar_n
FROM DUAL;
--
v_errormsg := 'Eenheid ongeldig';
v_res_deel_eenheid := TRIM (v_res_deel_eenheid);
IF LENGTH (v_res_deel_eenheid) > 10
THEN
v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Eenheid wordt afgebroken tot ['
|| v_res_deel_eenheid
|| ']'
);
END IF;
--
v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99';
v_res_deel_prijs := TRIM (v_res_deel_prijs);
v_res_deel_prijs_n := NULL;
IF (v_res_deel_prijs IS NOT NULL)
THEN
IF (fac.safe_to_number (v_res_deel_prijs) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs);
END IF;
END IF;
--
v_errormsg := 'Locatiecode ongeldig';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 10
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
END IF;
--
v_errormsg := 'Gebouwcode ongeldig';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 12
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
END IF;
--
v_errormsg := 'Bouwlaagvolgnummer ongeldig';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
v_alg_verdieping_volgnr_n := NULL;
IF (v_alg_verdieping_volgnr IS NOT NULL)
THEN
v_alg_verdieping_volgnr_n :=
ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));
IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_alg_verdieping_volgnr_n :=
fac.safe_to_number (v_alg_verdieping_volgnr);
END IF;
END IF;
--
v_errormsg := 'Ruimtenummer ongeldig';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF LENGTH (v_alg_ruimte_nr) > 10
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ruimtenummer wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1),
'E', 0,
'D', 1,
'L', 2,
'G', 3,
'V', 4,
'R', 5,
-1)
INTO v_res_deel_alg_level_n
FROM DUAL;
--
v_errormsg := 'Catalogusnaam ongeldig';
v_res_discipline_omschrijving :=
TRIM (v_res_discipline_omschrijving);
IF LENGTH (v_res_discipline_omschrijving) > 60
THEN
v_res_discipline_omschrijving :=
SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Catalogusnaam wordt afgebroken tot ['
|| v_res_discipline_omschrijving
|| ']'
);
END IF;
--
v_errormsg := 'Cataloguskostensoort ongeldig';
v_res_discipline_kostensoort :=
TRIM (v_res_discipline_kostensoort);
IF LENGTH (v_res_discipline_kostensoort) > 60
THEN
v_res_discipline_kostensoort :=
SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Cataloguskostensoort wordt afgebroken tot ['
|| v_res_discipline_kostensoort
|| ']'
);
END IF;
-- De rest alleen ff trimmen.
v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode);
v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde);
v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
-- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
-- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
-- dan is kenmerkwaarde<n> gevuld met <waarde>!
-- NB. Een NULL-waarde resulteert NIET in het wissen van een
-- kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
INSERT INTO fac_imp_ins (
ins_discipline_omschrijving,
ins_discipline_kostensoort,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
reserveerbaar,
res_deel_eenheid,
res_deel_prijs,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
res_deel_alg_level,
res_discipline_omschrijving,
res_discipline_kostensoort,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20
)
VALUES (
v_ins_discipline_omschrijving,
v_ins_discipline_kostensoort,
v_ins_srtgroep_omschrijving,
v_ins_srtdeel_code,
v_ins_srtdeel_omschrijving,
v_ins_deel_omschrijving,
v_ins_deel_opmerking,
v_reserveerbaar_n,
v_res_deel_eenheid,
v_res_deel_prijs_n,
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr_n,
v_alg_ruimte_nr,
v_res_deel_alg_level_n,
v_res_discipline_omschrijving,
v_res_discipline_kostensoort,
v_prs_perslid_matchcode,
v_prs_perslid_matchwaarde,
DECODE (v_ins_srtkenmerk_key1,
NULL, v_ins_kenmerkwaarde1,
'9999|0',
(SELECT i.ins_srtkenmerk_key || '|0'
FROM ins_v_aanwezigsrtkenmerk i, ins_v_srtdeel_kenmerk ik
WHERE i.ins_srtkenmerk_key = ik.ins_srtkenmerk_key
AND i.ins_srtkenmerk_upper LIKE '%MAAT%'
AND ik.ins_srtdeel_upper = UPPER (v_ins_srtdeel_omschrijving))
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900),
TO_CHAR (v_ins_srtkenmerk_key1)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key2,
NULL, v_ins_kenmerkwaarde2,
TO_CHAR (v_ins_srtkenmerk_key2)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key3,
NULL, v_ins_kenmerkwaarde3,
TO_CHAR (v_ins_srtkenmerk_key3)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key4,
NULL, v_ins_kenmerkwaarde4,
TO_CHAR (v_ins_srtkenmerk_key4)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key5,
NULL, v_ins_kenmerkwaarde5,
TO_CHAR (v_ins_srtkenmerk_key5)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key6,
NULL, v_ins_kenmerkwaarde6,
TO_CHAR (v_ins_srtkenmerk_key6)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key7,
NULL, v_ins_kenmerkwaarde7,
TO_CHAR (v_ins_srtkenmerk_key7)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key8,
NULL, v_ins_kenmerkwaarde8,
TO_CHAR (v_ins_srtkenmerk_key8)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key9,
NULL, v_ins_kenmerkwaarde9,
TO_CHAR (v_ins_srtkenmerk_key9)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key10,
NULL, v_ins_kenmerkwaarde10,
TO_CHAR (v_ins_srtkenmerk_key10)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key11,
NULL, v_ins_kenmerkwaarde11,
TO_CHAR (v_ins_srtkenmerk_key11)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key12,
NULL, v_ins_kenmerkwaarde12,
TO_CHAR (v_ins_srtkenmerk_key12)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key13,
NULL, v_ins_kenmerkwaarde13,
TO_CHAR (v_ins_srtkenmerk_key13)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key14,
NULL, v_ins_kenmerkwaarde14,
TO_CHAR (v_ins_srtkenmerk_key14)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key15,
NULL, v_ins_kenmerkwaarde15,
TO_CHAR (v_ins_srtkenmerk_key15)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key16,
NULL, v_ins_kenmerkwaarde16,
TO_CHAR (v_ins_srtkenmerk_key16)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key17,
NULL, v_ins_kenmerkwaarde17,
TO_CHAR (v_ins_srtkenmerk_key17)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key18,
NULL, v_ins_kenmerkwaarde18,
TO_CHAR (v_ins_srtkenmerk_key18)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key19,
NULL, v_ins_kenmerkwaarde19,
TO_CHAR (v_ins_srtkenmerk_key19)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key20,
NULL, v_ins_kenmerkwaarde20,
TO_CHAR (v_ins_srtkenmerk_key20)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)
)
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END dvon_import_extrains;
/
CREATE OR REPLACE PROCEDURE dvon_update_extrains (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
-- Conversie naar bruikbare objectomschrijvingen
PROCEDURE dvon_import_ins (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT
objectomschrijving,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
to_char (regexp_replace(substr (nummer, -7), '[^0-9]', '') +
ROW_NUMBER() OVER (PARTITION BY objectsoortcode ORDER BY objectsoortcode)) calc
FROM dvon_v_expbestelling_data;
BEGIN
FOR rec IN c1
LOOP
BEGIN
v_errormsg :='Fout bij converteren objectomschrijving object [' || rec.objectsoortcode || ']';
UPDATE fac_imp_ins
SET ins_deel_omschrijving = to_char (rec.objectsoortcode) || to_char (LPAD(rec.calc, 3, '0'))
WHERE ins_srtdeel_code = rec.objectsoortcode
AND ins_deel_omschrijving = to_char (rec.objectomschrijving);
END;
END LOOP;
COMMIT;
END;
-- SUBPROC
PROCEDURE add_kostensoort (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT prs_kostensoort_upper,
MAX (prs_kostensoort_omschrijving) prs_kostensoort_omschrijving
FROM ( SELECT UPPER (ins_discipline_kostensoort) prs_kostensoort_upper,
MAX (ins_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE ins_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (ins_discipline_kostensoort)
UNION ALL
SELECT UPPER (res_discipline_kostensoort) prs_kostensoort_upper,
MAX (res_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1 AND res_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (res_discipline_kostensoort))
GROUP BY prs_kostensoort_upper;
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper;
IF ccount = 0
THEN
INSERT INTO prs_kostensoort (prs_kostensoort_oms)
VALUES (rec.prs_kostensoort_omschrijving);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_discipline_kostensoort) ins_kostensoort_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
IF ccount = 0
THEN
IF rec.ins_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.ins_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('INS',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
VALUES (v_discipline_key, 0);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_resdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (res_discipline_omschrijving) res_discipline_upper,
UPPER (res_discipline_kostensoort) res_kostensoort_upper,
MAX (res_discipline_omschrijving) res_discipline_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1
GROUP BY UPPER (res_discipline_omschrijving), UPPER (res_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.res_discipline_upper;
IF ccount = 0
THEN
IF rec.res_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.res_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('RES',
SUBSTR (rec.res_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO res_disc_params (res_ins_discipline_key)
VALUES (v_discipline_key);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving);
v_discipline_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg :=
'Fout bij toevoegen groepsoort [' || rec.ins_srtgroep_omschrijving || '] ';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
IF ccount = 0
THEN
INSERT INTO ins_srtgroep (ins_discipline_key,
ins_srtgroep_module,
ins_srtgroep_omschrijving)
VALUES (v_discipline_key,
'INS',
SUBSTR (TRIM (rec.ins_srtgroep_omschrijving), 1, 60));
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
MAX (ins_srtdeel_code) ins_srtdeel_code,
MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving),
UPPER (ins_srtgroep_omschrijving),
UPPER (ins_srtdeel_code),
UPPER (ins_srtdeel_omschrijving);
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
v_errormsg :=
'Fout bij toevoegen objectsoort [' || rec.ins_srtdeel_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
IF ccount = 0
THEN
-- binding 17 betekent ruimtegebonden of persoonsgebonden
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
17);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
-- p_srtkenmerkgroepwaarde = '234|1=37-ZB-DR'
-- Ofwel: srtkenmerk_key|groep=waarde
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_srtkenmerkgroepwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_waarde VARCHAR(255);
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_srtkenmerkgroepwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk van soort [' || p_srtkenmerkgroepwaarde || ']';
v_srtkenmerk_key := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde, 1, INSTR (p_srtkenmerkgroepwaarde, '|') - 1));
v_groep := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde,
INSTR (p_srtkenmerkgroepwaarde, '|') + 1,
INSTR (p_srtkenmerkgroepwaarde, '=') - 1 - INSTR (p_srtkenmerkgroepwaarde, '|')));
v_waarde := SUBSTR (p_srtkenmerkgroepwaarde, INSTR (p_srtkenmerkgroepwaarde, '=') + 1);
SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE d.ins_deel_key = p_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND k.ins_srtkenmerk_key = v_srtkenmerk_key
AND k.ins_kenmerk_groep = v_groep
AND ( (k.ins_srtinstallatie_key = sd.ins_srtdeel_key
AND k.ins_kenmerk_niveau = 'S')
OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key
AND k.ins_kenmerk_niveau = 'G')
OR (k.ins_srtinstallatie_key = sg.ins_discipline_key
AND k.ins_kenmerk_niveau = 'D'))
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || v_waarde || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (v_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam, v_kolomnaam, v_kolomtxt
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT ( * ), MAX (ins_kenmerkdeel_key)
INTO ccount, v_kenmerkdeel_key
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_deel_key = p_deel_key AND ins_kenmerk_key = v_kenmerk_key;
IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN
v_waarde := REPLACE (v_waarde, ',', '.');
END IF;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
VALUES (p_deel_key, v_kenmerk_key, v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die als bestaan maar met de nieuwe import leeg zijn.
DELETE ins_kenmerkdeel
WHERE ins_kenmerk_key = v_kenmerk_key
AND ins_deel_key = p_deel_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_inskenmerk');
END;
-- SUBPROC
PROCEDURE add_deel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
reserveerbaar,
res_discipline_omschrijving,
res_deel_eenheid,
res_deel_prijs,
res_deel_alg_level,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20
FROM fac_imp_ins;
v_discipline_key NUMBER (10);
v_rdiscipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_matchkolom VARCHAR2 (255);
sql_stmt VARCHAR2 (1000);
v_ruimte_type VARCHAR2 (10);
v_deel_key NUMBER (10);
ccount NUMBER (10);
pcount NUMBER (10);
v_count_tot NUMBER (10);
v_count_insnew NUMBER (10);
v_count_insupd NUMBER (10);
v_count_resnew NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
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 (UPPER(ins_srtdeel_code)) = UPPER (rec.ins_srtdeel_code)
AND TRIM (ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschrijving);
v_locatie_key := NULL;
IF rec.alg_locatie_code IS NOT NULL
THEN -- ruimtegebonden object
v_errormsg := 'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (rec.alg_locatie_code);
v_errormsg := 'Fout bij bepalen gebouw [' || rec.alg_gebouw_code || ']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (rec.alg_gebouw_code);
v_errormsg :=
'Fout bij bepalen verdieping [' || rec.alg_verdieping_volgnr || ']';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec.alg_verdieping_volgnr;
v_errormsg := 'Fout bij bepalen ruimte [' || rec.alg_ruimte_nr || ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_verdieping_key
AND TRIM (alg_ruimte_upper_nr) = UPPER (rec.alg_ruimte_nr);
v_ruimte_type := 'R';
-- ruimtegebonden objecten hebben een unieke ID binnen locatie
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R
AND ins_alg_locatie_key = v_locatie_key
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
ELSE -- persoonsgebonden object
v_matchkolom := '';
CASE rec.prs_perslid_matchcode
WHEN '1'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '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 (:pwaarde) '
|| 'GROUP BY prs_perslid_key';
--dbms_output.put_line(rec.prs_perslid_matchwaarde);
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', rec.prs_perslid_matchwaarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.define_column(l_cursor_1, 2, pcount);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
-- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht??
DBMS_SQL.column_value (l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.column_value (l_cursor_1, 2, pcount);
DBMS_SQL.close_cursor(l_cursor_1);
--dbms_output.put_line(pcount);
IF pcount != 1
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Kan persoon niet 1-duidig bepalen');
END IF;
v_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_deel_opmerking,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key)
VALUES (v_discipline_key,
v_srtdeel_key,
'INS',
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
v_ruimte_key,
v_ruimte_type,
v_locatie_key)
RETURNING ins_deel_key
INTO v_deel_key;
-- Overslaan als reserveerbaar en geen RES-discipline of andersom,
-- dus verder geen controle op eventuele inconsistentie!
IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL)
THEN
v_errormsg :=
'Fout bij bepalen RES-discipline ['
|| rec.res_discipline_omschrijving
|| ']';
SELECT ins_discipline_key
INTO v_rdiscipline_key
FROM res_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.res_discipline_omschrijving);
v_errormsg := 'Fout bij toevoegen RES-object';
INSERT INTO res_deel (res_ins_deel_key,
res_deel_omschrijving,
res_deel_opmerking,
res_deel_eenheid,
res_deel_prijs,
res_discipline_key,
res_deel_alg_level)
VALUES (v_deel_key,
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
rec.res_deel_eenheid,
rec.res_deel_prijs,
v_rdiscipline_key,
rec.res_deel_alg_level);
v_count_resnew := v_count_resnew + 1;
END IF;
v_srtnoti_code := 'INSNEW';
v_count_insnew := v_count_insnew + 1;
ELSE -- bijwerken object!
v_errormsg := 'Fout bij bepalen INS-object';
SELECT ins_deel_key
INTO v_deel_key
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R/P
AND COALESCE (ins_alg_locatie_key, -1) = COALESCE (v_locatie_key, -1) -- gevuld/NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
v_srtnoti_code := 'INSUPD';
v_count_insupd := v_count_insupd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)! ins_kenmerkwaarde1
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde1);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde2);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde3);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde4);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde5);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde6);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde7);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde8);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde9);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde10);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde11);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde12);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde13);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde14);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde15);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde16);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde17);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde18);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde19);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde20);
fac.trackaction (v_srtnoti_code,
v_deel_key,
sys_context('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
NULL);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_insnew),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_insupd),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_resnew),
'');
COMMIT;
END;
-- MAIN
BEGIN
dvon_import_ins (p_import_key);
add_kostensoort (p_import_key);
add_insdiscipline (p_import_key);
add_resdiscipline (p_import_key);
add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
add_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END dvon_update_extrains;
/
-- Ingelezen objecten in bulk uitleenbaar maken via export
CREATE OR REPLACE PROCEDURE DVON_EXPORT_LEENMAARUIT (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
BEGIN
UPDATE ins_srtdeel
SET ins_srtdeel_uitleenbaar = 1
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_uitleenbaar != 1;
UPDATE ins_deel
SET ins_alg_ruimte_key_org = 201,
ins_alg_ruimte_type_org = 'R'
WHERE ins_alg_ruimte_type = 'P'
AND ins_alg_ruimte_key_org IS NULL;
END;
/
-- Vanaf hier rapportages
CREATE OR REPLACE VIEW dvon_v_rap_voorraad
(
srtdeel_key,
object_groep,
object_soort,
maat,
aantal,
locatie,
gebouw,
verdiepingcode,
ruimtenr
)
AS
SELECT i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
maat.fac_usrdata_omschr,
COALESCE (COUNT (maat.fac_usrdata_omschr), 0),
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
FROM ins_deel i,
ins_srtdeel srt,
ins_srtgroep ig,
alg_ruimte ar,
alg_locatie al,
alg_gebouw ag,
alg_verdieping av,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_srtdeel_key = srt.ins_srtdeel_key
AND i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND srt.ins_srtgroep_key = ig.ins_srtgroep_key
AND ar.alg_verdieping_key = av.alg_verdieping_key
AND av.alg_gebouw_key = ag.alg_gebouw_key
AND ag.alg_locatie_key = al.alg_locatie_key
AND i.ins_deel_key = maat.ins_deel_key(+)
AND maat.fac_usrdata_omschr IS NOT NULL
AND i.ins_alg_ruimte_key_org IS NULL
GROUP BY i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
maat.fac_usrdata_omschr,
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
UNION ALL
SELECT i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
'NVT',
COUNT (i.ins_deel_key),
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
FROM ins_deel i,
ins_srtdeel srt,
ins_srtgroep ig,
alg_ruimte ar,
alg_locatie al,
alg_gebouw ag,
alg_verdieping av
WHERE NOT EXISTS
(SELECT 1
FROM ins_kenmerk ik, ins_srtkenmerk isk
WHERE i.ins_srtdeel_key = ik.ins_srtinstallatie_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%')
AND i.ins_srtdeel_key = srt.ins_srtdeel_key
AND i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND srt.ins_srtgroep_key = ig.ins_srtgroep_key
AND ar.alg_verdieping_key = av.alg_verdieping_key
AND av.alg_gebouw_key = ag.alg_gebouw_key
AND ag.alg_locatie_key = al.alg_locatie_key
AND i.ins_alg_ruimte_key_org IS NULL
GROUP BY i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr;
CREATE OR REPLACE VIEW dvon_v_rap_voorraad_auth
(
fclt_3d_discipline_key,
srtdeel_key,
object_groep,
object_soort,
maat,
aantal,
locatie,
gebouw,
verdiepingcode,
ruimtenr
)
AS
SELECT i.ins_discipline_key,
sub.ins_srtdeel_key,
iv.groep,
iv.soort,
maat.fac_usrdata_omschr,
COALESCE (COUNT (maat.fac_usrdata_omschr), 0),
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr
FROM ins_v_udr_deel iv,
ins_discipline i,
( SELECT ins_deel_key, ins_srtdeel_key FROM ins_deel) sub,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE iv.deel_key = maat.ins_deel_key(+)
AND maat.fac_usrdata_omschr IS NOT NULL
AND iv.uitgeleend NOT LIKE 'ja'
AND sub.ins_deel_key = iv.deel_key
AND i.ins_discipline_omschrijving = iv.discipline
AND i.ins_discipline_verwijder IS NULL
GROUP BY sub.ins_srtdeel_key,
maat.fac_usrdata_omschr,
iv.groep,
iv.soort,
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr,
i.ins_discipline_key
UNION ALL
SELECT i.ins_discipline_key,
sub.ins_srtdeel_key,
iv.groep,
iv.soort,
'NVT',
COUNT (iv.deel_key),
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr
FROM ins_v_udr_deel iv,
ins_discipline i,
( SELECT ins_deel_key, ins_srtdeel_key FROM ins_deel) sub
WHERE NOT EXISTS
(SELECT 1
FROM ins_kenmerk ik,
ins_srtkenmerk isk
WHERE
sub.ins_srtdeel_key = ik.ins_srtinstallatie_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%')
AND iv.uitgeleend NOT LIKE 'ja'
AND sub.ins_deel_key = iv.deel_key
AND i.ins_discipline_omschrijving = iv.discipline
AND i.ins_discipline_verwijder IS NULL
GROUP BY sub.ins_srtdeel_key,
iv.groep,
iv.soort,
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr,
i.ins_discipline_key;
CREATE OR REPLACE VIEW dvon_v_rap_bes_voorraad
(
bestelopdrachtnummer,
bestellingkey,
bestelaanvraagnr,
besteldatum,
status,
besteller,
catalogus,
groep,
objectgroep,
productomschrijving,
productcode,
maat,
aantal,
kleurbolletje,
op_voorraad,
voorraad_locatie,
opmerking,
besteld_voor,
bestopdr_key
)
AS
SELECT bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_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 maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat(+) = maat.fac_usrdata_omschr
AND maat.fac_usrdata_omschr NOT LIKE '%NVT%'
UNION ALL
SELECT bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_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 maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat = 'NVT';
CREATE OR REPLACE VIEW dvon_v_rap_bes_voorraad_auth
(
fclt_3d_discipline_key,
bestelopdrachtnummer,
bestellingkey,
bestelaanvraagnr,
besteldatum,
status,
besteller,
catalogus,
groep,
objectgroep,
productomschrijving,
productcode,
maat,
aantal,
kleurbolletje,
op_voorraad,
voorraad_locatie,
opmerking,
besteld_voor,
bestopdr_key
)
AS
SELECT d.ins_discipline_key,
bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_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 maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat(+) = maat.fac_usrdata_omschr
AND maat.fac_usrdata_omschr NOT LIKE '%NVT%'
UNION ALL
SELECT d.ins_discipline_key,
bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_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 maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat = 'NVT';
CREATE OR REPLACE VIEW dvon_v_rap_gelev_nbev
(
bestelling_key,
bestelaanvraagnr,
besteld_voor,
bestelling_status,
kostenplaats,
datum_laatste_lev,
email_besteld_voor,
fiatteur,
email_fiatteur
)
AS
SELECT DISTINCT
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
pk.prs_kostenplaats_omschrijving,
b.bes_bestelling_leverdatum,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = b.prs_perslid_key_voor)
email_voor,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.bes_bestelling_fiat_user)
fiatteur,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = b.bes_bestelling_fiat_user)
email_fiat
FROM bes_bestelling b,
prs_v_perslid_fullnames pf,
prs_kostenplaats pk,
prs_perslid p
WHERE b.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND b.bes_bestelling_leverdatum IS NOT NULL
AND b.bes_bestelling_status = 6;
CREATE OR REPLACE VIEW dvon_v_rap_bezit_extra
(
perslid_key,
deel_key,
fclt_3d_discipline_key,
deel_soort,
deel_oms,
maat,
uitgegeven,
eigenaar,
locatie
)
AS
SELECT (SELECT pf.prs_perslid_key
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
perslid_key,
i.ins_deel_key,
i.ins_discipline_key,
isrt.ins_srtdeel_omschrijving,
i.ins_deel_omschrijving,
maat.fac_usrdata_omschr,
DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uitgegeven,
(SELECT pf.prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
persoon,
(SELECT ar.alg_ruimte_upper_nr
FROM alg_ruimte ar
WHERE i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND i.ins_alg_ruimte_type = 'R')
locatie
FROM ins_deel i,
ins_srtdeel isrt,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = fac.safe_to_number (iv.ins_kenmerkdeel_waarde)
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_deel_key = maat.ins_deel_key(+)
AND i.ins_srtdeel_key = isrt.ins_srtdeel_key
AND i.ins_deel_verwijder IS NULL;
CREATE OR REPLACE VIEW dvon_v_rap_bezit_extra_print
(
perslid_key,
deel_key,
fclt_3d_discipline_key,
discipline,
deel_soort,
deel_oms,
maat,
uitgegeven,
eigenaar,
locatie
)
AS
SELECT (SELECT pf.prs_perslid_key
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
perslid_key,
i.ins_deel_key,
i.ins_discipline_key,
idc.ins_discipline_omschrijving,
isrt.ins_srtdeel_omschrijving,
i.ins_deel_omschrijving,
maat.fac_usrdata_omschr,
DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uitgegeven,
(SELECT pf.prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
persoon,
(SELECT ar.alg_ruimte_upper_nr
FROM alg_ruimte ar
WHERE i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND i.ins_alg_ruimte_type = 'R')
locatie
FROM ins_deel i,
ins_srtdeel isrt,
ins_discipline idc,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_deel_key = maat.ins_deel_key(+)
AND i.ins_srtdeel_key = isrt.ins_srtdeel_key
AND i.ins_deel_verwijder IS NULL
AND i.ins_discipline_key = idc.ins_discipline_key;
CREATE OR REPLACE VIEW dvon_v_rap_art_voorraad
(
-- fclt_3d_discipline_key,
-- catalogus,
-- groep,
productomschrijving,
maat,
aantal_besteld,
op_voorraad,
onvoldoende_voorraad
)
AS
SELECT --fclt_3d_discipline_key,
--catalogus,
--groep,
productomschrijving,
maat,
SUM (aantal) besteld,
op_voorraad,
CASE WHEN op_voorraad - SUM (aantal) < 0 THEN '!' ELSE 'V' END
FROM dvon_v_rap_bes_voorraad_auth
GROUP BY --fclt_3d_discipline_key,
--catalogus,
--groep,
productomschrijving,
maat,
op_voorraad;
CREATE OR REPLACE VIEW dvon_v_rap_impobjsrt
(
objsrtkey,
disciplineomschrijving,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
Uitleenbaar,
Leverancier,
Vervaldatum,
Kenmerksoort,
Bewerken_bij,
Volgnummer,
Verplicht,
Groep
)
AS
SELECT i.ins_srtdeel_key,
itab.ins_discipline_omschrijving,
ig.ins_srtgroep_omschrijving,
i.ins_srtdeel_code,
i.ins_srtdeel_omschrijving,
DECODE (i.ins_srtdeel_uitleenbaar, 1, 'ja', 'nee'),
sub.fac_usrdata_omschr,
i.ins_srtdeel_vervaldatum,
isk.ins_srtkenmerk_omschrijving,
DECODE (ik.ins_kenmerk_bewerkniveau, 'D', 'deel', 'S', 'soort'),
ik.ins_kenmerk_volgnummer,
DECODE (ik.ins_kenmerk_verplicht, 1, 'ja', 'nee'),
ik.ins_kenmerk_groep
FROM ins_srtdeel i,
ins_kenmerk ik,
ins_srtkenmerk isk,
ins_srtgroep ig,
ins_tab_discipline itab,
(SELECT f.fac_usrdata_omschr, i.ins_deel_key
FROM fac_usrdata f, ins_kenmerkdeel i
WHERE i.ins_kenmerkdeel_waarde = f.fac_usrdata_key
AND i.ins_kenmerk_key = 241) sub
WHERE i.ins_srtgroep_key = ig.ins_srtgroep_key
AND ig.ins_discipline_key = itab.ins_discipline_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND ik.ins_kenmerk_niveau = 'S'
AND ik.ins_srtinstallatie_key = i.ins_srtdeel_key
AND i.ins_srtdeel_key = sub.ins_deel_key(+)
AND i.ins_srtdeel_verwijder IS NULL
AND ik.ins_kenmerk_verwijder IS NULL;
CREATE OR REPLACE VIEW DVON_V_RAP_ORGKOST
(
Bedrijfsnaam,
Afdelingscodeparent,
Afdelingscode,
Afdelingsomschrijving,
Kostenplaats,
Kostenplaatsomschrijving,
KostenplaatsType,
Kostenplaatsbegin,
Kostenplaatseind,
Budgethouder,
KostenplaatsBudget,
KostenplaatsBudgetPeriode,
KostenplaatsExtern,
OpdrachtenFiatteren,
Kostenplaatsgroep,
Kostenplaatsgroepnummer,
Fiatteur_1,
Fiatteur_2,
Fiatteur_3,
Limiet,
Limiet_periode
)
AS
SELECT pb.prs_bedrijf_naam,
par.prs_afdeling_naam,
pa.prs_afdeling_naam,
pa.prs_afdeling_omschrijving,
pk.prs_kostenplaats_nr,
pk.prs_kostenplaats_omschrijving,
pk.prs_kostenplaats_module,
TRUNC (pk.prs_kostenplaats_begin),
TRUNC (pk.prs_kostenplaats_eind),
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pk.prs_perslid_key)
budgethouder,
prs_kostenplaats_limiet,
DECODE (pk.prs_kostenplaats_limietperiode, 1, 'M', 2, 'J', 0),
pk.prs_kostenplaats_extern,
pk.prs_kostenplaats_fiat,
pkg.prs_kostenplaatsgrp_oms,
pkg.prs_kostenplaatsgrp_nr,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_perslid_key)
fiat1,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_kostenplaatsgrp_fiat2_key)
fiat2,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_kostenplaatsgrp_fiat3_key)
fiat3,
pkg.prs_kostenplaatsgrp_limiet,
DECODE (pkg.prs_kostenplaatsgrp_limperiode, 1, 'M', 2, 'J', 0)
FROM prs_afdeling pa,
prs_bedrijf pb,
prs_kostenplaats pk,
prs_kostenplaatsgrp pkg,
(SELECT prs_afdeling_key, prs_afdeling_naam FROM prs_afdeling) par
WHERE pa.prs_bedrijf_key = pb.prs_bedrijf_key(+)
AND pa.prs_afdeling_parentkey = par.prs_afdeling_key(+)
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND pk.prs_kostenplaatsgrp_key = pkg.prs_kostenplaatsgrp_key(+)
AND pb.prs_bedrijf_verwijder IS NULL
AND pk.prs_kostenplaats_verwijder IS NULL
AND pa.prs_afdeling_verwijder IS NULL;
-- t.b.v. de import CATARTIKEL, IN TESTFASE!!
CREATE OR REPLACE VIEW dvon_v_rap_impcatartikel
(
catalogusnaam,
leverancier,
artikelnr,
groep,
omschrijving,
prijs,
eenheid,
picture,
wijzigdagen,
annuleerdagen,
duedate,
minimumvoorraad,
maximumvoorraad,
opmerking,
objectsoortcode,
kenmerksoort,
volgnummer,
verplicht,
kenmerkgroep
)
AS
SELECT DISTINCT
i.ins_discipline_omschrijving,
pb.prs_bedrijf_naam,
b.bes_srtdeel_nr,
bg.bes_srtgroep_omschrijving,
b.bes_srtdeel_omschrijving,
NULL ,--prijs is altijd leeg
b.bes_srtdeel_eenheid,
b.bes_srtdeel_image,
b.bes_srtdeel_wijzigdagen,
b.bes_srtdeel_annuleerdagen,
b.bes_srtdeel_vervaldatum,
b.bes_srtdeel_voorraadmin,
b.bes_srtdeel_voorraadmax,
b.bes_srtdeel_opmerking,
sd.ins_srtdeel_code,
bsk.bes_srtkenmerk_omschrijving,
bk.bes_kenmerk_volgnummer,
bk.bes_kenmerk_verplicht,
bk.bes_kenmerk_groep
FROM
bes_srtdeel b,
bes_srtgroep bg,
bes_kenmerk bk,
bes_srtkenmerk bsk,
prs_bedrijf pb,
bes_discipline i,
ins_srtdeel sd
WHERE
b.prs_bedrijf_key = pb.prs_bedrijf_key
AND b.bes_srtgroep_key = bg.bes_srtgroep_key(+)
AND bg.ins_discipline_key = i.ins_discipline_key(+)
AND b.ins_srtdeel_key = sd.ins_srtdeel_key
AND bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
AND bk.bes_srtinstallatie_key = b.bes_srtdeel_key
AND b.bes_srtdeel_verwijder IS NULL;
-- Voor het exporteren van bestelde artikelen om later in te lezen via de objectenimport
CREATE OR REPLACE VIEW dvon_v_rap_expbestelling
(
bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
objectidentificatie,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
ingangsdatum,
vervaldatum,
aantal,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
)
AS
SELECT sub.bes_bestelling_key,
d.ins_discipline_omschrijving,
NULL,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
MAX (I.INS_DEEL_OMSCHRIJVING),
NULL, -- geen opmerking
NULL, -- reserveerbaar is nvt
NULL, -- eenheid is nvt
NULL, -- prijs is nvt
'DVO-ASSEN3', -- locatiecode
'DVO-ASS-MA', -- gebouwcode
'0', -- bouwlaag
'MAGAZIJN', --ruimtenummer
NULL, -- reserveringscope
NULL, -- catalogusnaam
NULL, -- cataloguskostensoort
NULL, -- persoonmatchcode
NULL, -- persoonmatchwaarde
NULL, -- ingangsdatum
NULL, -- vervaldatum
sub.aantal, -- aantal, moet nog omgebogen worden
sub.maat, -- kenmerk 1
-- en hieronder kenmerk 2 tm 20
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM ( SELECT b.bes_bestelling_key,
sd.ins_srtdeel_key,
sd.bes_srtdeel_omschrijving productomschrijving,
maat.fac_usrdata_omschr maat,
SUM (bi.bes_bestelling_item_aantal) aantal
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key =
boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) =
bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_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 maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
GROUP BY (b.bes_bestelling_key,
sd.ins_srtdeel_key,
sd.bes_srtdeel_omschrijving,
-- bi.bes_bestelling_item_aantal,
maat.fac_usrdata_omschr)) sub,
ins_tab_discipline d,
ins_deel i,
ins_srtdeel sd,
ins_srtgroep sg
WHERE sub.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtdeel_key = i.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND sub.ins_srtdeel_key IS NOT NULL
GROUP BY (sub.bes_bestelling_key,
d.ins_discipline_omschrijving,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
sub.aantal,
sub.maat);
-- Bovenstaande view maar dan in formaat voor import EXTRAINS
CREATE OR REPLACE VIEW dvon_v_expbestelling_data
(
bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
objectomschrijving,
nummer,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
)
AS
SELECT bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
ROWNUM,
objectidentificatie,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
FROM dvon_v_rap_expbestelling d
CROSS JOIN
( SELECT ROWNUM n
FROM DUAL
CONNECT BY LEVEL <=
(SELECT MAX (aantal)
FROM dvon_v_rap_expbestelling))
WHERE n <= aantal
ORDER BY objectsoortcode;
CREATE OR REPLACE VIEW dvon_v_noti_bes_deel
(
code,
sender,
receiver,
text,
key,
xkey
)
AS
SELECT DISTINCT
'CUST01',
NULL,
b.prs_perslid_key,
'Deellevering voor bestelling met nummer '
|| b.bes_bestelling_key,
b.bes_bestelling_key,
NULL
FROM bes_bestelling b,
(SELECT
bes_bestelling_key,
SUM (bes_bestelling_item_aantalontv) aantalontv,
SUM (bes_bestelling_item_aantal) aantal
FROM bes_bestelling_item
GROUP BY bes_bestelling_key) bi,
bes_bestelopdr bo,
fac_tracking fa
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.aantalontv IS NOT NULL -- Er moeten artikelen ontvangen zijn voor een deellevering
AND bi.aantalontv < bi.aantal -- Levering is nog niet compleet
AND fa.fac_tracking_refkey = bo.bes_bestelopdr_key
AND fa.fac_srtnotificatie_key = 25 -- BESUPD er is iets geleverd
AND b.bes_bestelling_key = substr(bo.bes_bestelopdr_id, 1, instr(bo.bes_bestelopdr_id, '/')-1)
AND fa.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval
/ 24
FROM fac_notificatie_job
WHERE fac_notificatie_job_view =
'DVON_V_NOTI_BES_DEEL')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE fac_notificatie_job_view =
'DVON_V_NOTI_BES_DEEL');
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile