Files
Customer/STPH/stph.sql
Sander Schepers 940df3a321 STPH#78738 Doorbelasting via melding of object
svn path=/Customer/trunk/; revision=63741
2024-02-28 10:16:43 +00:00

3165 lines
133 KiB
SQL
Raw Permalink Blame History

--
-- $Id$
--
-- Stichting Parkhuis Main SQL
DEFINE thisfile = 'STPH.SQL'
DEFINE dbuser = '^STPH'
DEFINE custid = 'STPH'
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 ------
--
-- BES-CATALOGUS IMPORT
--
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Copy van fac_import_catalogus en fac_update_catalogus van 2015.2 (d.d. 26/10/15 uit fac_pacf.src gekopieerd)
-- rename fac_ -> stph_, met volgende resultaat: 1) stph_import_catalogus 2) stph_update_catalogus en 3) stph_imp_catalogus
--
--
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE stph_import_catalogus (
p_import_key IN NUMBER
)
IS
p_discipline_key NUMBER(10);
p_bedrijf_key NUMBER(10);
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- 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_bes_srtdeel_voorraadmin VARCHAR2 (255);
v_bes_srtdeel_voorraadmax VARCHAR2 (255);
v_bes_srtdeel_voorraadfactor VARCHAR2 (255);
v_bes_srtdeel_maxbestel VARCHAR2 (255);
v_bes_inclexcl_btw 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 stph_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);
-- Voorraad kolommen
fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadmin);
fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadmax);
fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_maxbestel);
fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadfactor);
fac.imp_getfield (v_newline, c_delim, v_bes_inclexcl_btw);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle
-- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen").
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
--AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS'
AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID'
AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE'
AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL'
AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE'
AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS'
AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM'
AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL'
--AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar!
--AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING'
THEN
header_is_valid := 1;
-- Hier checken of we de voorraad-kolommen hebben...
-- MinVoorraad;Maxvoorraad;Maxbestel;VoorraadFactor;VoorraadOmrekenPrijs
IF UPPER (TRIM (v_bes_srtdeel_voorraadmin)) = 'MINVOORRAAD'
AND UPPER (TRIM (v_bes_srtdeel_voorraadmax)) = 'MAXVOORRAAD'
AND UPPER (TRIM (v_bes_srtdeel_maxbestel)) = 'MAXBESTEL'
AND UPPER (TRIM (v_bes_srtdeel_voorraadfactor)) = 'VOORRAADFACTOR'
AND UPPER (TRIM (v_bes_inclexcl_btw)) = 'VOORRAADOMREKENPRIJS'
THEN
-- Met deze waarde '2' doen we wat met de voorraadkolommen.
header_is_valid := 2;
fac.imp_writelog (
p_import_key,
'I',
'Voorraad kolommen zijn aanwezig',
'Voorraad kolommen worden ingelezen'
);
END IF;
END IF;
ELSIF rec.regellengte > 1 -- Lege regels overslaan!
THEN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| TRIM (v_discipline_omschrijving)
|| '|'
|| TRIM (v_bedrijf_naam)
|| '|'
|| TRIM (v_srtdeel_nr)
|| '] ';
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint :=
'Catalogus onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_discipline_key
INTO v_discipline_key
FROM INS_TAB_DISCIPLINE
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (v_discipline_omschrijving)
AND COALESCE (p_discipline_key, ins_discipline_key) =
ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus?
AND ins_discipline_module = 'BES'
AND ins_discipline_verwijder IS NULL;
v_bedrijf_naam := TRIM (v_bedrijf_naam);
v_errorhint :=
'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam)
AND COALESCE (p_bedrijf_key, prs_bedrijf_key) =
prs_bedrijf_key -- Import bedoelt voor bedrijf?
AND prs_bedrijf_verwijder IS NULL;
v_errorhint := 'Fout bij controleren importregel';
-- Indien leeg, dan catalogusdatum=SYSDATE gebruiken!
v_catalogus_datum :=
COALESCE (TRIM (v_catalogus_datum),
TO_CHAR (SYSDATE, 'yyyymmdd'));
IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige catalogusdatum',
'Regel wordt niet ingelezen');
v_ongeldig := 1;
END IF;
v_srtdeel_nr := TRIM (v_srtdeel_nr);
IF LENGTH (v_srtdeel_nr) > 32
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelnummer te lang',
'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF LENGTH (v_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Groepomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
-- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL!
v_srtdeel_prijs := TRIM (v_srtdeel_prijs);
IF v_srtdeel_prijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_prijs) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige prijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid);
IF LENGTH (v_srtdeel_eenheid) > 30
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Eenheid te lang',
'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_image := TRIM (v_srtdeel_image);
IF LENGTH (v_srtdeel_image) > 255
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Imagenaam te lang',
'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
-- Veelvoud mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan veelvoud=1!
v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1');
IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL
OR fac.safe_to_number (v_srtdeel_veelvoud) < 0
OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig veelvoud',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL!
v_srtdeel_btw := TRIM (v_srtdeel_btw);
IF v_srtdeel_btw IS NOT NULL
AND fac.safe_to_number (v_srtdeel_btw) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig BTW-tarief',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL!
v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum);
IF v_srtdeel_vervaldatum IS NOT NULL
AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige vervaldatum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL!
v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs);
IF v_srtdeel_inkprijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige inkoopprijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Minimum mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL!
v_srtdeel_minimum := TRIM (v_srtdeel_minimum);
IF v_srtdeel_minimum IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL
OR fac.safe_to_number (v_srtdeel_minimum) < 0
OR fac.safe_to_number (v_srtdeel_minimum) > 999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig minimum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam);
v_errorhint :=
'Fout bij bepalen staffeltabel; regel wordt niet ingelezen';
IF v_bes_staffeltabel_naam IS NOT NULL
THEN
SELECT bes_staffeltabel_key
INTO v_bes_staffeltabel_key
FROM bes_staffeltabel
WHERE UPPER (bes_staffeltabel_naam) =
UPPER (v_bes_staffeltabel_naam);
END IF;
-- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL!
v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen);
IF v_srtdeel_wijzigdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0
OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal wijzigdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL!
v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen);
IF v_srtdeel_annuleerdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0
OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal annuleerdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking);
IF LENGTH (v_srtdeel_opmerking) > 2000
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Opmerking te lang',
'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
IF (header_is_valid = 2)
THEN
-- We hebben van doen met de BES interne catalogus (voorraad) kolommen.
v_bes_srtdeel_voorraadmin := TRIM (v_bes_srtdeel_voorraadmin);
IF v_bes_srtdeel_voorraadmin IS NOT NULL
AND ( fac.safe_to_number (v_bes_srtdeel_voorraadmin) IS NULL
OR fac.safe_to_number (v_bes_srtdeel_voorraadmin) < 0
OR fac.safe_to_number (v_bes_srtdeel_voorraadmin) > 999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig minimum voorraad',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_srtdeel_voorraadmax := TRIM (v_bes_srtdeel_voorraadmax);
IF v_bes_srtdeel_voorraadmax IS NOT NULL
AND ( fac.safe_to_number (v_bes_srtdeel_voorraadmax) IS NULL
OR fac.safe_to_number (v_bes_srtdeel_voorraadmax) < 0
OR fac.safe_to_number (v_bes_srtdeel_voorraadmax) > 999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig maximum voorraad',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_srtdeel_maxbestel := TRIM (v_bes_srtdeel_maxbestel);
IF v_bes_srtdeel_maxbestel IS NOT NULL
AND ( fac.safe_to_number (v_bes_srtdeel_maxbestel) IS NULL
OR fac.safe_to_number (v_bes_srtdeel_maxbestel) < 0
OR fac.safe_to_number (v_bes_srtdeel_maxbestel) > 1)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige MaxBestel',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_srtdeel_voorraadfactor := TRIM (v_bes_srtdeel_voorraadfactor);
IF v_bes_srtdeel_voorraadfactor IS NOT NULL
AND ( fac.safe_to_number (v_bes_srtdeel_voorraadfactor) IS NULL
OR fac.safe_to_number (v_bes_srtdeel_voorraadfactor) < 0
OR fac.safe_to_number (v_bes_srtdeel_voorraadfactor) > 999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig voorraadfactor',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_inclexcl_btw := TRIM (v_bes_inclexcl_btw);
IF v_bes_inclexcl_btw IS NOT NULL
AND ( fac.safe_to_number (v_bes_inclexcl_btw) IS NULL
OR fac.safe_to_number (v_bes_inclexcl_btw) < 0
OR fac.safe_to_number (v_bes_inclexcl_btw) > 3)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige Voorraad OmrekenPrijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
END IF;
IF v_ongeldig = 0
THEN
v_errorhint := 'Fout toevoegen importregel';
INSERT INTO STPH_IMP_CATALOGUS (
fac_import_key,
ins_discipline_key,
prs_bedrijf_key,
fac_imp_catalogus_datum,
ins_srtdeel_nr,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_srtdeel_prijs,
ins_srtdeel_inkprijs,
ins_srtdeel_eenheid,
ins_srtdeel_image,
ins_srtdeel_veelvoud,
ins_srtdeel_btw,
ins_srtdeel_vervaldatum,
ins_srtdeel_minimum,
bes_staffeltabel_key,
ins_srtdeel_wijzigdagen,
ins_srtdeel_annuleerdagen,
ins_srtdeel_opmerking
)
VALUES (
p_import_key,
v_discipline_key,
v_bedrijf_key,
fac.safe_to_date (v_catalogus_datum,
'yyyymmdd'),
SUBSTR (v_srtdeel_nr, 1, 32),
SUBSTR (v_srtgroep_omschrijving, 1, 60),
SUBSTR (v_srtdeel_omschrijving, 1, 100),
fac.safe_to_number (v_srtdeel_prijs),
fac.safe_to_number (v_srtdeel_inkprijs),
SUBSTR (v_srtdeel_eenheid, 1, 30),
SUBSTR (v_srtdeel_image, 1, 255),
fac.safe_to_number (v_srtdeel_veelvoud),
fac.safe_to_number (v_srtdeel_btw),
fac.safe_to_date (v_srtdeel_vervaldatum,
'yyyymmdd'),
fac.safe_to_number (v_srtdeel_minimum),
v_bes_staffeltabel_key,
fac.safe_to_number (v_srtdeel_wijzigdagen),
fac.safe_to_number (v_srtdeel_annuleerdagen),
SUBSTR (v_srtdeel_opmerking, 1, 2000)
);
IF (header_is_valid = 2)
THEN
-- Met voorraad gegevens erbij
UPDATE STPH_IMP_CATALOGUS
SET
bes_srtdeel_voorraadmin = v_bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax = v_bes_srtdeel_voorraadmax,
bes_srtdeel_maxbestel = v_bes_srtdeel_maxbestel,
bes_srtdeel_voorraadfactor = v_bes_srtdeel_voorraadfactor,
bes_inclexcl_btw = v_bes_inclexcl_btw
WHERE fac_import_key = p_import_key
AND ins_discipline_key = v_discipline_key
AND prs_bedrijf_key = v_bedrijf_key
AND ins_srtdeel_nr = SUBSTR (v_srtdeel_nr, 1, 32)
AND ins_srtdeel_eenheid = SUBSTR (v_srtdeel_eenheid, 1, 30);
END IF;
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 stph_import_catalogus;
/
/* Formatted on 19-7-2011 17:34:34 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE stph_update_catalogus (
p_import_key IN NUMBER
)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_disc_oms VARCHAR2 (100);
v_bedr_naam VARCHAR2 (100);
-- Voor <20><>n catalogus
PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
CURSOR c_delsrtdeel (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT sd.bes_srtdeel_key,
sd.bes_srtdeel_nr,
sd.bes_srtdeel_omschrijving
FROM bes_srtdeel sd, bes_srtgroep sg
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = cdisc_key
AND sd.prs_bedrijf_key = cbedr_key
AND sd.bes_srtdeel_verwijder IS NULL
AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf!
(SELECT 1
FROM stph_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 stph_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 stph_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 stph_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 stph_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep g, bes_srtdeel s
WHERE g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) =
UPPER (f.ins_srtdeel_nr)
AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL);
ccount NUMBER (10);
l_srtgroep_key NUMBER (10);
l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE;
l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE;
l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE;
l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE;
l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE;
l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE;
l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE;
l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE;
BEGIN
-- DELETE SRTDEEL
ccount := 0;
FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr;
UPDATE bes_srtdeel
SET bes_srtdeel_verwijder = SYSDATE
WHERE bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'S'
AND bes_srtinstallatie_key = rec.bes_srtdeel_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.bes_srtdeel_nr
|| '/'
|| rec.bes_srtdeel_omschrijving
|| ' is verwijderd',
''
);
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen verwijderd',
''
);
COMMIT;
-- DELETE SRTGROEP
ccount := 0;
FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_srtgroep
SET bes_srtgroep_verwijder = SYSDATE
WHERE bes_srtgroep_key = rec.bes_srtgroep_key;
v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'G'
AND bes_srtinstallatie_key = rec.bes_srtgroep_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Groep '
|| rec.bes_srtgroep_omschrijving
|| ' is verwijderd',
''
);
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' groepen verwijderd',
''
);
COMMIT;
-- INSERT SRTGROEP
ccount := 0;
FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving;
INSERT INTO bes_srtgroep (
ins_discipline_key,
bes_srtgroep_omschrijving
)
VALUES (pdisc_key, rec.ins_srtgroep_omschrijving);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Groep '
|| rec.ins_srtgroep_omschrijving
|| ' is toegevoegd',
''
);
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' groepen toegevoegd',
''
);
COMMIT;
-- UPDATE SRTDEEL
ccount := 0;
FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg :=
'Fout bij bepalen huidige artikel-velden '
|| rec.ins_srtdeel_nr;
-- Tbv. logging de oude waarden opzoeken.
SELECT bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL),
bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL),
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking
INTO l_omschrijving,
l_prijs,
l_inkprijs,
l_veelvoud,
l_minimum,
l_wijzigdagen,
l_annuleerdagen,
l_opmerking
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr;
-- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs.
-- Later nog eens TODO
UPDATE bes_srtdeel
SET bes_srtgroep_key = l_srtgroep_key,
bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
bes_srtdeel_image = rec.ins_srtdeel_image,
bes_srtdeel_btw = rec.ins_srtdeel_btw,
bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid,
bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud,
bes_srtdeel_minimum = rec.ins_srtdeel_minimum,
bes_staffeltabel_key = rec.bes_staffeltabel_key,
bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen,
bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
IF l_omschrijving <> rec.ins_srtdeel_omschrijving
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Omschrijving '
|| l_omschrijving
|| ' -> '
|| rec.ins_srtdeel_omschrijving
);
END IF;
bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs);
IF l_prijs <> rec.ins_srtdeel_prijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs
);
END IF;
IF l_inkprijs <> rec.ins_srtdeel_inkprijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Inkoopprijs '
|| l_inkprijs
|| ' -> '
|| rec.ins_srtdeel_inkprijs
);
END IF;
IF l_veelvoud <> rec.ins_srtdeel_veelvoud
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelveelvoud '
|| l_veelvoud
|| ' -> '
|| rec.ins_srtdeel_veelvoud
);
END IF;
IF l_minimum <> rec.ins_srtdeel_minimum
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelminimum '
|| l_minimum
|| ' -> '
|| rec.ins_srtdeel_minimum
);
END IF;
IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Wijzigdagen '
|| l_wijzigdagen
|| ' -> '
|| rec.ins_srtdeel_wijzigdagen
);
END IF;
IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Annuleerdagen '
|| l_annuleerdagen
|| ' -> '
|| rec.ins_srtdeel_annuleerdagen
);
END IF;
IF l_opmerking <> rec.ins_srtdeel_opmerking
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_opmerking
|| ' is gewijzigd',
'Opmerking '
|| l_opmerking
|| ' -> '
|| rec.ins_srtdeel_opmerking
);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen bijgewerkt',
''
);
COMMIT;
-- INSERT SRTDEEL
ccount := 0;
FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr;
INSERT INTO bes_srtdeel (bes_srtgroep_key,
bes_srtdeel_nr,
bes_srtdeel_omschrijving,
bes_srtdeel_image,
bes_srtdeel_btw,
bes_srtdeel_eenheid,
bes_srtdeel_dimensie,
prs_bedrijf_key,
bes_srtdeel_vervaldatum,
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_staffeltabel_key,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking)
VALUES (l_srtgroep_key,
rec.ins_srtdeel_nr,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_image,
rec.ins_srtdeel_btw,
rec.ins_srtdeel_eenheid,
0,
pbedr_key,
rec.ins_srtdeel_vervaldatum,
rec.ins_srtdeel_veelvoud,
rec.ins_srtdeel_minimum,
rec.bes_staffeltabel_key,
rec.ins_srtdeel_wijzigdagen,
rec.ins_srtdeel_annuleerdagen,
rec.ins_srtdeel_opmerking)
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is toegevoegd',
''
);
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in importbestand';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen toegevoegd',
''
);
COMMIT;
END;
PROCEDURE l_update_voorraad (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
-- Cursor van alle artikelen (die dus op dit punt zijn gesynct met de importtabel), waarvan we de voorraad-info van het bijbehorende inkoopartikel willen gaan zoeken...
CURSOR c_updsrtdeel_voorraad (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT s.bes_srtdeel_key, f.*
FROM stph_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;
ccount NUMBER (10);
l_bes_discipline_key_inkoop bes_disc_params.bes_ins_discipline_key_inkoop%TYPE;
l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE;
l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
BEGIN
ccount := 0;
SELECT dp.bes_ins_discipline_key_inkoop
INTO l_bes_discipline_key_inkoop
FROM bes_disc_params dp
WHERE dp.bes_ins_discipline_key = pdisc_key;
IF l_bes_discipline_key_inkoop IS NOT NULL
THEN
-- We hebben van doen met een magazijn catalogus die is gkoppeld aan inkoopcatalogus met discipline-key 'l_bes_discipline_key_inkoop'
-- De voorraad gegevens moeten in de overeenkomstige artikel van die inkoopcatalogus worden bijgewerkt.
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Inkoop catalogus is gevonden: key = '
|| l_bes_discipline_key_inkoop,
''
);
FOR rec IN c_updsrtdeel_voorraad (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen artikel in de inkoopcatalogus ' || rec.ins_srtdeel_nr;
-- Op zoek naar het overeenkomstige artikel in de inkoopcatalogus, op basis van artikelnummer (bes_srtdeel_nr) welke niet verwijderd is van de catalogus met key 'l_bes_discipline_key_inkoop'
-- Daarbij JUIST geen check op eenheid, die is namelijk vooral anders (b.v. inkoopcatalogus heeft '1 pak van 4 stuks' en de magazijncatalogus heeft 'per stuk')
SELECT s.bes_srtdeel_key
INTO l_bes_srtdeel_key
FROM bes_srtdeel s, bes_srtgroep g
WHERE UPPER (s.bes_srtdeel_nr) = UPPER (rec.ins_srtdeel_nr)
AND s.bes_srtgroep_key = g.bes_srtgroep_key
AND s.bes_srtdeel_verwijder IS NULL
AND g.ins_discipline_key = l_bes_discipline_key_inkoop;
UPDATE bes_srtdeel
SET bes_srtdeel_voorraadmin = rec.bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax = rec.bes_srtdeel_voorraadmax,
bes_srtdeel_voorraadfactor = rec.bes_srtdeel_voorraadfactor,
bes_srtdeel_maxbestel = COALESCE(rec.bes_srtdeel_maxbestel,0)
WHERE bes_srtdeel_key = l_bes_srtdeel_key;
l_prijs := NULL;
CASE rec.bes_inclexcl_btw
WHEN '1'
THEN
-- 1. Prijs van artikel van inerne (magazijn)catalogus omrekenen obv factor, zonder btw omrekening (100 euro met factor 50 -> 100/50 = 2 euro)
l_prijs := rec.ins_srtdeel_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1);
WHEN '2'
THEN
-- 2. is omrekenen obv de voorraadfactor excl btw (prijzen staan incl btw, en je wilt naar excl btw intern) (100 euro met factor 50 en 21% btw -> 100 - 21% BTW /50 = 82,64 / 50 = 1,65)
IF fac.safe_to_number(rec.ins_srtdeel_btw) IS NOT NULL
THEN l_prijs := (rec.ins_srtdeel_prijs * 100) / (100 + fac.safe_to_number(rec.ins_srtdeel_btw));
l_prijs := l_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1);
ELSE fac.imp_writelog (
p_import_key,
'W',
'BTW bij artkel ' || rec.ins_srtdeel_nr || ' is NIET gevonden',
'Prijs wordt niet omgerekend'
);
END IF;
WHEN '3'
THEN
-- 3. is omrekenen obv de voorraadfactor incl btw (prijzen staan excl btw, en je wilt naar incl btw intern) (100 euro met factor 50 en 21% btw -> 100 + 21% BTW = 121,00 / 50 = 2,42)
IF fac.safe_to_number(rec.ins_srtdeel_btw) IS NOT NULL
THEN l_prijs := rec.ins_srtdeel_prijs * ((100 + fac.safe_to_number(rec.ins_srtdeel_btw))/100);
l_prijs := l_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1);
ELSE fac.imp_writelog (
p_import_key,
'W',
'BTW bij artkel ' || rec.ins_srtdeel_nr || ' is NIET gevonden',
'Prijs wordt niet omgerekend'
);
END IF;
ELSE
NULL;
END CASE;
IF l_prijs IS NOT NULL
THEN
l_prijs := ROUND (l_prijs,2);
-- Inkoopprijs NULL, magazijn catalogus is dit niet relevant, is uitgangspunt
bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, l_prijs, NULL);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in inkoopcatalogus';
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;
ELSE
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding
|| 'Inkoop catalogus is NIET gevonden',
''
);
END IF;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen met waarvan de voorraadgegevens zijn bijgewerkt',
''
);
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 stph_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);
l_update_voorraad (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 stph_update_catalogus;
/
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Einde Copy van fac_import_catalogus en fac_update_catalogus van 2015.2 (d.d. 26/10/15 uit fac_pacf.src gekopieerd)
--
--
--
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------
------ FACTUUREXPORT / KOPPELING DBS
------
--------------------------------------------------
-- DBS1: Factuurexport
-- view tbv export naar financieel systeem DBS
CREATE OR REPLACE VIEW stph_v_factuur_mldcnt_gegevens (
fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_boekmaand,
fin_factuur_nr,
fin_factuur_totaal,
fin_factuur_totaal_btw,
fin_factuur_totaal_dbs,
prs_bedrijf_key,
prs_leverancier_nr,
fin_factuurregel_totaal,
fin_factuurregel_btw,
fin_factuurregel_totaal_dbs,
fin_factuurregel_btw_perc,
fin_btwtabelwaarde_btwcode,
fin_factuurregel_nr,
fin_factuurregel_omschrijving,
fin_factuur_debiteur_nr,
project_nummer,
prs_kostensoort_oms,
prs_kostensoort_doorbelasten,
prs_kostenplaats_nr,
bes_opdr_key,
mld_opdr_key,
cnt_contract_key,
fin_factuur_statuses_key
)
AS
SELECT DISTINCT f.fin_factuur_key,
COALESCE (TO_CHAR (cnt_contract_nummer),
(SELECT sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key =
sd.ins_srtdiscipline_key)
)
opdracht_id,
f.fin_factuur_datum,
f.fin_factuur_boekmaand,
f.fin_factuur_nr,
f.fin_factuur_totaal,
f.fin_factuur_totaal_btw,
CASE
WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0
THEN LPAD(TO_CHAR(10000 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,4)), 12, '0') || '-'
ELSE LPAD(TO_CHAR(10000 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),4)), 12, '0') || '+'
END fin_factuur_totaal_dbs,
COALESCE (b_c.prs_bedrijf_key, b_o.prs_bedrijf_key) prs_bedrijf_key,
COALESCE (b_c.prs_leverancier_nr, b_o.prs_leverancier_nr) prs_leverancier_nr,
fr.fin_factuurregel_totaal,
fr.fin_factuurregel_btw,
CASE
WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0
THEN LPAD(TO_CHAR(10000 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,4)), 12, '0') || LPAD('0',12,'0')
ELSE LPAD('0',12,'0') || LPAD(TO_CHAR(10000 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),4)), 12, '0')
END fin_factuurregel_totaal_dbs,
btw.fin_btwtabelwaarde_perc,
btw.fin_btwtabelwaarde_code,
fr.fin_factuurregel_nr,
fr.fin_factuurregel_omschrijving,
f.fin_factuur_debiteur_nr,
NULL projectnummer,
COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
COALESCE (kp_c.prs_kostenplaats_nr, kp_o.prs_kostenplaats_nr) prs_kostenplaats_nr,
NULL bes_opdr_key,
o.mld_opdr_key,
c.cnt_contract_key,
f.fin_factuur_statuses_key
FROM fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
mld_opdr o,
mld_typeopdr ot,
cnt_contract c,
prs_bedrijf b_o,
prs_bedrijf b_c,
prs_kostensoort ks,
prs_kostensoort ks_regel,
prs_kostenplaats kp_c,
prs_kostenplaats kp_o
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
AND f.bes_bestelopdr_key is null
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key (+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
AND f.cnt_contract_key = c.cnt_contract_key(+)
AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
AND c.prs_kostenplaats_key = kp_c.prs_kostenplaats_key (+)
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+);
CREATE OR REPLACE VIEW stph_v_factuur_bes_gegevens (
fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_boekmaand,
fin_factuur_nr,
fin_factuur_totaal,
fin_factuur_totaal_btw,
fin_factuur_totaal_dbs,
prs_bedrijf_key,
prs_leverancier_nr,
fin_factuurregel_totaal,
fin_factuurregel_btw,
fin_factuurregel_totaal_dbs,
fin_factuurregel_btw_perc,
fin_btwtabelwaarde_btwcode,
fin_factuurregel_nr,
fin_factuurregel_omschrijving,
fin_factuur_debiteur_nr,
project_nummer,
prs_kostensoort_oms,
prs_kostensoort_doorbelasten,
prs_kostenplaats_nr,
bes_opdr_key,
mld_opdr_key,
cnt_contract_key,
fin_factuur_statuses_key
)
AS
SELECT DISTINCT f.fin_factuur_key,
TO_CHAR (bo.bes_bestelopdr_id) opdracht_id,
f.fin_factuur_datum,
f.fin_factuur_boekmaand,
f.fin_factuur_nr,
f.fin_factuur_totaal,
f.fin_factuur_totaal_btw,
CASE
WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0
THEN LPAD(TO_CHAR(10000 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,4)), 12, '0') || '-'
ELSE LPAD(TO_CHAR(10000 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),4)), 12, '0') || '+'
END fin_factuur_totaal_dbs,
b.prs_bedrijf_key,
b.prs_leverancier_nr,
fr.fin_factuurregel_totaal,
fr.fin_factuurregel_btw,
CASE
WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0
THEN LPAD(TO_CHAR(10000 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,4)), 12, '0') || LPAD('0',12,'0')
ELSE LPAD('0',12,'0') || LPAD(TO_CHAR(10000 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),4)), 12, '0')
END fin_factuurregel_totaal_dbs,
btw.fin_btwtabelwaarde_perc,
btw.fin_btwtabelwaarde_code,
fr.fin_factuurregel_nr,
fr.fin_factuurregel_omschrijving,
f.fin_factuur_debiteur_nr,
NULL projectnummer,
COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
kp.prs_kostenplaats_nr,
bo.bes_bestelopdr_key bes_opdr_key,
NULL mld_opdr_key,
NULL cnt_contract_key,
f.fin_factuur_statuses_key
FROM bes_bestelopdr bo,
prs_bedrijf b,
bes_bestelling bes,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
prs_kostensoort ks,
prs_kostensoort ks_regel,
prs_kostenplaats kp
WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes.bes_bestelling_key = bi.bes_bestelling_key
AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key;
CREATE OR REPLACE VIEW stph_v_factuur_geg
AS
SELECT * from stph_v_factuur_mldcnt_gegevens
UNION
SELECT * from stph_v_factuur_bes_gegevens;
CREATE OR REPLACE VIEW stph_v_factuur_geg_akkoord
AS
SELECT * from stph_v_factuur_mldcnt_gegevens
WHERE fin_factuur_statuses_key = 6
UNION
SELECT * from stph_v_factuur_bes_gegevens
WHERE fin_factuur_statuses_key = 6;
-- Exportbestand die voor DBS wordt gegenereerd, bestaande uit kopregel (factuur-nivo) en bijbehorende sub-regels (factuurregels)
--
-- Velden kopregel:
-- 1: uniek boekstuknummer van 10 posities (fin_factuur_key), posities 1-9
-- 2: factuurnummer van 16 posities, posities 10-25
-- 3: factuurdatum van 8 posities in formaat ddmmjjjjj, posities 26-33
-- 4: verdeelperiode van 6 posities in formaat jjjjmm, posities 34-39
-- 5: leveranciernummer van 4 posities, posities 40-43
-- 6: factuurregelnummer, in kopregel 00000 (5 posities, in subregel het opeenvolgend regelnr van de factuurregel), posities 44-48
-- 7: factuurregelomschrijving, in kopregel leeg (30 spaties), in subregel de omschrijving van de factuurregel), posities 49-78
-- 8: kostensoort, in kopregel 00000 (5 posities) in subregel de kostensoort), posities 79-83
-- 9: kostenplaats, in kopregel 0000 (4 posities), in subregel de kostenplaats, posities 84-87
-- 10: Debet/Credit: totaal factuurbedrag incl BTW (11 posities), bedrag in centen met achteraan een min-teken '-' (debet-post) of plus-teken (credit-post) (dus 123.95 euro -> 0000012395-), posities 88-98,
-- 11: Debet: totaal factuurregelbedrag, in kopregel leeg (10 nullen), posities 99-108
-- 12: Credit: totaal factuurregelbedrag indien NEGATIEF, in kopregel leeg (10 nullen), posities 109-118
-- Velden subregel:
-- 1: uniek boekstuknummer van 10 posities (fin_factuur_key), posities 1-9
-- 2: factuurnummer van 20 posities, posities 10-25
-- 3: factuurdatum van 8 posities in formaat ddmmjjjjj, posities 26-33
-- 4: verdeelperiode van 6 posities in formaat jjjjmm, posities 34-39
-- 5: leveranciernummer van 4 posities, posities 40-43
-- 6: factuurregelnummer, in kopregel 00000 (5 posities, in subregel het opeenvolgend regelnr van de factuurregel), posities 44-48
-- 7: factuurregelomschrijving, in kopregel leeg (30 spaties), in subregel de omschrijving van de factuurregel), posities 49-78
-- 8: kostensoort, in kopregel 00000 (6 posities) in subregel de kostensoort), posities 79-84
-- 9: kostenplaats, in kopregel 0000 (4 posities), in subregel de kostenplaats, posities 85-88
-- 10: Debet/Credit: totaal factuurbedrag incl BTW (11 posities), in subregel leeg (10 nullen) met een extra 0 vanwege de het min of plusteken in kopregel, posities 89-99,
-- 11: Debet: totaal factuurregelbedrag, (10 posities), bedrag in centen (dus 123.95 euro -> 0000012395), posities 110-119 (NB: hier geen min-teken! alleen in kopregel)
-- 12: Credit: totaal factuurregelbedrag indien NEGATIEF, (10 posities), bedrag in centen (dus 123.95 euro -> 0000012395), posities 120-129
CREATE OR REPLACE VIEW stph_v_export_dbs
(result, result_order)
AS
SELECT SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(MAX(fin_factuur_key), 5, '0') ||
LPAD(MAX(fin_factuur_nr), 16, '0') ||
TO_CHAR (MAX(fin_factuur_datum), 'ddmmyyyy') ||
SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(SUBSTR(MAX(fin_factuur_boekmaand),6,2) , 2, '0') ||
LPAD(COALESCE(MAX(prs_leverancier_nr),'0'), 4, '0') ||
LPAD('0',5,'0') ||
LPAD(' ',30,' ') ||
LPAD('0',6,'0') ||
LPAD('0',4,'0') ||
MAX(fin_factuur_totaal_dbs) ||
LPAD('0',12,'0') ||
LPAD('0',12,'0')
, SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(MAX(fin_factuur_key), 5, '0') || LPAD('0',5,'0')
FROM stph_v_factuur_geg_akkoord fg
GROUP by fin_factuur_key
UNION ALL
SELECT SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(fin_factuur_key, 5, '0') ||
LPAD(fin_factuur_nr, 16, '0') ||
TO_CHAR (fin_factuur_datum, 'ddmmyyyy') ||
SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(SUBSTR(fin_factuur_boekmaand,6,2) , 2, '0') ||
LPAD(COALESCE(prs_leverancier_nr,'0'), 4, '0') ||
LPAD(fin_factuurregel_nr,5,'0') ||
LPAD(COALESCE(fin_factuurregel_omschrijving, ' '),30,' ') ||
LPAD(prs_kostensoort_oms,6,'0') ||
LPAD(prs_kostenplaats_nr,4,'0') ||
LPAD('0',12,'0') || '0' ||
fin_factuurregel_totaal_dbs
, SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(fin_factuur_key, 5, '0') || LPAD(fin_factuurregel_nr,5,'0')
FROM stph_v_factuur_geg_akkoord fg;
CREATE OR REPLACE PROCEDURE stph_export_dbs (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
-- In cursor cfactuur alle facturen die worden geexporteerd...
CURSOR cfactuur
IS
SELECT fin_factuur_key
FROM stph_v_factuur_geg_akkoord
GROUP BY fin_factuur_key;
BEGIN
-- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT...
FOR cfact IN cfactuur
LOOP
-- Zowel de factuur in tracking zetten als de status op verwerkt (=7) zetten
fin.setfactuurstatus (cfact.fin_factuur_key, 7, NULL);
END LOOP;
END;
/
CREATE OR REPLACE VIEW stph_v_export_undo_dbs (
result,
result_order
)
AS
SELECT REPLACE(REPLACE(f.fin_factuur_key
|| ';'
|| opdracht_id
|| ';'
|| fin_factuur_datum
|| ';'
|| fin_factuur_nr
|| ';'
|| prs_bedrijf_key
|| ';'
|| fin_factuurregel_totaal
|| ';'
|| fin_factuurregel_btw
|| ';'
|| fin_factuurregel_nr
|| ';'
|| fin_factuur_debiteur_nr
|| ';'
|| project_nummer
|| ';'
|| prs_kostensoort_oms
|| ';'
|| bes_opdr_key
|| ';'
|| mld_opdr_key
|| ';'
|| cnt_contract_key
,CHR (13), ''), CHR (10), '<ret>'), f.fin_factuur_key
FROM stph_v_factuur_geg f, fac_tracking t, fac_srtnotificatie sn
WHERE sn.fac_srtnotificatie_code ='FINVER'
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
FROM fac_tracking t1
WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
AND f.fin_factuur_key = t.fac_tracking_refkey
AND f.fin_factuur_statuses_key = 7;
CREATE OR REPLACE PROCEDURE stph_select_undo_dbs (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
v_errormsg VARCHAR (200);
BEGIN
v_errormsg := 'Geen akties';
END;
/
-- Procedure om alle geexporteerde facturen naar status akkoord terug te zetten.
CREATE OR REPLACE PROCEDURE stph_export_undo_dbs (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR cfactuur
IS
SELECT DISTINCT f.fin_factuur_key
FROM fac_tracking t, fac_srtnotificatie sn, fin_factuur f
WHERE sn.fac_srtnotificatie_code ='FINVER'
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
FROM fac_tracking t1
WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
AND f.fin_factuur_key = t.fac_tracking_refkey
AND fin_factuur_statuses_key = 7;
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errormsg := 'Geen akties';
FOR cfact IN cfactuur
LOOP
-- Eerst de factuur in tracking zetten...
-- Omdat van 7 naar 6 niet mag/geoorloofd is, lukt het niet via
-- de reguliere functie fin.setfactuurstatus (cfact.fin_factuur_key, 6, NULL);
-- Dan maar zelf en custom-made:
fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
UPDATE fin_factuur
SET fin_factuur_statuses_key = 6
WHERE fin_factuur_key = cfact.fin_factuur_key;
END LOOP;
END;
/
--------------------------------------------------
-- DBS2: Catering export
-- Velden catering-regels voor intern doorbelasten (DBS) van de vorige maand, die niet dirty zijn.
CREATE OR REPLACE VIEW stph_v_res_catering_2_dbs
AS
SELECT rr.res_reservering_key,
rr.res_rsv_ruimte_volgnr,
rr.res_rsv_ruimte_key,
r.res_ruimte_key,
r.res_ruimte_nr,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
g.alg_gebouw_code,
g.alg_gebouw_naam,
v.alg_verdieping_volgnr,
v.alg_verdieping_omschrijving,
ar.alg_ruimte_nr,
ar.alg_ruimte_omschrijving,
op.res_opstelling_key,
op.res_opstelling_omschrijving,
rr.res_rsv_ruimte_van,
rr.res_rsv_ruimte_omschrijving,
rr.res_rsv_ruimte_opmerking,
rr.res_rsv_ruimte_bezoekers,
rr.res_status_fo_key,
rr.res_status_bo_key,
ra.res_rsv_artikel_levering,
TO_CHAR(ra.res_rsv_artikel_levering, 'DD-MM-YYYY') datum,
TO_CHAR(ra.res_rsv_artikel_levering, 'HH24:MI') tijd,
ra.res_rsv_artikel_aantal aantal,
a.res_artikel_key,
a.res_artikel_nr artikelnr,
a.res_artikel_omschrijving artikeloms,
d.ins_discipline_key,
d.ins_discipline_omschrijving catalogus,
ra.res_rsv_artikel_prijs, a.res_artikel_prijs,
a.res_artikel_prijs eenheidsprijs,
res.getartikelprijs(ra.res_rsv_artikel_key) totaalprijs,
c.prs_perslid_naam contact_naam,
c.prs_perslid_tussenvoegsel contact_tussenvoegsel,
c.prs_perslid_voorletters contact_voorletters,
c.prs_perslid_voornaam contact_voornaam,
DECODE(c.prs_perslid_geslacht,0,'V',1,'M', '') contact_geslacht,
c.prs_perslid_email contact_email,
c.prs_perslid_telefoonnr contact_telefoonnr,
c.prs_perslid_mobiel contact_mobiel,
h.prs_perslid_naam host_naam,
h.prs_perslid_tussenvoegsel host_tussenvoegsel,
h.prs_perslid_voorletters host_voorletters,
h.prs_perslid_voornaam host_voornaam,
DECODE(h.prs_perslid_geslacht,0,'V',1,'M', '') host_geslacht,
h.prs_perslid_email host_email,
h.prs_perslid_telefoonnr host_telefoonnr,
h.prs_perslid_mobiel host_mobiel,
k.prs_kostenplaats_nr,
ks.prs_kostensoort_oms
FROM res_rsv_artikel ra,
res_artikel a,
res_discipline d,
res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_opstelling op,
res_ruimte r,
alg_ruimte ar,
alg_verdieping v,
alg_gebouw g,
alg_locatie l,
prs_perslid c,
prs_kostenplaats k,
prs_kostensoort ks,
prs_perslid h
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_rsv_ruimte_van >= to_date('01-' || to_char(sysdate - to_char(sysdate, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY')
AND rr.res_rsv_ruimte_van < to_date('01-' || to_char(sysdate, 'MM-YYYY'), 'DD-MM-YYYY')
AND a.res_artikel_key = ra.res_artikel_key
AND d.ins_discipline_key = a.res_discipline_key
AND d.ins_discipline_min_level = 2
AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)
AND ro.res_ruimte_key = r.res_ruimte_key (+)
AND ro.res_opstelling_key = op.res_opstelling_key (+)
AND rr.alg_ruimte_key = ar.alg_ruimte_key (+)
AND ar.alg_verdieping_key = v.alg_verdieping_key (+)
AND v.alg_gebouw_key = g.alg_gebouw_key (+)
AND g.alg_locatie_key = l.alg_locatie_key (+)
AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+)
AND rr.res_rsv_ruimte_host_key = h.prs_perslid_key
AND rr.res_rsv_ruimte_dirtlevel = 0;
-- Velden catering-regels voor intern doorbelasten (DBS) van de vorige maand, die definitief zijn (gemaakt).
-- 1e regel bij catering
-- 1: kostensoort bij de catalogus, posities 1-6
-- 2: kostenplaats bij de reservering van 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0
-- 2e bijbehorende regel bij catering
-- 1: kostensoort 83211, posities 1-6
-- 2: kostenplaats 2020, 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30
-- Aanvulling: zie call STPH#36545
-- Tegenboeking (2e bijbehorende regel) 'Catering'Catalogus "Dienstverlening logistiek" (key= 581) -> kostenplaats 2061 en kostensoort 41900
-- Tegenboeking (2e bijbehorende regel) 'Catering'Catalogus "Dienstverlening receptie" (key= 582) -> kostenplaats 2005 en kostensoort 41900
CREATE OR REPLACE VIEW stph_v_export_catering_dbs
(result, result_order)
AS
SELECT LPAD(prs_kostensoort_oms,6,'0') ||
LPAD(prs_kostenplaats_nr,4,'0') ||
LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0') ||
'0000000000'
, LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '1'
FROM stph_v_res_catering_2_dbs
WHERE res_status_fo_key = 2
AND totaalprijs <> 0
UNION ALL
SELECT '832110' ||
'2020' ||
'0000000000' ||
LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0')
, LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2'
FROM stph_v_res_catering_2_dbs
WHERE res_status_fo_key = 2
AND totaalprijs <> 0
AND ins_discipline_key NOT IN (581, 582)
UNION ALL
SELECT '419000' ||
'2061' ||
'0000000000' ||
LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0')
, LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2'
FROM stph_v_res_catering_2_dbs
WHERE res_status_fo_key = 2
AND totaalprijs <> 0
AND ins_discipline_key = 581
UNION ALL
SELECT '419000' ||
'2005' ||
'0000000000' ||
LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0')
, LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2'
FROM stph_v_res_catering_2_dbs
WHERE res_status_fo_key = 2
AND totaalprijs <> 0
AND ins_discipline_key = 582;
--STPH#78738 Doorbelasting via melding of object
--Export naar DBS van interne en externe opdrachten & reserveerbare objecten
CREATE OR REPLACE VIEW STPH_V_EXPORT_DIENSTVERL_DBS
(
RESULT,
RESULT_ORDER
)
AS
SELECT LPAD (
(SELECT ks.prs_kostensoort_oms
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
(SELECT COALESCE (sm.prs_kostensoort_key,
disc.prs_kostensoort_key)
FROM mld_stdmelding sm, mld_discipline disc
WHERE sm.mld_ins_discipline_key =
disc.ins_discipline_key
AND sm.mld_stdmelding_key =
m.mld_stdmelding_key)),
6,
'0')
|| LPAD (kp.prs_kostenplaats_nr, 4, '0')
|| LPAD (TO_CHAR (ROUND (100 * o.mld_opdr_kosten, 2)), 10, '0')
|| '0000000000',
LPAD (o.mld_melding_key, 10, '0')
|| LPAD (o.mld_opdr_bedrijfopdr_volgnr, 5, '0')
|| '2' --2 Voor meldingsopdrachten
FROM mld_opdr o, prs_kostenplaats kp, mld_melding m
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_opdr_kosten <> 0
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) >=
TO_DATE ('01-' || TO_CHAR (SYSDATE - TO_CHAR (SYSDATE, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY')
AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) <
TO_DATE ('01-' || TO_CHAR (SYSDATE, 'MM-YYYY'), 'DD-MM-YYYY')
UNION ALL
SELECT '419000'
|| LPAD (kp.prs_kostenplaats_nr, 4, '0')
|| '0000000000'
|| LPAD (TO_CHAR (ROUND (100 * o.mld_opdr_kosten, 2)), 10, '0'),
LPAD (o.mld_melding_key, 10, '0')
|| LPAD (o.mld_opdr_bedrijfopdr_volgnr, 5, '0')
|| '2' --2 Voor meldingsopdrachten
FROM mld_opdr o, prs_kostenplaats kp, mld_melding m, fac_tracking t, prs_perslid p, prs_afdeling a
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_opdr_kosten <> 0
AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND t.fac_tracking_refkey = o.mld_opdr_key
AND t.fac_srtnotificatie_key = 57 --ORDNEW
AND t.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) >=
TO_DATE ('01-' || TO_CHAR (SYSDATE - TO_CHAR (SYSDATE, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY')
AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) <
TO_DATE ('01-' || TO_CHAR (SYSDATE, 'MM-YYYY'), 'DD-MM-YYYY')
UNION ALL
SELECT LPAD (COALESCE (ks.prs_kostensoort_oms, '000000'), 6, '0')
|| LPAD (kp.prs_kostenplaats_nr, 4, '0')
|| LPAD (TO_CHAR (ROUND (100 * SUM (rd.res_deel_prijs), 2)),
10,
'0')
|| '0000000000',
LPAD (rrr.res_reservering_key, 10, '0')
|| LPAD (rrr.res_rsv_ruimte_volgnr, 5, '0')
|| '3' --3 Voor reserveerbare objecten
FROM res_v_aanwezigrsv_deel rrd,
res_deel rd,
res_discipline d,
res_rsv_ruimte rrr,
prs_kostenplaats kp,
prs_kostensoort ks
WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rd.res_deel_prijs <> 0
AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrd.res_rsv_deel_van >=
TO_DATE ('01-' || TO_CHAR (SYSDATE - TO_CHAR (SYSDATE, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY')
AND rrd.res_rsv_deel_van <
TO_DATE ('01-' || TO_CHAR (SYSDATE, 'MM-YYYY'), 'DD-MM-YYYY')
GROUP BY LPAD (COALESCE (ks.prs_kostensoort_oms, '000000'), 6, '0')
|| LPAD (kp.prs_kostenplaats_nr, 4, '0'),
( LPAD (rrr.res_reservering_key, 10, '0')
|| LPAD (rrr.res_rsv_ruimte_volgnr, 5, '0')
|| '3')
UNION ALL
SELECT '419000'
|| '2061'
|| '0000000000'
|| LPAD (TO_CHAR (ROUND (100 * SUM (rd.res_deel_prijs), 2)),
10,
'0'),
LPAD (rrr.res_reservering_key, 10, '0')
|| LPAD (rrr.res_rsv_ruimte_volgnr, 5, '0')
|| '3' --3 Voor reserveerbare objecten
FROM res_v_aanwezigrsv_deel rrd,
res_deel rd,
res_discipline d,
res_rsv_ruimte rrr,
prs_kostenplaats kp,
prs_kostensoort ks
WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rd.res_deel_prijs <> 0
AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrd.res_rsv_deel_van >=
TO_DATE ('01-' || TO_CHAR (SYSDATE - TO_CHAR (SYSDATE, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY')
AND rrd.res_rsv_deel_van <
TO_DATE ('01-' || TO_CHAR (SYSDATE, 'MM-YYYY'), 'DD-MM-YYYY')
GROUP BY '419000' || '2061',
( LPAD (rrr.res_reservering_key, 10, '0')
|| LPAD (rrr.res_rsv_ruimte_volgnr, 5, '0')
|| '3');
--------------------------------------------------
-- DBS3: Interne bestellingen export
-- Een interne bestelopdracht gaat naar "interne" relatiebeheer "Centraal Magazijn", dit is prs_bedrijf_key = 422
-- Een interne bestelopdracht "dagvers" gaat naar "interne" relatiebeheer "Centrale Keuken", dit is prs_bedrijf_key = 1401
CREATE OR REPLACE VIEW stph_v_bes_intern_2_dbs
( prs_bedrijf_key,
bes_bestelopdr_key,
bes_bestelopdr_item_posnr,
prs_kostensoort_oms,
prs_kostensoort_tegenboeking,
prs_kostenplaats_nr,
bes_bestelopdr_item_aantalontv,
bes_bestelopdr_item_brutoprijs,
bes_srtdeel_btw
)
AS
SELECT b.prs_bedrijf_key,
boi.bes_bestelopdr_key,
boi.bes_bestelopdr_item_posnr,
COALESCE(ks_groep.prs_kostensoort_oms, ks.prs_kostensoort_oms),
COALESCE(ks_groep.prs_kostensoort_refcode,ks.prs_kostensoort_refcode),
kp.prs_kostenplaats_nr,
boi.bes_bestelopdr_item_aantalontv,
boi.bes_bestelopdr_item_brutoprijs,
sd.bes_srtdeel_btw
FROM bes_bestelopdr bo,
prs_bedrijf b,
bes_bestelling bes,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
prs_kostenplaats kp,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
prs_kostensoort ks,
prs_kostensoort ks_groep
WHERE b.prs_bedrijf_key IN (422, 1401)
AND b.prs_bedrijf_key = bo.prs_bedrijf_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes.bes_bestelling_key = bi.bes_bestelling_key
AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key
AND sd.bes_srtdeel_key = bi.bes_srtdeel_key
AND sg.BES_SRTGROEP_KEY = sd. BES_SRTGROEP_KEY
AND d.ins_discipline_key = sg.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+)
AND sg.prs_kostensoort_key = ks_groep.prs_kostensoort_key (+)
AND bo.bes_bestelopdr_status = 6;
-- Velden interne bestelopdracht-regels voor intern doorbelasten (DBS), die geleverd zijn geadministreerd.
-- 1e regel bij interne bestelregel.
-- 1: eerst kostensoort bes_groep, indien leeg dan kostensoort bij de catalogus, posities 1-6
-- 2: kostenplaats bij de bestelling van 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0
-- 2e bijbehorende regel bij bestelregel
-- 1: kostensoort_tegenboeking die hoort bij kostensoort uit 1e regel, (dus eerst KS groep, indien leeg dan KS catalogus) posities 1-6
-- 2: kostenplaats 0000, 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30
CREATE OR REPLACE VIEW stph_v_export_intern_magazijn
(result, result_order)
AS
SELECT LPAD(prs_kostensoort_oms,6,'0') ||
LPAD(prs_kostenplaats_nr,4,'0') ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') ||
'0000000000'
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1'
FROM stph_v_bes_intern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0
AND prs_bedrijf_key = 422
UNION ALL
SELECT LPAD(prs_kostensoort_tegenboeking,6,'0') ||
'0000' ||
'0000000000' ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0')
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2'
FROM stph_v_bes_intern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0
AND prs_bedrijf_key = 422;
-- Velden interne bestelopdracht-regels voor intern doorbelasten (DBS), die geleverd zijn geadministreerd.
-- 1e regel bij interne bestelregel.
-- 1: eerst kostensoort bes_groep, indien leeg dan kostensoort bij de catalogus, posities 1-6
-- 2: kostenplaats bij de bestelling van 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0
-- 2e bijbehorende regel bij bestelregel
-- 1: kostensoort_tegenboeking die hoort bij kostensoort uit 1e regel, (dus eerst KS groep, indien leeg dan KS catalogus) posities 1-6
-- 2: kostenplaats 0000, 4 posities, posities 7-10
-- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0
-- 4: credit: bedrag in centen, in 10 posities, posities 21-30
CREATE OR REPLACE VIEW stph_v_export_intern_keuken
(result, result_order)
AS
SELECT LPAD(prs_kostensoort_oms,6,'0') ||
LPAD(prs_kostenplaats_nr,4,'0') ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') ||
'0000000000'
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1'
FROM stph_v_bes_intern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0
AND prs_bedrijf_key = 1401
UNION ALL
SELECT LPAD(prs_kostensoort_oms,6,'0') ||
'2010' ||
'0000000000' ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0')
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2'
FROM stph_v_bes_intern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0
AND prs_bedrijf_key = 1401;
-- Op de balans ook de externe catalogus die gekoppeld is aan een (of meer) van die interne catalogi.
-- Dus als tegenhanger van de interne "magazijn voorraad" catalogi die via VIEW stph_v_bes_intern_2_dbs verlopen....
-- Te bepalen via de kolom bes_ins_discipline_key_inkoop
--
CREATE OR REPLACE VIEW stph_v_bes_extern_2_dbs
( prs_bedrijf_key,
bes_bestelopdr_key,
bes_bestelopdr_item_posnr,
prs_kostensoort_oms,
prs_kostensoort_tegenboeking,
prs_kostenplaats_nr,
bes_bestelopdr_item_aantalontv,
bes_bestelopdr_item_brutoprijs,
bes_srtdeel_btw
)
AS
SELECT b.prs_bedrijf_key,
boi.bes_bestelopdr_key,
boi.bes_bestelopdr_item_posnr,
COALESCE(ks_groep.prs_kostensoort_oms, ks.prs_kostensoort_oms),
COALESCE(ks_groep.prs_kostensoort_refcode,ks.prs_kostensoort_refcode),
kp.prs_kostenplaats_nr,
boi.bes_bestelopdr_item_aantalontv,
boi.bes_bestelopdr_item_brutoprijs,
sd.bes_srtdeel_btw
FROM bes_bestelopdr bo,
prs_bedrijf b,
bes_bestelling bes,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
prs_kostenplaats kp,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
bes_disc_params dp,
prs_kostensoort ks,
prs_kostensoort ks_groep
WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes.bes_bestelling_key = bi.bes_bestelling_key
AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key
AND sd.bes_srtdeel_key = bi.bes_srtdeel_key
AND sg.BES_SRTGROEP_KEY = sd. BES_SRTGROEP_KEY
AND d.ins_discipline_key = sg.ins_discipline_key
AND d.ins_discipline_key = dp.bes_ins_discipline_key
AND EXISTS (select 'x' FROM bes_disc_params dp2 WHERE dp2.bes_ins_discipline_key_inkoop = dp.bes_ins_discipline_key)
AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+)
AND sg.prs_kostensoort_key = ks_groep.prs_kostensoort_key (+)
AND bo.bes_bestelopdr_status = 6;
-- Dit zou ook een DB4 bestand kunnen zijn, maar er is gekozen om deze regels tesamen met het bestaande DB3 bestand weg te schrijven...
-- Zie VIEW stph_v_export_intern_bes_dbs en Export-PROCEDURE stph_v_export_intern_bes_dbs
-- Daarin is deze nieuw view ook verwerkt....
-- Let op: de prijzen van de externe catalogi zijn excl BTW, doorbelasting is incl BTW, daarom wordt het BTW percentage erbij opgeteld.
CREATE OR REPLACE VIEW stph_v_export_externe_voorraad
(result, result_order)
AS
SELECT LPAD(prs_kostensoort_tegenboeking,6,'0') ||
'0000' ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * (1 + 0.01 * COALESCE(bes_srtdeel_btw,0)) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') ||
'0000000000'
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1'
FROM stph_v_bes_extern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0
UNION ALL
SELECT '320100' ||
'0000' ||
'0000000000' ||
LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * (1 + 0.01 * COALESCE(bes_srtdeel_btw,0)) * bes_bestelopdr_item_brutoprijs,2)), 10, '0')
, LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2'
FROM stph_v_bes_extern_2_dbs
WHERE bes_bestelopdr_item_brutoprijs <> 0;
CREATE OR REPLACE VIEW stph_v_export_intern_bes_dbs
(result, result_order)
AS
SELECT * FROM stph_v_export_intern_magazijn
UNION ALL
SELECT * FROM stph_v_export_intern_keuken
UNION ALL
SELECT * FROM stph_v_export_externe_voorraad;
CREATE OR REPLACE PROCEDURE stph_export_intern_bes_dbs (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
-- In cursor cbesopdr alle bestelopdrachten die worden geexporteerd...
CURSOR cbesopdracht
IS
SELECT DISTINCT bes_bestelopdr_key
FROM stph_v_bes_intern_2_dbs
UNION
SELECT DISTINCT bes_bestelopdr_key
FROM stph_v_bes_extern_2_dbs;
BEGIN
-- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT...
FOR cbesopdr IN cbesopdracht
LOOP
-- De bestelopdracht op verwerkt zetten
bes.setbestelopdrstatus (cbesopdr.bes_bestelopdr_key, 7, NULL);
END LOOP;
END;
/
-- STPH#34969 voorraad weergeven en evt max voorraad kunnen gebruiken
CREATE OR REPLACE VIEW stph_v_rap_voorraad
(
hide_f_srtgroep_omschrijving,
artikel_nr,
voorraad
)
AS
SELECT bes_srtgroep_omschrijving,
bes_srtdeel_nr,
COALESCE (aantal_geleverd * intern_voorraadfactor, 0)
- COALESCE (aantal_intern_uit, 0)
voorraad
FROM ( SELECT a.bes_srtdeel_key,
a.bes_srtdeel_nr,
SUM (a.aantal_intern_uit) aantal_intern_uit,
SUM (a.aantal_geleverd) aantal_geleverd,
b.intern_voorraadfactor,
a.bes_srtgroep_omschrijving
FROM ( SELECT COALESCE (bo.bes_srtdeel_key_inkoop,
bo.bes_srtdeel_key)
bes_srtdeel_key,
bo.bes_srtdeel_nr,
bo.bes_ins_discipline_key,
bo.inkoop_disc,
SUM (bo.aantal_intern) aantal_intern_uit,
SUM (bo.aantal_extern_geleverd)
aantal_geleverd,
bes_srtgroep_omschrijving
FROM ( SELECT sd.bes_srtdeel_nr,
sd.bes_srtdeel_key,
bes_srtgroep_omschrijving,
(SELECT isd2.bes_srtdeel_key
FROM bes_srtdeel isd2,
bes_srtgroep isg2,
bes_discipline bd2
WHERE isd2.bes_srtgroep_key =
isg2.bes_srtgroep_key
AND bd2.ins_discipline_key =
isg2.ins_discipline_key
AND isd2.bes_srtdeel_nr LIKE
sd.bes_srtdeel_nr
AND bes_srtdeel_verwijder IS NULL
AND bd2.ins_discipline_key =
dp.bes_ins_discipline_key_inkoop)
bes_srtdeel_key_inkoop,
dp.bes_ins_discipline_key,
dp.bes_ins_discipline_key_inkoop
inkoop_disc,
SUM (bi.bes_bestelling_item_aantal)
aantal_intern,
TO_NUMBER (NULL) aantal_open_order,
TO_NUMBER (NULL)
aantal_extern_geleverd
FROM bes_discipline bd,
bes_v_aanwezigsrtgroep g,
bes_v_aanwezigsrtdeel sd,
bes_bestelling b,
bes_bestelling_item bi,
bes_disc_params dp
WHERE sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND g.ins_discipline_key =
bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND sd.bes_srtdeel_verwijder IS NULL
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
AND dp.bes_ins_discipline_key_inkoop =
221
AND (sd.bes_srtdeel_vervaldatum IS NULL
OR sd.bes_srtdeel_vervaldatum >
SYSDATE)
GROUP BY sd.bes_srtdeel_nr,
sd.bes_srtdeel_key,
dp.bes_ins_discipline_key,
dp.bes_ins_discipline_key_inkoop,
bes_srtgroep_omschrijving
UNION ALL
SELECT sd.bes_srtdeel_nr,
sd.bes_srtdeel_key,
bes_srtgroep_omschrijving,
NULL bes_srtdeel_key_inkoop,
dp.bes_ins_discipline_key,
bd.ins_discipline_key inkoop_disc,
TO_NUMBER (NULL) aantal_intern,
SUM (bi.bes_bestelling_item_aantal)
- SUM(COALESCE (
bi.bes_bestelling_item_aantalontv,
0
))
aantal_open_order,
TO_NUMBER (NULL)
aantal_extern_geleverd
FROM bes_discipline bd,
bes_v_aanwezigsrtgroep g,
bes_v_aanwezigsrtdeel sd,
bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item bo,
bes_disc_params dp
WHERE sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key =
bo.bes_bestelopdr_item_key
AND g.ins_discipline_key =
bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND sd.bes_srtdeel_verwijder IS NULL
AND b.bes_bestelling_status IN
(2, 3, 4, 5)
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND dp.bes_ins_discipline_key IN
(SELECT dp1.bes_ins_discipline_key_inkoop
FROM bes_disc_params dp1
WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL)
AND bd.ins_discipline_key = 221
AND (sd.bes_srtdeel_vervaldatum IS NULL
OR sd.bes_srtdeel_vervaldatum >
SYSDATE)
GROUP BY bes_srtdeel_nr,
sd.bes_srtdeel_key,
dp.bes_ins_discipline_key,
bd.ins_discipline_key,
bes_srtgroep_omschrijving
UNION ALL
SELECT sd.bes_srtdeel_nr,
sd.bes_srtdeel_key,
bes_srtgroep_omschrijving,
NULL bes_srtdeel_key_inkoop,
dp.bes_ins_discipline_key,
bd.ins_discipline_key inkoop_disc,
TO_NUMBER (NULL) aantal_intern,
TO_NUMBER (NULL) aantal_open_order,
SUM(COALESCE (
bi.bes_bestelling_item_aantalontv,
0
))
aantal_extern_geleverd
FROM bes_discipline bd,
bes_v_aanwezigsrtgroep g,
bes_v_aanwezigsrtdeel sd,
bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item bo,
bes_disc_params dp
WHERE sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key =
bo.bes_bestelopdr_item_key
AND g.ins_discipline_key =
bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND sd.bes_srtdeel_verwijder IS NULL
AND (b.bes_bestelling_status IN
(6, 7)
OR (bo.bes_bestelopdr_item_ontvangen IS NOT NULL
AND b.bes_bestelling_status IN
(5)))
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND dp.bes_ins_discipline_key IN
(SELECT dp1.bes_ins_discipline_key_inkoop
FROM bes_disc_params dp1
WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL)
AND bd.ins_discipline_key = 221
AND (sd.bes_srtdeel_vervaldatum IS NULL
OR sd.bes_srtdeel_vervaldatum >
SYSDATE)
GROUP BY bes_srtdeel_nr,
sd.bes_srtdeel_key,
dp.bes_ins_discipline_key,
bd.ins_discipline_key,
bes_srtgroep_omschrijving,
bes_srtgroep_omschrijving) bo
GROUP BY bo.bes_srtdeel_key,
bo.bes_srtdeel_key_inkoop,
bo.bes_srtdeel_nr,
bo.bes_ins_discipline_key,
bo.inkoop_disc,
bes_srtgroep_omschrijving) a,
(SELECT sd2.bes_srtdeel_nr,
sd2.bes_srtdeel_voorraadfactor
intern_voorraadfactor,
sg2.ins_discipline_key,
sd2.bes_srtdeel_omschrijving
bes_srtdeel_omschrijving
FROM bes_srtdeel sd2, bes_srtgroep sg2
WHERE sd2.bes_srtgroep_key = sg2.bes_srtgroep_key
AND sd2.bes_srtdeel_verwijder IS NULL) b
WHERE a.bes_srtdeel_nr = b.bes_srtdeel_nr
AND a.inkoop_disc = b.ins_discipline_key
GROUP BY a.bes_srtdeel_key,
a.bes_srtdeel_nr,
a.inkoop_disc,
a.bes_srtgroep_omschrijving,
b.intern_voorraadfactor,
b.bes_srtdeel_omschrijving) l;
CREATE OR REPLACE VIEW stph_v_noti_cntreminder
(
code,
sender,
receiver,
text,
key,
par1,
par2,
xkey
)
AS
SELECT 'CNTUPD',
'',
COALESCE (c.prs_perslid_key_eig, c.prs_perslid_key_beh),
'Rapp<EFBFBD>l: Contract ' || c.cnt_contract_nummer_intern
|| DECODE (cnt_contract_versie,
NULL, '',
'.' || cnt_contract_versie)
|| ' ('
|| c.cnt_contract_omschrijving
|| ' '
|| b.prs_bedrijf_naam
|| ')'
|| ' moet uiterlijk per '
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
cnt.cnt_getopzegdatum (c.cnt_contract_key),
NULL
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
AND cnt.cnt_getopzegdatum (c.cnt_contract_key));
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------ INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM ------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE stph_import_invoicesharing (p_import_key IN NUMBER)
AS
v_seq_of_columns VARCHAR(50);
BEGIN
--In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);btw_verlegd(8);document(9);kostensoort(10);
--hulp voor pos : '1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;16;7;8;9;0'
v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;9;0;0;0;10;0;0;0;0';
-- Variabelelijst
-- v_leveranciernr: 1
-- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
-- v_factuurdatum: 3
-- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet")
-- v_locatie: 5
-- v_afleverdatum: 6
-- v_omschrijving: 7
-- v_aantal: 8
-- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet")
-- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
-- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
-- v_docid: 12
-- v_debiteur_nr: 13
-- v_opmerking: 14
-- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
-- v_kenmerk1: 16
-- v_kenmerk1: 17
-- v_kenmerk1: 18
-- v_kenmerk1: 19
-- v_kenmerk1: 20
-- v_boekmaand: 21
fac_import_factuur_body(p_import_key, v_seq_of_columns);
END;
/
CREATE OR REPLACE PROCEDURE stph_postupdate_invoicesharing (p_import_key IN NUMBER)
AS
v_prs_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE;
v_fin_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE;
CURSOR cfactuurregel_kostensoort
IS
SELECT DISTINCT fin_factuur_key, factuurnr, fin_factuurregel_key, kenmerk1, fac_imp_file_index
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key;
BEGIN
FOR rc IN cfactuurregel_kostensoort
LOOP
BEGIN
-- Dan gaan we op zoek of de kostensoort aangeleverd door InvoiceSharing, wel bestaat in Facilitor, zo nee, dan laten we die onbekende kostensoort op regelnivo LEEG
SELECT MAX(prs_kostensoort_key)
INTO v_prs_kostensoort_key
FROM prs_kostensoort
WHERE prs_kostensoort_upper = UPPER(rc.kenmerk1);
IF v_prs_kostensoort_key IS NOT NULL
THEN
-- We hebben een geldige kostensoort van InvoiceSharing ontvangen, die gaan we zetten.
-- Wel nog ff checken of deze kostensoort al bij factuur staat, want dan hoeven we dit op factuurregel niet te zetten (dan neemt die de kostensoort van factuur 'over')
SELECT COALESCE(f.prs_kostensoort_key,-1)
INTO v_fin_kostensoort_key
FROM fin_factuur f, fin_factuurregel fr
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_factuurregel_key = rc.fin_factuurregel_key;
IF v_fin_kostensoort_key <> v_prs_kostensoort_key
THEN
-- De kostensoort is NIET dezelfde als bij factuur, dus we gaan hem op factuurregel nivo zetten.
UPDATE fin_factuurregel
SET prs_kostensoort_key = v_prs_kostensoort_key
WHERE fin_factuurregel_key = rc.fin_factuurregel_key;
END IF;
ELSE
-- STPH#38624: als er GEEN of een FOUTE/ONBEKENDE kostensoort bij de import wordt meegegeven, dat dan de status op "Ingevoerd" terug wordt gezet.
UPDATE fin_factuur
SET fin_factuur_statuses_key = 2
WHERE fin_factuur_key = (SELECT fin_factuur_key FROM fin_factuurregel fr WHERE fr.fin_factuurregel_key = rc.fin_factuurregel_key);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Van factuur met key ' || rc.fin_factuur_key || ' is de kostensoort niet verwerkt (regel ' || rc.fac_imp_file_index || ')',
'Factuurnr:' || rc.factuurnr || ' / Kostensoort: ' || rc.kenmerk1
);
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE stph_update_invoicesharing (p_import_key IN NUMBER)
AS
BEGIN
-- Standaard FCLT verwerk import facturen
fac_update_factuur (p_import_key);
stph_postupdate_invoicesharing(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE stph_import_afasonline (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
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;6;4;3;1;' ||
'2;0;0;0;0;10;0;8;0;5;' ||
'7;11;0;0;0;0;12;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'"Roepnaam";"Voorletters";"Tussenvoegsel";"Achternaam";"Persnr.";"Afdnr.";"Functie";"Email";"Mobile";"Telefoon";"Loginnaam";"Kostenplaats"'
);
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 stph_import_afasonline;
/
CREATE OR REPLACE PROCEDURE stph_update_afasonline (
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_nr, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_nr IS NULL
AND p.prs_perslid_verwijder IS NULL
ORDER BY 2;
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 300
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;
-- 'NR' betekent dat op basis van personeelsNummeR wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'NR', 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;
STPH_post_update_afasonline (p_import_key);
END stph_update_afasonline;
/
CREATE OR REPLACE PROCEDURE stph_post_update_afasonline (p_import_key IN NUMBER)
AS
v_kostenplaats_key_perslid NUMBER(10);
v_kostenplaats_key_afdeling NUMBER(10);
v_prs_afdeling_key NUMBER(10);
CURSOR c_perslid_kpn_kenmerk
IS
SELECT prs_perslid_nr, prs_kenmerk1, prs_perslid_naam, prs_afdeling_naam
FROM fac_imp_perslid;
BEGIN
FOR rc IN c_perslid_kpn_kenmerk
LOOP
BEGIN
-- Kostenplaats die als kenmerk is meegegeven bij de persoon
SELECT MAX(prs_kostenplaats_key)
INTO v_kostenplaats_key_perslid
FROM prs_kostenplaats
WHERE prs_kostenplaats_upper = UPPER(rc.prs_kenmerk1)
AND prs_kostenplaats_verwijder IS NULL;
IF v_kostenplaats_key_perslid IS NULL
THEN
-- Kostenplaats bij de persoon (vanuit AFAS) staat niet in Facilitor, persoon blijft aan de afdeling gekoppeld volgens AFAS (dus niet naar evt. 'fictieve' afdeling).
fac.imp_writelog (p_import_key,
'W',
'Kostenplaats van persoon' || rc.prs_perslid_nr || ' is NIET gevonden)',
'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam
);
ELSE
-- Kostenplaats record bij de persoon is gevonden,
-- Nu eerst de kostenplaats van de afdeling bepalen
SELECT MAX(a.prs_kostenplaats_key)
INTO v_kostenplaats_key_afdeling
FROM prs_afdeling a, prs_perslid p
WHERE p.prs_perslid_nr = rc.prs_perslid_nr
AND p.prs_perslid_verwijder IS NULL
AND a.prs_afdeling_key = p.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL;
-- Als deze afwijkt van de kostenplaats van de afdeling waar persoon onder valt, dan persoon verhuizen naar die fictieve afdeling
IF v_kostenplaats_key_afdeling IS NOT NULL
THEN
-- Afdeling heeft kostenplaats, nu vergelijken met die van persoon
-- Indien ongelijk, dan zoek de fictieve afdeling, want daar persoon aan koppelen.
IF v_kostenplaats_key_perslid <> v_kostenplaats_key_afdeling
THEN
-- Zoek de eerste afdeling (MAX) die kostenplaats van persoon heeft, daar gaat persoon onder vallen.
SELECT MAX(a.prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_afdeling a
WHERE a.prs_kostenplaats_key = v_kostenplaats_key_perslid
AND a.prs_afdeling_verwijder IS NULL;
IF v_prs_afdeling_key IS NOT NULL
THEN
UPDATE prs_perslid p
SET p.prs_afdeling_key = v_prs_afdeling_key
WHERE p.prs_perslid_nr = rc.prs_perslid_nr
AND p.prs_perslid_verwijder IS NULL;
END IF;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Post update bij persoon' || rc.prs_perslid_nr || ' is NIET volledig uitgevoerd )',
'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam
);
END;
END LOOP;
END;
/
CREATE OR REPLACE VIEW STPH_V_RAP_CATERING
(
RES_RESERVERING_KEY,
RES_RSV_RUIMTE_VOLGNR,
RES_RESERVERING,
RES_RSV_RUIMTE_KEY,
RES_RUIMTE_KEY,
RES_RUIMTE_NR,
ALG_LOCATIE_CODE,
ALG_LOCATIE_OMSCHRIJVING,
ALG_GEBOUW_CODE,
ALG_GEBOUW_NAAM,
ALG_VERDIEPING_VOLGNR,
ALG_VERDIEPING_OMSCHRIJVING,
ALG_RUIMTE_NR,
ALG_RUIMTE_OMSCHRIJVING,
RES_OPSTELLING_KEY,
RES_OPSTELLING_OMSCHRIJVING,
RES_RSV_RUIMTE_VAN,
RES_RSV_RUIMTE_OMSCHRIJVING,
RES_RSV_RUIMTE_OPMERKING,
RES_RSV_RUIMTE_BEZOEKERS,
RES_STATUS_FO_KEY,
RES_STATUS_BO_KEY,
RES_RSV_ARTIKEL_LEVERING,
DATUM,
TIJD,
AANTAL,
RES_ARTIKEL_KEY,
ARTIKELNR,
ARTIKELOMS,
INS_DISCIPLINE_KEY,
CATALOGUS,
RES_RSV_ARTIKEL_PRIJS,
RES_ARTIKEL_PRIJS,
EENHEIDSPRIJS,
TOTAALPRIJS,
CONTACT_NAAM,
CONTACT_TUSSENVOEGSEL,
CONTACT_VOORLETTERS,
CONTACT_VOORNAAM,
CONTACT_GESLACHT,
CONTACT_EMAIL,
CONTACT_TELEFOONNR,
CONTACT_MOBIEL,
HOST_NAAM,
HOST_TUSSENVOEGSEL,
HOST_VOORLETTERS,
HOST_VOORNAAM,
HOST_GESLACHT,
HOST_EMAIL,
HOST_TELEFOONNR,
HOST_MOBIEL,
PRS_KOSTENPLAATS_NR,
PRS_KOSTENSOORT_OMS,
DATUM_GEREGISTREERD,
LAST_MINUTE,
RUIMTE_OMSCHRIJVING,
AANVRAGER,
DAG,
SORT
)
AS
SELECT rr.res_reservering_key,
rr.res_rsv_ruimte_volgnr,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr,
rr.res_rsv_ruimte_key,
r.res_ruimte_key,
r.res_ruimte_nr,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
g.alg_gebouw_code,
g.alg_gebouw_naam,
v.alg_verdieping_volgnr,
v.alg_verdieping_omschrijving,
ar.alg_ruimte_nr,
ar.alg_ruimte_omschrijving,
op.res_opstelling_key,
op.res_opstelling_omschrijving,
rr.res_rsv_ruimte_van,
rr.res_rsv_ruimte_omschrijving,
rr.res_rsv_ruimte_opmerking,
rr.res_rsv_ruimte_bezoekers,
rr.res_status_fo_key,
rr.res_status_bo_key,
ra.res_rsv_artikel_levering,
TO_CHAR (ra.res_rsv_artikel_levering, 'DD-MM-YYYY')
datum,
TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI')
tijd,
ra.res_rsv_artikel_aantal
aantal,
a.res_artikel_key,
a.res_artikel_nr
artikelnr,
a.res_artikel_omschrijving
artikeloms,
d.ins_discipline_key,
d.ins_discipline_omschrijving
catalogus,
ra.res_rsv_artikel_prijs,
a.res_artikel_prijs,
a.res_artikel_prijs
eenheidsprijs,
res.getartikelprijs (ra.res_rsv_artikel_key)
totaalprijs,
c.prs_perslid_naam
contact_naam,
c.prs_perslid_tussenvoegsel
contact_tussenvoegsel,
c.prs_perslid_voorletters
contact_voorletters,
c.prs_perslid_voornaam
contact_voornaam,
DECODE (c.prs_perslid_geslacht, 0, 'V', 1, 'M', '')
contact_geslacht,
c.prs_perslid_email
contact_email,
c.prs_perslid_telefoonnr
contact_telefoonnr,
c.prs_perslid_mobiel
contact_mobiel,
h.prs_perslid_naam
host_naam,
h.prs_perslid_tussenvoegsel
host_tussenvoegsel,
h.prs_perslid_voorletters
host_voorletters,
h.prs_perslid_voornaam
host_voornaam,
DECODE (h.prs_perslid_geslacht, 0, 'V', 1, 'M', '')
host_geslacht,
h.prs_perslid_email
host_email,
h.prs_perslid_telefoonnr
host_telefoonnr,
h.prs_perslid_mobiel
host_mobiel,
k.prs_kostenplaats_nr,
ks.prs_kostensoort_oms,
rr.res_rsv_ruimte_aanmaak,
DECODE (TRUNC (ra.res_rsv_artikel_levering),
TRUNC (rr.res_rsv_ruimte_aanmaak), 'Last Minute!',
''),
COALESCE (r.res_ruimte_nr, ar.alg_ruimte_omschrijving),
cn.prs_perslid_naam_friendly,
DECODE (TRUNC (ra.res_rsv_artikel_levering),
TRUNC (SYSDATE), 'Vandaag',
TRUNC (SYSDATE) + 1, 'Morgen',
'Onbekend'),
( rr.res_reservering_key
|| '/'
|| rr.res_rsv_ruimte_volgnr
|| '_'
|| TO_CHAR (ra.res_rsv_artikel_levering, 'DD-MM-YYYY')
|| '_'
|| TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI'))
FROM res_rsv_artikel ra,
res_artikel a,
res_discipline d,
res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_opstelling op,
res_ruimte r,
alg_ruimte ar,
alg_verdieping v,
alg_gebouw g,
alg_locatie l,
prs_perslid c,
prs_v_perslid_fullnames cn,
prs_kostenplaats k,
prs_kostensoort ks,
prs_perslid h
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND a.res_artikel_key = ra.res_artikel_key
AND d.ins_discipline_key = a.res_discipline_key
AND d.ins_discipline_key IN (36, 841, 881) -- Catering catalogi: Catering, Koffie&Thee, Lunch
AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)
AND ro.res_ruimte_key = r.res_ruimte_key(+)
AND ro.res_opstelling_key = op.res_opstelling_key(+)
AND rr.alg_ruimte_key = ar.alg_ruimte_key(+)
AND ar.alg_verdieping_key = v.alg_verdieping_key(+)
AND v.alg_gebouw_key = g.alg_gebouw_key(+)
AND g.alg_locatie_key = l.alg_locatie_key(+)
AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key
AND c.prs_perslid_key = cn.prs_perslid_key
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND d.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rr.res_rsv_ruimte_host_key = h.prs_perslid_key
AND rr.res_rsv_ruimte_dirtlevel = 0;
------ 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