Files
Customer/onces/PDKL/PDKL#86262_2.sql
Suzan Wiegerinck 5f2c9d2cbc PDKL#86262 Uitgebreide import voor bestelcatalogi en artikelen
svn path=/Customer/; revision=70622
2025-10-15 14:06:16 +00:00

1295 lines
58 KiB
SQL

--
-- $Id$
--
-- PDKL#86262 Implementatie Polidirect Klinieken
-- Import voor bestelvoorraad
--
DEFINE thisfile = 'PDKL#86262_2.SQL'
DEFINE dbuser = '^PDKL'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust ('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
CREATE TABLE pdkl_imp_catalogus
(
fac_import_key NUMBER (10),
ins_discipline_key NUMBER (10),
prs_bedrijf_key NUMBER (10),
fac_imp_catalogus_datum DATE,
ins_srtdeel_nr VARCHAR2 (32),
ins_srtgroep_omschrijving VARCHAR2 (60),
ins_srtdeel_omschrijving VARCHAR2 (100),
ins_srtdeel_prijs NUMBER (11, 5),
ins_srtdeel_eenheid VARCHAR2 (30),
ins_srtdeel_image VARCHAR2 (255),
ins_srtdeel_veelvoud NUMBER (6),
ins_srtdeel_btw NUMBER (3),
ins_srtdeel_vervaldatum DATE,
ins_srtdeel_inkprijs NUMBER (11, 5),
ins_srtdeel_minimum NUMBER (6),
bes_staffeltabel_key NUMBER (10),
ins_srtdeel_wijzigdagen NUMBER (3),
ins_srtdeel_annuleerdagen NUMBER (3),
ins_srtdeel_opmerking VARCHAR2 (2000),
ins_srtdeel_sensortype NUMBER (3),
ins_srtdeel_acadsymbol_dwgx NUMBER (16, 3),
ins_srtdeel_acadsymbol_dwgy NUMBER (16, 3),
ins_srtdeel_externnr VARCHAR2 (256),
bes_srtdeel_maximum NUMBER (6),
bes_srtdeel_notitie VARCHAR2 (50), -- magazijnlocatie
bes_srtdeel_volgnr NUMBER (3),
bes_srtdeel_voorraadmin NUMBER (3),
bes_srtdeel_voorraadmax NUMBER (3)
);
-- Procedures om catalogi in te lezen en te verwerken
CREATE OR REPLACE PROCEDURE pdkl_import_catalogus (p_import_key IN NUMBER)
IS
p_discipline_key NUMBER (10);
p_bedrijf_key NUMBER (10);
c_delim VARCHAR2 (2) := fac.import_delimiter (p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_discipline_omschrijving VARCHAR2 (255);
v_bedrijf_naam VARCHAR2 (255);
v_catalogus_datum VARCHAR2 (255);
v_srtdeel_nr VARCHAR2 (255);
v_srtgroep_omschrijving VARCHAR2 (255);
v_srtdeel_omschrijving VARCHAR2 (255);
v_srtdeel_prijs VARCHAR2 (255);
v_srtdeel_eenheid VARCHAR2 (255);
v_srtdeel_image VARCHAR2 (255);
v_srtdeel_veelvoud VARCHAR2 (255);
v_srtdeel_btw VARCHAR2 (255);
v_srtdeel_vervaldatum VARCHAR2 (255);
v_srtdeel_inkprijs VARCHAR2 (255);
v_srtdeel_minimum VARCHAR2 (255);
v_bes_staffeltabel_naam VARCHAR2 (255);
v_srtdeel_wijzigdagen VARCHAR2 (255);
v_srtdeel_annuleerdagen VARCHAR2 (255);
v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000
v_srtdeel_maximum VARCHAR2 (255);
v_srtdeel_notitie VARCHAR2 (255);
v_srtdeel_volgnr VARCHAR2 (255);
v_srtdeel_voorraadmin VARCHAR2 (255);
v_srtdeel_voorraadmax VARCHAR2 (255);
-- Overige velden:
v_discipline_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_bes_staffeltabel_key NUMBER (10);
CURSOR c1 IS
SELECT fac_imp_file_line,
LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, ''))) regellengte
FROM FAC_IMP_FILE
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
SELECT ins_discipline_key, prs_bedrijf_key
INTO p_discipline_key, p_bedrijf_key
FROM fac_import fi, fac_import_app fia
WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key;
-- Eerst opruiming
-- LET OP: we ondersteunen geen multi-variant meer
DELETE FROM fac_imp_catalogus;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '';
v_errorhint := 'Fout inlezen importregel';
v_newline := rec.fac_imp_file_line;
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_catalogus_datum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr);
fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_image);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_veelvoud);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_btw);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_inkprijs);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimum);
fac.imp_getfield (v_newline, c_delim, v_bes_staffeltabel_naam);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_maximum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_notitie);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_volgnr);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_voorraadmin);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_voorraadmax);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle
-- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen").
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
--AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS'
AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID'
AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE'
AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL'
AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE'
AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS'
AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM'
AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL'
--AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar!
--AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING'
AND UPPER (TRIM (v_srtdeel_maximum)) = 'MAXIMUM'
AND UPPER (TRIM (v_srtdeel_notitie)) = 'NOTITIE'
AND UPPER (TRIM (v_srtdeel_volgnr)) = 'VOLGNUMMER'
AND UPPER (TRIM (v_srtdeel_voorraadmin)) = 'MINIMUMVOORRAAD'
AND UPPER (TRIM (v_srtdeel_voorraadmax)) = 'MAXIMUMVOORRAAD'
THEN
header_is_valid := 1;
END IF;
ELSIF rec.regellengte > 1 -- Lege regels overslaan!
THEN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| TRIM (v_discipline_omschrijving)
|| '|'
|| TRIM (v_bedrijf_naam)
|| '|'
|| TRIM (v_srtdeel_nr)
|| '] ';
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint := 'Catalogus onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_discipline_key
INTO v_discipline_key
FROM INS_TAB_DISCIPLINE
WHERE UPPER (ins_discipline_omschrijving) = UPPER (v_discipline_omschrijving)
AND COALESCE (p_discipline_key, ins_discipline_key) = ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus?
AND ins_discipline_module = 'BES'
AND ins_discipline_verwijder IS NULL;
v_bedrijf_naam := TRIM (v_bedrijf_naam);
v_errorhint := 'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam)
AND COALESCE (p_bedrijf_key, prs_bedrijf_key) = prs_bedrijf_key -- Import bedoelt voor bedrijf?
AND prs_bedrijf_verwijder IS NULL;
v_errorhint := 'Fout bij controleren importregel';
-- Indien leeg, dan catalogusdatum=SYSDATE gebruiken!
v_catalogus_datum :=
COALESCE (TRIM (v_catalogus_datum), TO_CHAR (SYSDATE, 'yyyymmdd'));
IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige catalogusdatum',
'Regel wordt niet ingelezen');
v_ongeldig := 1;
END IF;
v_srtdeel_nr := TRIM (v_srtdeel_nr);
IF LENGTH (v_srtdeel_nr) > 32
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Artikelnummer te lang',
'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF LENGTH (v_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Groepomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Artikelomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
-- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL!
v_srtdeel_prijs := TRIM (v_srtdeel_prijs);
IF v_srtdeel_prijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_prijs) IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige prijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid);
IF LENGTH (v_srtdeel_eenheid) > 30
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Eenheid te lang',
'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
v_srtdeel_image := TRIM (v_srtdeel_image);
IF LENGTH (v_srtdeel_image) > 255
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Imagenaam te lang',
'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
-- Veelvoud mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan veelvoud=1!
v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1');
IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL
OR fac.safe_to_number (v_srtdeel_veelvoud) < 0
OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig veelvoud',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL!
v_srtdeel_btw := TRIM (v_srtdeel_btw);
IF v_srtdeel_btw IS NOT NULL AND fac.safe_to_number (v_srtdeel_btw) IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig BTW-tarief',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL!
v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum);
IF v_srtdeel_vervaldatum IS NOT NULL
AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige vervaldatum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL!
v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs);
IF v_srtdeel_inkprijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige inkoopprijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Minimum mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL!
v_srtdeel_minimum := TRIM (v_srtdeel_minimum);
IF v_srtdeel_minimum IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL
OR fac.safe_to_number (v_srtdeel_minimum) < 0
OR fac.safe_to_number (v_srtdeel_minimum) > 999999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig minimum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam);
v_errorhint := 'Fout bij bepalen staffeltabel; regel wordt niet ingelezen';
IF v_bes_staffeltabel_naam IS NOT NULL
THEN
SELECT bes_staffeltabel_key
INTO v_bes_staffeltabel_key
FROM bes_staffeltabel
WHERE UPPER (bes_staffeltabel_naam) = UPPER (v_bes_staffeltabel_naam);
END IF;
-- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL!
v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen);
IF v_srtdeel_wijzigdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0
OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal wijzigdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL!
v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen);
IF v_srtdeel_annuleerdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0
OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal annuleerdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking);
IF LENGTH (v_srtdeel_opmerking) > 2000
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Opmerking te lang',
'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
v_srtdeel_notitie := TRIM (v_srtdeel_notitie);
IF LENGTH (v_srtdeel_notitie) > 50
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Notitie te lang',
'Notitie wordt afgebroken (Nr:' || v_srtdeel_nr || ')');
END IF;
-- Maximum mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan blijft/wordt maximum=ongedefinieerd=NULL!
v_srtdeel_maximum := TRIM (v_srtdeel_maximum);
IF v_srtdeel_maximum IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_maximum) IS NULL
OR fac.safe_to_number (v_srtdeel_maximum) < 0
OR fac.safe_to_number (v_srtdeel_maximum) > 999999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig maximum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Volgnummer mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt volgnummer=ongedefinieerd=NULL!
v_srtdeel_volgnr := TRIM (v_srtdeel_volgnr);
IF v_srtdeel_volgnr IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_volgnr) IS NULL
OR fac.safe_to_number (v_srtdeel_volgnr) < 0
OR fac.safe_to_number (v_srtdeel_volgnr) > 999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldig volgnummer',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Minimale voorraad mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt min voorraad=ongedefinieerd=NULL!
v_srtdeel_voorraadmin := TRIM (v_srtdeel_voorraadmin);
IF v_srtdeel_voorraadmin IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_voorraadmin) IS NULL
OR fac.safe_to_number (v_srtdeel_voorraadmin) < 0
OR fac.safe_to_number (v_srtdeel_voorraadmin) > 999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige minimale voorraad volgnummer',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
-- Maximale voorraad mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt max voorraad=ongedefinieerd=NULL!
v_srtdeel_voorraadmax := TRIM (v_srtdeel_voorraadmax);
IF v_srtdeel_voorraadmax IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_voorraadmax) IS NULL
OR fac.safe_to_number (v_srtdeel_voorraadmax) < 0
OR fac.safe_to_number (v_srtdeel_voorraadmax) > 999)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige maximale voorraad volgnummer',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')');
v_ongeldig := 1;
END IF;
IF v_ongeldig = 0
THEN
v_errorhint := 'Fout toevoegen importregel';
INSERT INTO PDKL_IMP_CATALOGUS (fac_import_key,
ins_discipline_key,
prs_bedrijf_key,
fac_imp_catalogus_datum,
ins_srtdeel_nr,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_srtdeel_prijs,
ins_srtdeel_inkprijs,
ins_srtdeel_eenheid,
ins_srtdeel_image,
ins_srtdeel_veelvoud,
ins_srtdeel_btw,
ins_srtdeel_vervaldatum,
ins_srtdeel_minimum,
bes_staffeltabel_key,
ins_srtdeel_wijzigdagen,
ins_srtdeel_annuleerdagen,
ins_srtdeel_opmerking,
bes_srtdeel_maximum,
bes_srtdeel_notitie,
bes_srtdeel_volgnr,
bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax)
VALUES (p_import_key,
v_discipline_key,
v_bedrijf_key,
fac.safe_to_date (v_catalogus_datum, 'yyyymmdd'),
SUBSTR (v_srtdeel_nr, 1, 32),
SUBSTR (v_srtgroep_omschrijving, 1, 60),
SUBSTR (v_srtdeel_omschrijving, 1, 100),
fac.safe_to_number (v_srtdeel_prijs),
fac.safe_to_number (v_srtdeel_inkprijs),
SUBSTR (v_srtdeel_eenheid, 1, 30),
SUBSTR (v_srtdeel_image, 1, 255),
fac.safe_to_number (v_srtdeel_veelvoud),
fac.safe_to_number (v_srtdeel_btw),
fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd'),
fac.safe_to_number (v_srtdeel_minimum),
v_bes_staffeltabel_key,
fac.safe_to_number (v_srtdeel_wijzigdagen),
fac.safe_to_number (v_srtdeel_annuleerdagen),
SUBSTR (v_srtdeel_opmerking, 1, 2000),
fac.safe_to_number (v_srtdeel_maximum),
SUBSTR (v_srtdeel_notitie, 50),
fac.safe_to_number (v_srtdeel_volgnr),
fac.safe_to_number (v_srtdeel_voorraadmin),
fac.safe_to_number (v_srtdeel_voorraadmax));
v_count_import := v_count_import + 1;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Inleesproces: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inlezen catalogus afgebroken!');
END pdkl_import_catalogus;
/
CREATE OR REPLACE PROCEDURE pdkl_update_catalogus (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE;
v_bedr_naam prs_bedrijf.prs_bedrijf_naam%TYPE;
-- Voor n catalogus
PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
CURSOR c_delsrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER)
IS
SELECT sd.bes_srtdeel_key, sd.bes_srtdeel_nr, sd.bes_srtdeel_omschrijving
FROM bes_srtdeel sd, bes_srtgroep sg
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = cdisc_key
AND sd.prs_bedrijf_key = cbedr_key
AND sd.bes_srtdeel_verwijder IS NULL
AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf!
(SELECT 1
FROM pdkl_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND UPPER (f.ins_srtdeel_nr) = UPPER (sd.bes_srtdeel_nr));
CURSOR c_delsrtgroep (cdisc_key IN NUMBER, cbedr_key IN NUMBER)
IS
SELECT sg.bes_srtgroep_key, sg.bes_srtgroep_omschrijving
FROM bes_srtgroep sg
WHERE sg.ins_discipline_key = cdisc_key
AND sg.bes_srtgroep_verwijder IS NULL
AND NOT EXISTS -- Niet meer in importbestand irt. alleen cat!
(SELECT 1
FROM pdkl_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND UPPER (f.ins_srtgroep_omschrijving) =
UPPER (sg.bes_srtgroep_omschrijving))
AND NOT EXISTS -- Waaronder geen artikelen van ander bedrijf!
(SELECT 1
FROM bes_srtdeel sd
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sd.prs_bedrijf_key <> cbedr_key);
CURSOR c_inssrtgroep (cdisc_key IN NUMBER, cbedr_key IN NUMBER)
IS
SELECT DISTINCT f.ins_srtgroep_omschrijving
FROM pdkl_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_srtgroep_omschrijving IS NOT NULL
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep sg
WHERE sg.ins_discipline_key = cdisc_key
AND UPPER (sg.bes_srtgroep_omschrijving) =
UPPER (f.ins_srtgroep_omschrijving)
AND sg.bes_srtgroep_verwijder IS NULL);
CURSOR c_updsrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER)
IS
SELECT s.bes_srtdeel_key, f.*
FROM pdkl_imp_catalogus f, bes_srtgroep g, bes_srtdeel s
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr)
AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL;
CURSOR c_inssrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER)
IS
SELECT f.*
FROM pdkl_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep g, bes_srtdeel s
WHERE g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr)
AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL);
ccount NUMBER (10);
l_srtgroep_key NUMBER (10);
l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE;
l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE;
l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE;
l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE;
l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE;
l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE;
l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE;
l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE;
l_maximum bes_srtdeel.bes_srtdeel_maximum%TYPE;
l_notitie bes_srtdeel.bes_srtdeel_notitie%TYPE;
l_volgnr bes_srtdeel.bes_srtdeel_volgnr%TYPE;
l_voorraadmin bes_srtdeel.bes_srtdeel_voorraadmin%TYPE;
l_voorraadmax bes_srtdeel.bes_srtdeel_voorraadmax%TYPE;
BEGIN
-- DELETE SRTDEEL
ccount := 0;
FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr;
UPDATE bes_srtdeel
SET bes_srtdeel_verwijder = SYSDATE
WHERE bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'S' AND bes_srtinstallatie_key = rec.bes_srtdeel_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.bes_srtdeel_nr
|| '/'
|| rec.bes_srtdeel_omschrijving
|| ' is verwijderd',
'');
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen verwijderd',
'');
COMMIT;
-- DELETE SRTGROEP
ccount := 0;
FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_srtgroep
SET bes_srtgroep_verwijder = SYSDATE
WHERE bes_srtgroep_key = rec.bes_srtgroep_key;
v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'G' AND bes_srtinstallatie_key = rec.bes_srtgroep_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding || 'Groep ' || rec.bes_srtgroep_omschrijving || ' is verwijderd',
'');
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen verwijderd',
'');
COMMIT;
-- INSERT SRTGROEP
ccount := 0;
FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg := 'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving;
INSERT INTO bes_srtgroep (ins_discipline_key, bes_srtgroep_omschrijving)
VALUES (pdisc_key, rec.ins_srtgroep_omschrijving);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding || 'Groep ' || rec.ins_srtgroep_omschrijving || ' is toegevoegd',
'');
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen toegevoegd',
'');
COMMIT;
-- UPDATE SRTDEEL
ccount := 0;
FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij bepalen huidige artikel-velden ' || rec.ins_srtdeel_nr;
-- Tbv. logging de oude waarden opzoeken.
SELECT bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL),
bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL),
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking,
bes_srtdeel_maximum,
bes_srtdeel_notitie,
bes_srtdeel_volgnr,
bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax
INTO l_omschrijving,
l_prijs,
l_inkprijs,
l_veelvoud,
l_minimum,
l_wijzigdagen,
l_annuleerdagen,
l_opmerking,
l_maximum,
l_notitie,
l_volgnr,
l_voorraadmin,
l_voorraadmax
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr;
-- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs.
-- Later nog eens TODO
UPDATE bes_srtdeel
SET bes_srtgroep_key = l_srtgroep_key,
bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
bes_srtdeel_image = rec.ins_srtdeel_image,
bes_srtdeel_btw = rec.ins_srtdeel_btw,
bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid,
bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud,
bes_srtdeel_minimum = rec.ins_srtdeel_minimum,
bes_staffeltabel_key = rec.bes_staffeltabel_key,
bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen,
bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking,
bes_srtdeel_maximum = rec.bes_srtdeel_maximum,
bes_srtdeel_notitie = rec.bes_srtdeel_notitie,
bes_srtdeel_volgnr = rec.bes_srtdeel_volgnr,
bes_srtdeel_voorraadmin = rec.bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax = rec.bes_srtdeel_voorraadmax
WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key;
IF l_omschrijving <> rec.ins_srtdeel_omschrijving
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Omschrijving ' || l_omschrijving || ' -> ' || rec.ins_srtdeel_omschrijving);
END IF;
bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key,
rec.ins_srtdeel_prijs,
rec.ins_srtdeel_inkprijs);
IF l_prijs <> rec.ins_srtdeel_prijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs);
END IF;
IF l_inkprijs <> rec.ins_srtdeel_inkprijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Inkoopprijs ' || l_inkprijs || ' -> ' || rec.ins_srtdeel_inkprijs);
END IF;
IF l_veelvoud <> rec.ins_srtdeel_veelvoud
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelveelvoud ' || l_veelvoud || ' -> ' || rec.ins_srtdeel_veelvoud);
END IF;
IF l_minimum <> rec.ins_srtdeel_minimum
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelminimum ' || l_minimum || ' -> ' || rec.ins_srtdeel_minimum);
END IF;
IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Wijzigdagen ' || l_wijzigdagen || ' -> ' || rec.ins_srtdeel_wijzigdagen);
END IF;
IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Annuleerdagen '
|| l_annuleerdagen
|| ' -> '
|| rec.ins_srtdeel_annuleerdagen);
END IF;
IF l_opmerking <> rec.ins_srtdeel_opmerking
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Opmerking ' || l_opmerking || ' -> ' || rec.ins_srtdeel_opmerking);
END IF;
IF l_maximum <> rec.bes_srtdeel_maximum
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Maximum ' || l_maximum || ' -> ' || rec.bes_srtdeel_maximum);
END IF;
IF l_notitie <> rec.bes_srtdeel_notitie
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Notitie ' || l_notitie || ' -> ' || rec.bes_srtdeel_notitie);
END IF;
IF l_volgnr <> rec.bes_srtdeel_volgnr
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Volgnr ' || l_volgnr || ' -> ' || rec.bes_srtdeel_volgnr);
END IF;
IF l_voorraadmin <> rec.bes_srtdeel_voorraadmin
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Minimale voorraad '
|| l_voorraadmin
|| ' -> '
|| rec.bes_srtdeel_voorraadmin);
END IF;
IF l_voorraadmax <> rec.bes_srtdeel_voorraadmax
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Maximale voorraad '
|| l_voorraadmax
|| ' -> '
|| rec.bes_srtdeel_voorraadmax);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen bijgewerkt',
'');
COMMIT;
-- INSERT SRTDEEL
ccount := 0;
FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr;
INSERT INTO bes_srtdeel (bes_srtgroep_key,
bes_srtdeel_nr,
bes_srtdeel_omschrijving,
bes_srtdeel_image,
bes_srtdeel_btw,
bes_srtdeel_eenheid,
bes_srtdeel_dimensie,
prs_bedrijf_key,
bes_srtdeel_vervaldatum,
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_staffeltabel_key,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking,
bes_srtdeel_maximum,
bes_srtdeel_notitie,
bes_srtdeel_volgnr,
bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax)
VALUES (l_srtgroep_key,
rec.ins_srtdeel_nr,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_image,
rec.ins_srtdeel_btw,
rec.ins_srtdeel_eenheid,
0,
pbedr_key,
rec.ins_srtdeel_vervaldatum,
rec.ins_srtdeel_veelvoud,
rec.ins_srtdeel_minimum,
rec.bes_staffeltabel_key,
rec.ins_srtdeel_wijzigdagen,
rec.ins_srtdeel_annuleerdagen,
rec.ins_srtdeel_opmerking,
rec.bes_srtdeel_maximum,
rec.bes_srtdeel_notitie,
rec.bes_srtdeel_volgnr,
rec.bes_srtdeel_voorraadmin,
rec.bes_srtdeel_voorraadmax)
RETURNING bes_srtdeel_key
INTO l_bes_srtdeel_key;
bes.upsert_srtdeel_prijs (l_bes_srtdeel_key,
rec.ins_srtdeel_prijs,
rec.ins_srtdeel_inkprijs);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is toegevoegd',
'');
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in importbestand';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen toegevoegd',
'');
COMMIT;
END;
BEGIN
-- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn
FOR rec IN (SELECT DISTINCT ins_discipline_key, prs_bedrijf_key
FROM pdkl_imp_catalogus
WHERE fac_import_key = p_import_key)
LOOP
BEGIN
-- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen!
v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] ';
v_errormsg := 'Fout bepalen catalogus';
SELECT ins_discipline_omschrijving
INTO v_disc_oms
FROM ins_tab_discipline
WHERE ins_discipline_key = rec.ins_discipline_key;
v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] ';
v_errormsg := 'Fout bepalen bedrijf';
SELECT prs_bedrijf_naam
INTO v_bedr_naam
FROM prs_v_aanwezigbedrijf
WHERE prs_bedrijf_key = rec.prs_bedrijf_key;
fac.imp_writelog (
p_import_key,
'I',
'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam,
'discipline: ' || rec.ins_discipline_key || ', bedrijf: ' || rec.prs_bedrijf_key);
COMMIT;
v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] ';
l_update_catalogus (rec.ins_discipline_key, rec.prs_bedrijf_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Verwerken catalogus afgebroken!');
END pdkl_update_catalogus;
/
------ payload end ------
SET DEFINE OFF
BEGIN
adm.systrackscriptId ('$Id$', 1);
END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile