1638 lines
74 KiB
SQL
1638 lines
74 KiB
SQL
--
|
|
-- $Id$
|
|
--
|
|
-- Script containing customer specific sql statements for the FACILITOR database
|
|
--
|
|
|
|
DEFINE thisfile = 'PDKL.SQL'
|
|
DEFINE dbuser = 'PDKL'
|
|
|
|
SET ECHO ON
|
|
SET DEFINE ON
|
|
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
|
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
|
|
WHENEVER SQLERROR CONTINUE;
|
|
|
|
SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL;
|
|
|
|
SPOOL &fcltlogfile
|
|
WHENEVER SQLERROR EXIT;
|
|
|
|
SELECT adm.checkscriptcust ('&dbuser') AS fcltcusttxt FROM DUAL;
|
|
|
|
WHENEVER SQLERROR CONTINUE;
|
|
---------------------------------------
|
|
PROMPT &fcltcusttxt
|
|
---------------------------------------
|
|
SET DEFINE OFF
|
|
|
|
------ payload begin ------
|
|
|
|
-- 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',
|
|
'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',
|
|
'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, 1, 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;
|
|
/
|
|
|
|
CREATE OR REPLACE VIEW PDKL_V_RAP_FIP_ARTPRIJS
|
|
AS
|
|
SELECT sd.bes_srtdeel_key key,
|
|
sd.bes_srtdeel_nr artikelnummer,
|
|
sd.bes_srtdeel_omschrijving artikelomschrijving,
|
|
b.prs_bedrijf_key,
|
|
b.prs_bedrijf_naam leverancier,
|
|
cat.ins_discipline_key,
|
|
cat.ins_discipline_omschrijving catalogus,
|
|
sp.bes_srtdeel_prijs_prijs prijs,
|
|
'' nieuwe_prijs,
|
|
'' ingangsdatum
|
|
FROM bes_srtdeel_prijs sp,
|
|
bes_srtdeel sd,
|
|
prs_bedrijf b,
|
|
bes_srtgroep gr,
|
|
ins_tab_discipline cat
|
|
WHERE sp.bes_srtdeel_prijs_vervaldatum IS NULL
|
|
AND sp.bes_srtdeel_key = sd.bes_srtdeel_key
|
|
AND sd.bes_srtdeel_verwijder IS NULL
|
|
AND sd.prs_bedrijf_key = b.prs_bedrijf_key
|
|
AND gr.bes_srtgroep_key = sd.bes_srtgroep_key
|
|
AND cat.ins_discipline_key = gr.ins_discipline_key;
|
|
|
|
CREATE OR REPLACE PROCEDURE pdkl_import_prijs (p_import_key IN NUMBER)
|
|
IS
|
|
p_srtdeel_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);
|
|
v_file_index NUMBER;
|
|
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_srtdeel_key VARCHAR2 (255);
|
|
v_srtdeel_nr VARCHAR2 (255);
|
|
v_srtdeel_omschrijving VARCHAR2 (255);
|
|
v_bedrijf_naam VARCHAR2 (255);
|
|
v_discipline_omschrijving VARCHAR2 (255);
|
|
v_discipline_key VARCHAR2 (255);
|
|
v_srtdeel_prijs VARCHAR2 (255);
|
|
v_srtdeel_prijs_nieuw VARCHAR2 (255);
|
|
v_ingangsdatum VARCHAR2 (255);
|
|
|
|
CURSOR c1 IS
|
|
SELECT fac_imp_file_line,
|
|
fac_imp_file_index,
|
|
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
|
|
DELETE FAC_IMP_CSV
|
|
WHERE fac_import_key = p_import_key;
|
|
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
v_aanduiding := '';
|
|
v_errorhint := 'Fout inlezen importregel';
|
|
v_newline := rec.fac_imp_file_line;
|
|
v_file_index := rec.fac_imp_file_index;
|
|
|
|
v_ongeldig := 0;
|
|
|
|
-- Lees alle veldwaarden
|
|
fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr);
|
|
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
|
|
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
|
|
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
|
|
fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs);
|
|
fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs_nieuw);
|
|
fac.imp_getfield (v_newline, c_delim, v_ingangsdatum);
|
|
|
|
-- 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_srtdeel_nr)) = 'ARTIKELNUMMER'
|
|
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'ARTIKELOMSCHRIJVING'
|
|
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
|
|
AND UPPER (TRIM (v_discipline_omschrijving)) = 'CATALOGUS'
|
|
AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS'
|
|
AND UPPER (TRIM (v_srtdeel_prijs_nieuw)) = 'NIEUWE_PRIJS'
|
|
AND UPPER (TRIM (v_ingangsdatum)) = 'INGANGSDATUM'
|
|
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_srtdeel_nr)
|
|
|| '|'
|
|
|| TRIM (v_srtdeel_omschrijving)
|
|
|| '] ';
|
|
|
|
-- Discipline en artikelnummer zijn verplicht
|
|
v_srtdeel_nr := TRIM (v_srtdeel_nr);
|
|
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
|
|
|
|
IF v_srtdeel_nr IS NULL OR v_discipline_omschrijving IS NULL
|
|
THEN
|
|
fac.imp_writelog (p_import_key,
|
|
'W',
|
|
v_aanduiding || 'Artikelnummer en/of discipline niet gevuld',
|
|
'Incomplete regel wordt niet ingelezen');
|
|
v_ongeldig := 1;
|
|
END IF;
|
|
|
|
-- Indien leeg, dan blijft/wordt ingangsdatum=ongedefinieerd=NULL!
|
|
v_ingangsdatum := TRIM (v_ingangsdatum);
|
|
|
|
IF v_ingangsdatum IS NOT NULL
|
|
AND fac.safe_to_date (v_ingangsdatum, 'yyyymmdd') IS NULL
|
|
THEN
|
|
fac.imp_writelog (p_import_key,
|
|
'W',
|
|
v_aanduiding || 'Ongeldige ingangsdatum',
|
|
'Regel wordt niet ingelezen (key:' || v_srtdeel_key || ')');
|
|
v_ongeldig := 1;
|
|
END IF;
|
|
|
|
IF v_ongeldig = 0
|
|
THEN
|
|
v_errorhint := 'Fout toevoegen importregel';
|
|
|
|
INSERT INTO FAC_IMP_CSV (fac_import_key,
|
|
fac_imp_csv_index,
|
|
fac_imp_csv_col02,
|
|
fac_imp_csv_col03,
|
|
fac_imp_csv_col04,
|
|
fac_imp_csv_col05,
|
|
fac_imp_csv_col06,
|
|
fac_imp_csv_col07,
|
|
fac_imp_csv_col08)
|
|
VALUES (p_import_key,
|
|
v_file_index,
|
|
v_srtdeel_nr,
|
|
v_srtdeel_omschrijving,
|
|
v_bedrijf_naam,
|
|
v_discipline_omschrijving,
|
|
TO_CHAR (v_srtdeel_prijs),
|
|
TO_CHAR (v_srtdeel_prijs_nieuw),
|
|
v_ingangsdatum);
|
|
|
|
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;
|
|
|
|
UPDATE fac_imp_csv i
|
|
SET i.fac_imp_csv_col10 =
|
|
(SELECT cat.ins_discipline_key
|
|
FROM ins_tab_discipline cat
|
|
WHERE cat.ins_discipline_module = 'BES'
|
|
AND cat.ins_discipline_verwijder IS NULL
|
|
AND cat.ins_discipline_omschrijving = i.fac_imp_csv_col05);
|
|
|
|
UPDATE fac_imp_csv i
|
|
SET i.fac_imp_csv_col01 =
|
|
(SELECT sd.bes_srtdeel_key
|
|
FROM bes_srtdeel sd, bes_srtgroep sg
|
|
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
|
|
AND sd.bes_srtdeel_verwijder IS NULL
|
|
AND ( sd.bes_srtdeel_vervaldatum IS NULL
|
|
OR sd.bes_srtdeel_vervaldatum > SYSDATE)
|
|
AND sd.bes_srtdeel_nr = i.fac_imp_csv_col02
|
|
AND sg.ins_discipline_key = i.fac_imp_csv_col10);
|
|
|
|
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_prijs;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE pdkl_update_prijs (p_import_key IN NUMBER)
|
|
AS
|
|
v_errormsg VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
v_aanduiding VARCHAR2 (200);
|
|
|
|
v_currentprijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
|
|
v_oude_prijs NUMBER;
|
|
v_max_ingangsdatum DATE;
|
|
|
|
CURSOR c1 IS
|
|
SELECT fac_imp_csv_col01 bes_srtdeel_key,
|
|
fac_imp_csv_col02 artikelnr,
|
|
fac.safe_to_number (REPLACE (fac_imp_csv_col07, ',', '.')) nieuwe_prijs,
|
|
fac.safe_to_date (fac_imp_csv_col08, 'yyyymmdd') ingangsdatum
|
|
FROM FAC_IMP_CSV
|
|
WHERE fac_import_key = p_import_key;
|
|
BEGIN
|
|
FOR rec IN c1
|
|
LOOP
|
|
IF rec.bes_srtdeel_key IS NULL
|
|
THEN
|
|
fac.imp_writelog (p_import_key,
|
|
'W',
|
|
'Artikel ' || rec.artikelnr || ' kon niet worden bijgewerkt',
|
|
'Artikel is niet gevonden (catalogus of artikel is onbekend)');
|
|
ELSE
|
|
-- Bepaal de actuele prijs
|
|
v_currentprijs := bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL);
|
|
|
|
-- Bepaald de laatste vervaldatum
|
|
SELECT MAX (sdp.bes_srtdeel_prijs_vervaldatum)
|
|
INTO v_max_ingangsdatum
|
|
FROM bes_srtdeel_prijs sdp
|
|
WHERE sdp.bes_srtdeel_key = rec.bes_srtdeel_key
|
|
GROUP BY sdp.bes_srtdeel_key;
|
|
|
|
--- er is geen (actuele) prijs bekend, dan kunnen we de prijs gewoon toevoegen
|
|
IF (v_currentprijs IS NULL AND rec.nieuwe_prijs IS NOT NULL)
|
|
THEN
|
|
INSERT INTO bes_srtdeel_prijs (bes_srtdeel_key, bes_srtdeel_prijs_prijs)
|
|
VALUES (rec.bes_srtdeel_key, ROUND (rec.nieuwe_prijs, 2));
|
|
|
|
fac.imp_writelog (
|
|
p_import_key,
|
|
'I',
|
|
'Artikel ' || rec.bes_srtdeel_key || '/' || rec.artikelnr || ' is gewijzigd',
|
|
'Artikel heeft: ' || rec.nieuwe_prijs || ' per: ' || rec.ingangsdatum);
|
|
--- er zijn al 1 of meer (toekomstige) prijzen, bepaal wat er moet gebeuren
|
|
ELSE
|
|
IF v_max_ingangsdatum IS NULL
|
|
THEN
|
|
-- er is nog geen vervaldatum v_max_ingangsdatum IS NULL, we nemen aan: er is nog maar 1 bestaand prijsrecord
|
|
-- de prijs zonder vervaldatum moet komen te vervallen op (p_ingangsdatum - 1)
|
|
-- de nieuwe prijs kan toegevoegd worden
|
|
UPDATE bes_srtdeel_prijs sdp
|
|
SET sdp.bes_srtdeel_prijs_vervaldatum = rec.ingangsdatum - 1
|
|
WHERE sdp.bes_srtdeel_key = rec.bes_srtdeel_key
|
|
AND sdp.bes_srtdeel_prijs_vervaldatum IS NULL;
|
|
|
|
INSERT INTO bes_srtdeel_prijs (bes_srtdeel_key, bes_srtdeel_prijs_prijs)
|
|
VALUES (rec.bes_srtdeel_key, ROUND (rec.nieuwe_prijs, 2));
|
|
|
|
fac.imp_writelog (
|
|
p_import_key,
|
|
'I',
|
|
'Artikel '
|
|
|| rec.bes_srtdeel_key
|
|
|| '/'
|
|
|| rec.artikelnr
|
|
|| ' is gewijzigd',
|
|
'Artikel heeft nu een prijs: ' || round(rec.nieuwe_prijs,2));
|
|
ELSE
|
|
IF (rec.ingangsdatum - 1) > v_max_ingangsdatum
|
|
THEN
|
|
-- de nieuwe vervaldatum ligt na de laatste vervaldatum (p_ingangsdatum - 1) > v_max_ingangsdatum
|
|
-- de prijs zonder vervaldatum moet de nieuwe vervaldatum krijgen (p_ingangsdatum - 1)
|
|
-- de nieuwe prijs kan toegevoegd worden
|
|
UPDATE bes_srtdeel_prijs sdp
|
|
SET sdp.bes_srtdeel_prijs_vervaldatum = rec.ingangsdatum - 1
|
|
WHERE sdp.bes_srtdeel_key = rec.bes_srtdeel_key
|
|
AND sdp.bes_srtdeel_prijs_vervaldatum IS NULL;
|
|
|
|
INSERT INTO bes_srtdeel_prijs (bes_srtdeel_key, bes_srtdeel_prijs_prijs)
|
|
VALUES (rec.bes_srtdeel_key, ROUND (rec.nieuwe_prijs, 2));
|
|
|
|
fac.imp_writelog (
|
|
p_import_key,
|
|
'I',
|
|
'Artikel '
|
|
|| rec.bes_srtdeel_key
|
|
|| '/'
|
|
|| rec.artikelnr
|
|
|| ' is gewijzigd',
|
|
'Vervaldatum is opgegeven voor huidige prijs. Nieuwe prijs: '
|
|
|| ROUND(rec.nieuwe_prijs,2)
|
|
|| ' per: '
|
|
|| rec.ingangsdatum);
|
|
ELSE
|
|
IF (rec.ingangsdatum - 1) = v_max_ingangsdatum
|
|
THEN
|
|
-- de nieuwe vervaldatum is gelijk aan de laatste vervaldatum (p_ingangsdatum - 1) = v_max_ingangsdatum
|
|
-- de regel zonder vervaldatum moet de nieuwe prijs krijgen, want dat is de laatste prijswijziging
|
|
-- de vervaldatum blijft ongewijzigd
|
|
UPDATE bes_srtdeel_prijs sdp
|
|
SET sdp.bes_srtdeel_prijs_prijs = ROUND (rec.nieuwe_prijs, 2)
|
|
WHERE sdp.bes_srtdeel_prijs_vervaldatum IS NULL
|
|
AND sdp.bes_srtdeel_key = rec.bes_srtdeel_key;
|
|
|
|
fac.imp_writelog (
|
|
p_import_key,
|
|
'I',
|
|
'Artikel '
|
|
|| rec.bes_srtdeel_key
|
|
|| '/'
|
|
|| rec.artikelnr
|
|
|| ' is gewijzigd',
|
|
'Nieuwe vervaldatum is gelijk aan de laatste vervaldatum. Prijs is aangepast naar: '
|
|
|| ROUND(rec.nieuwe_prijs,2));
|
|
ELSE
|
|
IF (rec.ingangsdatum - 1) < v_max_ingangsdatum
|
|
THEN
|
|
-- de nieuwe vervaldatum ligt voor de laatste vervaldatum (p_ingangsdatum - 1) < v_max_ingangsdatum
|
|
-- we doen niets, er is al een nieuwere prijs bekend
|
|
-- we geven alleen een melding om handmatig de prijzen te controleren en aan te passen
|
|
fac.imp_writelog (
|
|
p_import_key,
|
|
'W',
|
|
'Artikelprijs '
|
|
|| rec.bes_srtdeel_key
|
|
|| '/'
|
|
|| rec.artikelnr
|
|
|| ' is niet gewijzigd',
|
|
'Er is al een toekomstige prijsupdate bekend bij dit artikel');
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
|
|
COMMIT;
|
|
|
|
END LOOP;
|
|
END pdkl_update_prijs;
|
|
/
|
|
------ 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 |