Files
Customer/DVON/dvon.sql
Maarten van der Heide 29aa77c157 Script header/footer formaat
svn path=/Customer/trunk/; revision=57204
2022-09-08 13:20:52 +00:00

6610 lines
266 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for DVON.
DEFINE thisfile = 'DVON.SQL'
DEFINE dbuser = '^FMD'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
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 ------
-- DJIN#57592: Anonimiseer()-functie zoals aangeroepen vanuit min-, med- en
-- max-script tbv. anonimiseren dump.
-- Moet DJIN_anonimiseer() heten en dus niet DVON_anonimiseer()!
CREATE OR REPLACE PROCEDURE djin_anonimiseer (p_incl_nodelays IN BOOLEAN, -- TRUE=Geen delay, dus alles direct en toekomstig!
p_incl_oslogins IN BOOLEAN,
p_incl_tracking IN BOOLEAN)
AS
c_oud_medewerker VARCHAR2 (100) := 'Inactieve medewerker';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_datum DATE;
-- SUBPROC
PROCEDURE prs_anonimiseer
AS
v_count_upd NUMBER (10);
v_count NUMBER (10);
v_tracking_oms VARCHAR2 (2048);
CURSOR c1
IS
SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_naam || '|' || p.prs_perslid_email || '] ' aanduiding,
p.prs_perslid_key
FROM prs_perslid p
WHERE (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') -- ' tbv. opmaak
AND p.prs_perslid_oslogin2 IS NULL
AND p.prs_perslid_apikey IS NULL -- Voor de zekerheid!
AND COALESCE (p.prs_perslid_login, p.prs_perslid_aanmaak) < ADD_MONTHS (SYSDATE, -12) -- Een jaar niet ingelogd!
AND (p.prs_perslid_verwijder IS NULL OR p.prs_perslid_upper != UPPER (c_oud_medewerker))
AND NOT EXISTS (SELECT 1 -- Geen actuele verplichtingen!
FROM prs_v_verplichting_keys
WHERE prs_perslid_key = p.prs_perslid_key)
ORDER BY 2;
CURSOR c2 (p_datum DATE)
IS
SELECT t.fac_tracking_key, t.fac_tracking_oms,
LENGTH (REPLACE (t.fac_tracking_oms || 'x', ' ', '')) - LENGTH (REPLACE (TRANSLATE (t.fac_tracking_oms || 'x', '@', ' '), ' ', '')) aant_email
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_tracking_datum < ADD_MONTHS (p_datum, -12)
AND INSTR (t.fac_tracking_oms, '@') > 0
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND (sn.fac_srtnotificatie_code LIKE '%MAI' OR sn.fac_srtnotificatie_code LIKE '%MA')
ORDER BY 1;
BEGIN
/* Vraag staat uit of dit voor DVON net als voor DJIN moet gebeuren (JK op 05-06-19 per mail gevraagd)!
v_errormsg := 'Fout anonimiseren PRS/Medewerkers';
v_count_upd := 0;
FOR rec IN c1
LOOP
BEGIN
UPDATE prs_perslid
SET prs_perslid_naam = c_oud_medewerker,
prs_perslid_tussenvoegsel = NULL,
prs_perslid_voorletters = NULL,
prs_perslid_voornaam = NULL,
prs_perslid_initialen = NULL,
prs_perslid_geslacht = NULL,
prs_perslid_nr = NULL,
prs_perslid_telefoonnr = NULL,
prs_perslid_mobiel = NULL,
prs_perslid_email = NULL,
prs_perslid_oslogin = NULL, -- prs_perslid_oslogin2 = NULL
prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key;
IF MOD (v_count_upd, 1000) = 0 THEN COMMIT; END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('DJIN_ANONIMISEER', 'W', rec.aanduiding || v_errormsg, '');
COMMIT;
END;
END LOOP;
fac.writelog ('DJIN_ANONIMISEER', 'S', 'Medewerkers/#geanonimiseerd: ' || TO_CHAR (v_count_upd), '');
COMMIT;
*/
-- Wis afgesproken tracking als p_incl_tracking=TRUE!
IF p_incl_tracking
THEN
v_datum := TO_DATE ('31122099', 'ddmmyyyy');
ELSE
v_datum := SYSDATE;
END IF;
-- FCLT#56224: Als een gebruiker via SAML automatisch wordt aangemaakt,
-- dan wordt er bij die persoon getrackt:
-- Gebruiker 'Aaa Bbb' aangemaakt met key 999 voor idp 'XXX'
v_errormsg := 'Fout anonimiseren PRSUPD-tracking';
UPDATE fac_tracking
SET fac_tracking_oms = 'Gebruiker aangemaakt/gewijzigd'
WHERE fac_srtnotificatie_key = 84 -- PRSUPD
AND fac_tracking_oms IS NOT NULL
AND fac_tracking_datum < ADD_MONTHS (v_datum, -12);
COMMIT;
v_errormsg := 'Fout anonimiseren MLDBEH-tracking';
UPDATE fac_tracking
SET fac_tracking_oms = 'Behandelaar is toegewezen'
WHERE fac_srtnotificatie_key = 52 -- MLDBEH
AND fac_tracking_datum < ADD_MONTHS (v_datum, -12);
COMMIT;
v_errormsg := 'Fout anonimiseren ORDSNT/SNX-tracking';
UPDATE fac_tracking
SET fac_tracking_oms = 'Opdracht is verstuurd'
WHERE fac_srtnotificatie_key IN (73, 74) -- ORDSNT/SNX
AND fac_tracking_datum < ADD_MONTHS (v_datum, -12);
COMMIT;
v_errormsg := 'Fout anonimiseren INSOUT-tracking';
UPDATE fac_tracking
SET fac_tracking_oms = 'Object is uitgegeven'
WHERE fac_srtnotificatie_key = 108 -- INSOUT
AND fac_tracking_datum < ADD_MONTHS (v_datum, -12);
COMMIT;
v_errormsg := 'Fout anonimiseren mail-tracking';
v_count_upd := 0;
v_tracking_oms := '';
FOR rec IN c2 (v_datum)
LOOP
BEGIN
v_count := 0;
v_tracking_oms := rec.fac_tracking_oms;
WHILE v_count < rec.aant_email
LOOP
v_tracking_oms := SUBSTR (v_tracking_oms, 1, INSTR (SUBSTR (v_tracking_oms, 1, INSTR (v_tracking_oms, '@')), ' ', -1))
|| SUBSTR (v_tracking_oms, INSTR (v_tracking_oms, '@') + 1);
v_count := v_count + 1;
END LOOP;
UPDATE fac_tracking
SET fac_tracking_oms = v_tracking_oms
WHERE fac_tracking_key = rec.fac_tracking_key;
v_count_upd := v_count_upd + 1;
IF MOD (v_count_upd, 1000) = 0 THEN COMMIT; END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('DJIN_ANONIMISEER', 'W', v_errormsg, '');
COMMIT;
END;
END LOOP;
fac.writelog ('DJIN_ANONIMISEER', 'S', 'Trackregels/#geanonimiseerd: ' || TO_CHAR (v_count_upd), '');
COMMIT;
END;
BEGIN
-- Anonimiseer medewerkers+trackregels. In Productie beide na 1 jaar en bij
-- anonimisering tbv. Test-omgevingen (als p_incl_tracking=TRUE) dan alleen
-- de tracking soms per direct (en toekomstig)!
prs_anonimiseer ();
-- Bij anonimisering tbv. Test-omgevingen (als p_incl_nodelays=TRUE) altijd
-- uitvoeren!
v_errormsg := 'Fout anonimiseren p_incl_nodelays=TRUE';
IF p_incl_nodelays
THEN
-- FCLT#56224: Leeg buffer-tabel, daarin vaak ook persoonsgegevens, etc.!
DELETE FROM fac_imp_file;
-- Wis naam- en telefoon-velden van medewerkers!
UPDATE prs_perslid
SET prs_perslid_naam = '[Geanonimiseerd]',
prs_perslid_tussenvoegsel = NULL,
prs_perslid_voorletters = NULL,
prs_perslid_voornaam = NULL,
prs_perslid_telefoonnr = NULL,
prs_perslid_mobiel = NULL
WHERE (prs_perslid_verwijder IS NULL OR prs_perslid_upper != UPPER (c_oud_medewerker));
COMMIT;
END IF;
-- Wis email- en oslogin-velden van medewerkers als p_incl_oslogins=TRUE
-- behalve van de gebruikers in '_Admin'-groepen (alleen bij anonimisering
-- tbv. Test-omgevingen)!
v_errormsg := 'Fout anonimiseren p_incl_oslogins=TRUE';
IF p_incl_oslogins
THEN
UPDATE prs_perslid p
SET p.prs_perslid_email = NULL,
p.prs_perslid_oslogin = NULL,
p.prs_perslid_oslogin2 = NULL
WHERE NOT EXISTS
(SELECT 1
FROM fac_groep g, fac_gebruikersgroep gg
WHERE g.fac_groep_upper LIKE '_ADMIN%'
AND g.fac_groep_key = gg.fac_groep_key
AND gg.prs_perslid_key = p.prs_perslid_key);
COMMIT;
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.writelog ('DJIN_ANONIMISEER', 'E', 'Proces afgebroken!', v_errormsg);
END djin_anonimiseer;
/
CREATE OR REPLACE PROCEDURE dvon_import_prs (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_newline FAC_IMP_FILE.FAC_IMP_FILE_LINE%TYPE;
BEGIN
BEGIN
SELECT fac_imp_file_line
INTO v_newline
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
IF v_newline LIKE
CHR (TO_NUMBER ('EF', 'xx'))
|| CHR (TO_NUMBER ('BB', 'xx'))
|| CHR (TO_NUMBER ('BF', 'xx'))
|| '%'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.'
);
v_newline := SUBSTR (v_newline, 4);
END IF;
-- Verwijder de dubbele quotes
v_newline := REPLACE (v_newline, '"');
UPDATE fac_imp_file
SET fac_imp_file_line = v_newline
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
EXCEPTION WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij controle op Byte Order Mark',
''
);
END;
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;5;2;0;3;'||
'0;0;0;0;0;0;0;4;0;0;'||
'5;1;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'accountnaam;achternaam;voornaam;e-mail;afdeling'
);
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving = 'Onbekend'
WHERE fac_import_key = p_import_key;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END dvon_import_prs;
/
CREATE OR REPLACE PROCEDURE dvon_update_prs (
p_import_key IN NUMBER
) IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_oslogin = i.prs_perslid_oslogin(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_oslogin IS NOT NULL
AND i.prs_perslid_oslogin IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin NOT LIKE '%_%'
AND p.prs_perslid_oslogin2 IS NULL
ORDER BY 2;
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 150
THEN
fac.imp_writelog (p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count) || ')',
'Zie Specificatie'
);
RETURN;
END IF;
-- 'LOGIN' betekent dat op basis van oslogin wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'LOGIN', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
END dvon_update_prs;
/
-- Custom imports hier
-- Catalogusartikelen import, gebaseerd op de FIP uit FAC_PACF.SRC incl kenmerken van bestelregel
CREATE OR REPLACE PROCEDURE DVON_IMPORT_CATARTIKEL (
p_import_key IN NUMBER
)
IS
p_discipline_key NUMBER(10);
p_bedrijf_key NUMBER(10);
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_discipline_omschrijving VARCHAR2 (255); -- Catalogus naam (moet al bestaan)
v_bedrijf_naam VARCHAR2 (255); -- Leverancier
v_srtdeel_nr VARCHAR2 (255); -- Artikelnr
v_srtgroep_omschrijving VARCHAR2 (255); -- Artikelgroep
v_srtdeel_omschrijving VARCHAR2 (255); -- Artikelomschrijving
v_srtdeel_prijs VARCHAR2 (255); -- v_srtdeel_prijs = 0
v_srtdeel_eenheid VARCHAR2 (255); -- Stuk / Pak / etc.
v_srtdeel_image VARCHAR2 (255); -- Picture
v_srtdeel_wijzigdagen VARCHAR2 (255); -- Behouden
v_srtdeel_annuleerdagen VARCHAR2 (255); -- Behouden
v_srtdeel_vervaldatum VARCHAR2 (255); -- DueDate
v_srtdeel_minimumvoorraad VARCHAR2 (255); -- Minimumvoorraad
v_srtdeel_maximumvoorraad VARCHAR2 (255); -- Maximumvoorraad
v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000
v_srtdeel_objectsrtcode VARCHAR2 (255); -- Objectsoortcode
v_srtdeel_kenmerksrt VARCHAR2 (255); -- Kenmerksoort (moet deze al bestaan? - Ja, maat)
v_srtdeel_volgnr VARCHAR2 (255); -- Volgnummer
v_srtdeel_verplicht VARCHAR2 (255); -- Verplicht
v_srtdeel_groep VARCHAR2 (255); -- Kenmerkgroep
-- Overige velden
v_discipline_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_bes_staffeltabel_key NUMBER (10);
CURSOR c1
IS
SELECT fac_imp_file_line,
LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, '')))
regellengte
FROM FAC_IMP_FILE
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
SELECT ins_discipline_key, prs_bedrijf_key
INTO p_discipline_key, p_bedrijf_key
FROM fac_import fi, fac_import_app fia
WHERE fi.fac_import_key = p_import_key
AND fi.fac_import_app_key = fia.fac_import_app_key;
-- Eerst opruiming
-- LET OP: we ondersteunen geen multi-variant meer
DELETE FROM DVON_IMP_CATARTIKEL;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '';
v_errorhint := 'Fout inlezen importregel';
v_newline := rec.fac_imp_file_line;
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr);
fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_image);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimumvoorraad);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_maximumvoorraad);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_objectsrtcode);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_kenmerksrt);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_volgnr);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_verplicht);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_groep);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle
-- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen").
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS'
AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID'
AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE'
AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN'
AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE'
AND UPPER (TRIM (v_srtdeel_minimumvoorraad)) = 'MINIMUMVOORRAAD'
AND UPPER (TRIM (v_srtdeel_maximumvoorraad)) = 'MAXIMUMVOORRAAD'
AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING'
AND UPPER (TRIM (v_srtdeel_objectsrtcode)) = 'OBJECTSOORTCODE'
AND UPPER (TRIM (v_srtdeel_kenmerksrt)) = 'KENMERKSOORT'
AND UPPER (TRIM (v_srtdeel_volgnr)) = 'VOLGNUMMER'
AND UPPER (TRIM (v_srtdeel_verplicht)) = 'VERPLICHT'
AND UPPER (TRIM (v_srtdeel_groep)) = 'KENMERKGROEP'
THEN
header_is_valid := 1;
END IF;
ELSIF rec.regellengte > 1 -- Lege regels overslaan!
THEN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| TRIM (v_discipline_omschrijving)
|| '|'
|| TRIM (v_bedrijf_naam)
|| '|'
|| TRIM (v_srtdeel_nr)
|| '] ';
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint :=
'Catalogus onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_discipline_key
INTO v_discipline_key
FROM INS_TAB_DISCIPLINE
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (v_discipline_omschrijving)
AND ins_discipline_module = 'BES'
AND ins_discipline_verwijder IS NULL;
v_bedrijf_naam := TRIM (v_bedrijf_naam);
v_errorhint :=
'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam)
AND COALESCE (p_bedrijf_key, prs_bedrijf_key) =
prs_bedrijf_key -- Import bedoelt voor bedrijf?
AND prs_bedrijf_verwijder IS NULL;
v_errorhint := 'Fout bij controleren importregel';
v_srtdeel_nr := TRIM (v_srtdeel_nr);
IF LENGTH (v_srtdeel_nr) > 32
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelnummer te lang',
'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF LENGTH (v_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Groepomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
-- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL!
v_srtdeel_prijs := TRIM (v_srtdeel_prijs);
IF v_srtdeel_prijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_prijs) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige prijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid);
IF LENGTH (v_srtdeel_eenheid) > 30
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Eenheid te lang',
'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_image := TRIM (v_srtdeel_image);
IF LENGTH (v_srtdeel_image) > 255
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Imagenaam te lang',
'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum);
IF v_srtdeel_vervaldatum IS NOT NULL
AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige vervaldatum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
IF v_srtdeel_wijzigdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0
OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal wijzigdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL!
v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen);
IF v_srtdeel_annuleerdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0
OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal annuleerdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking);
IF LENGTH (v_srtdeel_opmerking) > 2000
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Opmerking te lang',
'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
IF v_ongeldig = 0
THEN
v_errorhint := 'Fout toevoegen importregel';
INSERT INTO DVON_IMP_CATARTIKEL (
fac_import_key,
ins_discipline_key,
prs_bedrijf_key,
ins_srtdeel_nr,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_srtdeel_prijs,
ins_srtdeel_eenheid,
ins_srtdeel_image,
ins_srtdeel_vervaldatum,
ins_srtdeel_minimumvoorraad,
ins_srtdeel_maximumvoorraad,
ins_srtdeel_wijzigdagen,
ins_srtdeel_annuleerdagen,
ins_srtdeel_opmerking,
ins_kenmerk_objectsrtcode,
ins_kenmerk_kenmerksrt,
ins_kenmerk_volgnr,
ins_kenmerk_verplicht,
ins_kenmerk_groep )
VALUES (
p_import_key,
v_discipline_key,
v_bedrijf_key,
SUBSTR (v_srtdeel_nr, 1, 32),
SUBSTR (v_srtgroep_omschrijving, 1, 60),
SUBSTR (v_srtdeel_omschrijving, 1, 100),
COALESCE (fac.safe_to_number (v_srtdeel_prijs), 0),
SUBSTR (v_srtdeel_eenheid, 1, 30),
SUBSTR (v_srtdeel_image, 1, 255),
fac.safe_to_date (v_srtdeel_vervaldatum,
'yyyymmdd'),
fac.safe_to_number (v_srtdeel_minimumvoorraad),
fac.safe_to_number (v_srtdeel_maximumvoorraad),
fac.safe_to_number (v_srtdeel_wijzigdagen),
fac.safe_to_number (v_srtdeel_annuleerdagen),
SUBSTR (v_srtdeel_opmerking, 1, 2000),
SUBSTR (v_srtdeel_objectsrtcode, 1, 10),
SUBSTR (v_srtdeel_kenmerksrt, 1, 50),
fac.safe_to_number (v_srtdeel_volgnr),
fac.safe_to_number (v_srtdeel_verplicht),
fac.safe_to_number (v_srtdeel_groep)
);
v_count_import := v_count_import + 1;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inlezen catalogus artikelen afgebroken!');
END DVON_IMPORT_CATARTIKEL;
/
-- Update artikelen
CREATE OR REPLACE PROCEDURE DVON_UPDATE_CATARTIKEL (
p_import_key IN NUMBER
)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_disc_oms VARCHAR2 (100);
v_bedr_naam VARCHAR2 (100);
-- Update artikelen
PROCEDURE l_update_catartikel (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
CURSOR c_updsrtdeel
IS
SELECT s.bes_srtdeel_key, d.*
FROM dvon_imp_catartikel d, bes_srtgroep g, bes_srtdeel s
WHERE fac_import_key = p_import_key
AND d.ins_discipline_key = g.ins_discipline_key
-- AND d.prs_bedrijf_key = cbedr_key
-- AND g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) = UPPER (d.ins_srtdeel_nr)
-- AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL;
CURSOR c_inssrtdeel
IS
SELECT d.*
FROM dvon_imp_catartikel d
WHERE fac_import_key = p_import_key
-- AND d.ins_discipline_key = cdisc_key
-- AND d.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep g, bes_srtdeel s
WHERE g.ins_discipline_key = d.ins_discipline_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) =
UPPER (d.ins_srtdeel_nr)
-- AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL);
ccount NUMBER (10);
l_srtgroep_key NUMBER (10);
l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE;
l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE;
l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
-- l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE;
-- l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE;
l_minimumvoorraad bes_srtdeel.bes_srtdeel_voorraadmin%TYPE;
l_maximumvoorraad bes_srtdeel.bes_srtdeel_voorraadmax%TYPE;
l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE;
l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE;
l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE;
BEGIN
-- UPDATE SRTDEEL
ccount := 0;
FOR rec IN c_updsrtdeel
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = rec.ins_discipline_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg :=
'Fout bij bepalen huidige artikel-velden '
|| rec.ins_srtdeel_nr;
-- Tbv. logging de oude waarden opzoeken.
SELECT bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL),
-- bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL),
-- bes_srtdeel_veelvoud,
-- bes_srtdeel_minimum,
bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking
INTO l_omschrijving,
l_prijs,
-- l_inkprijs,
-- l_veelvoud,
-- l_minimum,
-- l_minimum,
l_minimumvoorraad,
l_maximumvoorraad,
l_wijzigdagen,
l_annuleerdagen,
l_opmerking
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr;
-- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs.
-- Later nog eens TODO
UPDATE bes_srtdeel
SET bes_srtgroep_key = l_srtgroep_key,
bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
bes_srtdeel_image = rec.ins_srtdeel_image,
-- bes_srtdeel_btw = rec.ins_srtdeel_btw,
bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid,
bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
-- bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud,
bes_srtdeel_voorraadmin = rec.ins_srtdeel_minimumvoorraad,
bes_srtdeel_voorraadmax = rec.ins_srtdeel_maximumvoorraad,
-- bes_staffeltabel_key = rec.bes_staffeltabel_key,
bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen,
bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking,
ins_srtdeel_key = (select ins_srtdeel_key
from ins_srtdeel i
where i.ins_srtdeel_code_upper = UPPER (rec.ins_kenmerk_objectsrtcode))
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
UPDATE bes_kenmerk
SET bes_srtkenmerk_key = (select bes_srtkenmerk_key
from bes_srtkenmerk b
where b.bes_srtkenmerk_upper = UPPER (rec.ins_kenmerk_kenmerksrt)),
-- bes_kenmerk_type = 'I',
-- bes_kenmerk_niveau = 'S',
bes_kenmerk_verplicht = rec.ins_kenmerk_verplicht,
bes_kenmerk_groep = rec.ins_kenmerk_groep,
bes_kenmerk_volgnummer = rec.ins_kenmerk_volgnr
WHERE bes_srtinstallatie_key = l_bes_srtdeel_key;
IF l_omschrijving <> rec.ins_srtdeel_omschrijving
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Omschrijving '
|| l_omschrijving
|| ' -> '
|| rec.ins_srtdeel_omschrijving
);
END IF;
bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, 0);
IF l_prijs <> rec.ins_srtdeel_prijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs
);
END IF;
IF l_minimumvoorraad <> rec.ins_srtdeel_minimumvoorraad
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Miinimumvoorraad '
|| l_minimumvoorraad
|| ' -> '
|| rec.ins_srtdeel_minimumvoorraad
);
END IF;
IF l_maximumvoorraad <> rec.ins_srtdeel_maximumvoorraad
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Maximumvoorraad '
|| l_maximumvoorraad
|| ' -> '
|| rec.ins_srtdeel_maximumvoorraad
);
END IF;
IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Wijzigdagen '
|| l_wijzigdagen
|| ' -> '
|| rec.ins_srtdeel_wijzigdagen
);
END IF;
IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Annuleerdagen '
|| l_annuleerdagen
|| ' -> '
|| rec.ins_srtdeel_annuleerdagen
);
END IF;
IF l_opmerking <> rec.ins_srtdeel_opmerking
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_opmerking
|| ' is gewijzigd',
'Opmerking '
|| l_opmerking
|| ' -> '
|| rec.ins_srtdeel_opmerking
);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen bijgewerkt',
''
);
COMMIT;
-- INSERT SRTDEEL
ccount := 0;
FOR rec IN c_inssrtdeel
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = rec.ins_discipline_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr;
INSERT INTO bes_srtdeel (bes_srtgroep_key,
bes_srtdeel_nr,
bes_srtdeel_omschrijving,
bes_srtdeel_image,
-- bes_srtdeel_btw,
bes_srtdeel_eenheid,
bes_srtdeel_dimensie,
prs_bedrijf_key,
bes_srtdeel_vervaldatum,
-- bes_srtdeel_veelvoud,
bes_srtdeel_voorraadmin,
bes_srtdeel_voorraadmax,
-- bes_staffeltabel_key,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking,
ins_srtdeel_key)
VALUES (l_srtgroep_key,
rec.ins_srtdeel_nr,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_image,
-- rec.ins_srtdeel_btw,
rec.ins_srtdeel_eenheid,
0,
pbedr_key,
rec.ins_srtdeel_vervaldatum,
-- rec.ins_srtdeel_veelvoud,
rec.ins_srtdeel_minimumvoorraad,
rec.ins_srtdeel_minimumvoorraad,
-- rec.bes_staffeltabel_key,
rec.ins_srtdeel_wijzigdagen,
rec.ins_srtdeel_annuleerdagen,
rec.ins_srtdeel_opmerking,
(select i.ins_srtdeel_key
from ins_srtdeel i
where i.ins_srtdeel_code_upper = UPPER (rec.ins_kenmerk_objectsrtcode)))
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, 0);
INSERT INTO bes_kenmerk (bes_srtkenmerk_key,
bes_srtinstallatie_key,
bes_kenmerk_type,
bes_kenmerk_niveau,
bes_kenmerk_verplicht,
bes_kenmerk_groep,
bes_kenmerk_volgnummer)
VALUES ((select bes_srtkenmerk_key
from bes_srtkenmerk b
where b.bes_srtkenmerk_upper = UPPER (rec.ins_kenmerk_kenmerksrt)),
l_bes_srtdeel_key,
'I',
'S',
rec.ins_kenmerk_verplicht,
rec.ins_kenmerk_groep,
rec.ins_kenmerk_volgnr);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is toegevoegd',
''
);
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in importbestand';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen toegevoegd',
''
);
COMMIT;
END;
BEGIN
-- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn
FOR rec IN
(SELECT DISTINCT ins_discipline_key, prs_bedrijf_key
FROM dvon_imp_catartikel
WHERE fac_import_key = p_import_key)
LOOP
BEGIN
-- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen!
v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] ';
v_errormsg := 'Fout bepalen catalogus';
SELECT ins_discipline_omschrijving
INTO v_disc_oms
FROM ins_tab_discipline
WHERE ins_discipline_key = rec.ins_discipline_key;
v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] ';
v_errormsg := 'Fout bepalen bedrijf';
SELECT prs_bedrijf_naam
INTO v_bedr_naam
FROM prs_v_aanwezigbedrijf
WHERE prs_bedrijf_key = rec.prs_bedrijf_key;
fac.imp_writelog (
p_import_key,
'I',
'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam,
'discipline: '
|| rec.ins_discipline_key
|| ', bedrijf: '
|| rec.prs_bedrijf_key
);
COMMIT;
v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] ';
l_update_catartikel (rec.ins_discipline_key, rec.prs_bedrijf_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Verwerken catalogus afgebroken!');
END DVON_UPDATE_CATARTIKEL;
/
-- Objectsoorten import
CREATE OR REPLACE PROCEDURE DVON_IMPORT_OBJSRT (
p_import_key IN NUMBER
)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_key_objsrtkey VARCHAR2 (255); -- Key van bestaande objectsoort (alleen bij exports)
v_discipline_omschrijving VARCHAR2 (255); -- Discipline omschrijving (moet al bestaan)
v_srtgroep_omschrijving VARCHAR2 (255); -- Objectgroep naam (moet al bestaan)
v_srtdeel_code VARCHAR2 (255); -- Objectcode
v_srtdeel_omschrijving VARCHAR2 (255); -- Objectomschrijving
v_srtdeel_uitleenbaar VARCHAR2 (255); -- Uitleenbaar ja/nee
v_bedrijf_naam VARCHAR2 (255); -- Leverancier (kenmerk bij objectsoort)
v_srtdeel_vervaldatum VARCHAR2 (255); -- Vervaldatum object
v_srtkenmerk_naam VARCHAR2 (255); -- Kenmerksoort (moet al bestaan)
v_srtkenmerk_bewerkbij VARCHAR2 (255); -- Kenmerk bewerken bij object of objectsoort
v_srtkenmerk_volgnr VARCHAR2 (255); -- Volgnummer
v_srtkenmerk_verplicht VARCHAR2 (255); -- Verplicht
v_srtkenmerk_groep VARCHAR2 (255); -- Kenmerkgroep
v_file_index NUMBER;
-- Overige velden
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_leverancier_key NUMBER (10);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
-- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
-- discipline/groep/soort, volgt pas tijdens de update-fase)!
FUNCTION bepaal_srtkenmerk_key (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF fac.safe_to_number (v_kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_key = fac.safe_to_number (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
-- Eerst opruiming
BEGIN
DELETE FROM DVON_IMP_OBJSRT;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_key_objsrtkey);
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_uitleenbaar);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_naam);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_bewerkbij);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_volgnr);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_verplicht);
fac.imp_getfield (v_newline, c_delim, v_srtkenmerk_groep);
v_aanduiding :=
'['
|| v_discipline_omschrijving
|| '|'
|| v_srtgroep_omschrijving
|| '|'
|| v_srtdeel_code
|| '|'
|| v_srtdeel_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_key_objsrtkey)) = 'OBJSRTKEY'
AND UPPER (TRIM (v_discipline_omschrijving)) LIKE 'DISCIPLINEOMSCHRIJVING%'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEPSOORTOMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_code)) = 'OBJECTSOORTCODE'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OBJECTSOORTOMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_uitleenbaar)) = 'UITLEENBAAR'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'VERVALDATUM'
AND UPPER (TRIM (v_srtkenmerk_naam)) = 'KENMERKSOORT'
AND UPPER (TRIM (v_srtkenmerk_bewerkbij)) LIKE 'BEWERKEN%'
AND UPPER (TRIM (v_srtkenmerk_volgnr)) = 'VOLGNUMMER'
AND UPPER (TRIM (v_srtkenmerk_verplicht)) = 'VERPLICHT'
AND UPPER (TRIM (v_srtkenmerk_groep)) = 'GROEP'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_discipline_omschrijving :=
TRIM (v_discipline_omschrijving);
IF v_discipline_omschrijving IS NULL
OR LENGTH (v_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF v_srtgroep_omschrijving IS NULL
OR LENGTH (v_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortcode ongeldig';
v_srtdeel_code := TRIM (v_srtdeel_code);
IF v_srtdeel_code IS NULL OR LENGTH (v_srtdeel_code) > 10
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortomschrijving ongeldig';
v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF v_srtdeel_omschrijving IS NULL
OR LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint := 'Discipline onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_discipline_key
INTO v_discipline_key
FROM INS_TAB_DISCIPLINE
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (v_discipline_omschrijving)
AND ins_discipline_module = 'INS'
AND ins_discipline_verwijder IS NULL;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
v_errorhint :=
'Objectgroep onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE UPPER (ins_srtgroep_omschrijving) = UPPER (v_srtgroep_omschrijving)
AND ins_discipline_key = v_discipline_key
AND ins_srtgroep_verwijder IS NULL;
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE prs_bedrijf_naam_upper LIKE '%DIENST VERVOER%'
AND prs_bedrijf_verwijder IS NULL;
IF v_bedrijf_naam IS NOT NULL
THEN
SELECT f.fac_usrdata_key
INTO v_leverancier_key
FROM fac_usrdata f
WHERE UPPER (f.fac_usrdata_omschr) = UPPER (v_bedrijf_naam);
END IF;
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO DVON_IMP_OBJSRT (
fac_import_key,
ins_objsrt_key,
ins_discipline_key,
prs_bedrijf_key,
ins_srtgroep_key,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep
)
VALUES (
p_import_key,
v_key_objsrtkey,
v_discipline_key,
v_bedrijf_key,
v_srtgroep_key,
v_srtdeel_code,
v_srtdeel_omschrijving,
DECODE (v_srtdeel_uitleenbaar, 'ja', 1, NULL),
v_leverancier_key,
TO_DATE (v_srtdeel_vervaldatum, 'DD-MM-YYYY'),
v_srtkenmerk_naam,
v_srtkenmerk_bewerkbij,
v_srtkenmerk_volgnr,
DECODE (v_srtkenmerk_verplicht, 'ja', 1, NULL),
v_srtkenmerk_groep
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END DVON_IMPORT_OBJSRT;
/
CREATE OR REPLACE PROCEDURE DVON_UPDATE_OBJSRT (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_key,
ins_srtgroep_key,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep,
prs_bedrijf_key
FROM DVON_IMP_OBJSRT
WHERE ins_objsrt_key IS NULL;
-- GROUP BY ins_discipline_key,
-- ins_srtgroep_key,
-- UPPER (ins_srtdeel_code),
-- UPPER (ins_srtdeel_omschrijving);
CURSOR c2
IS
SELECT ins_objsrt_key,
ins_discipline_key,
ins_srtgroep_key,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_uitleenbaar,
ins_srtkenmerk_levkey,
ins_srtdeel_vervaldatum,
prs_bedrijf_key,
ins_srtkenmerk_naam,
ins_srtkenmerk_bewerkbij,
ins_srtkenmerk_volgnr,
ins_srtkenmerk_verplicht,
ins_srtkenmerk_groep
FROM DVON_IMP_OBJSRT
WHERE ins_objsrt_key IS NOT NULL;
-- GROUP BY ins_objsrt_key,
-- ins_discipline_key,
-- ins_srtgroep_key,
-- ins_srtdeel_code,
-- ins_srtdeel_omschrijving;
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
v_srtdeel_key NUMBER (10);
v_srtkenmerk_key NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND ins_discipline_key = rec.ins_discipline_key;
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND ins_srtgroep_key = rec.ins_srtgroep_key;
v_errormsg :=
'Fout bij toevoegen objectsoort ['
|| rec.ins_srtdeel_omschrijving
|| ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (rec.ins_srtkenmerk_naam);
IF ccount = 0
THEN
-- binding 17 betekent ruimtegebonden of persoonsgebonden
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_vervaldatum,
ins_srtdeel_uitleenbaar,
ins_srtdeel_binding,
prs_bedrijf_key)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_vervaldatum,
rec.ins_srtdeel_uitleenbaar,
17,
rec.prs_bedrijf_key)
RETURNING ins_srtdeel_key
INTO v_srtdeel_key;
INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
ins_srtinstallatie_key,
ins_kenmerk_niveau,
ins_kenmerk_bewerkniveau,
ins_kenmerk_wissen,
ins_kenmerk_volgnummer,
ins_kenmerk_verplicht)
VALUES (v_srtkenmerk_key,
DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', v_discipline_key,
'deel', v_srtdeel_key),
'S',
DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', 'S',
'deel', 'D'),
0,
rec.ins_srtkenmerk_volgnr,
rec.ins_srtkenmerk_verplicht);
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde
)
VALUES (v_srtdeel_key,
241, -- kenmerkkey van leverancier
rec.ins_srtkenmerk_levkey);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
FOR rec IN c2
LOOP
BEGIN
-- Bepaal de soort kenmerk key
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (rec.ins_srtkenmerk_naam);
UPDATE ins_srtdeel
SET ins_srtgroep_key = rec.ins_srtgroep_key,
ins_srtdeel_code = rec.ins_srtdeel_code,
ins_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
ins_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
ins_srtdeel_uitleenbaar = rec.ins_srtdeel_uitleenbaar,
prs_bedrijf_key = rec.prs_bedrijf_key
WHERE ins_srtdeel_key = rec.ins_objsrt_key
RETURNING ins_srtdeel_key INTO v_srtdeel_key;
UPDATE ins_kenmerk
SET ins_kenmerk_bewerkniveau = DECODE (rec.ins_srtkenmerk_bewerkbij,
'soort', 'S',
'deel', 'D'),
ins_kenmerk_volgnummer = rec.ins_srtkenmerk_volgnr,
ins_kenmerk_verplicht = rec.ins_srtkenmerk_verplicht
WHERE ins_srtinstallatie_key = v_srtdeel_key;
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = rec.ins_srtkenmerk_levkey
WHERE ins_deel_key = v_srtdeel_key
AND ins_kenmerk_key = 241
AND ins_kenmerkdeel_waarde != rec.ins_srtkenmerk_levkey;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- MAIN
BEGIN
-- add_kostensoort (p_import_key);
-- add_insdiscipline (p_import_key);
-- add_resdiscipline (p_import_key);
-- add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
-- add_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END DVON_UPDATE_OBJSRT;
/
CREATE OR REPLACE PROCEDURE dvon_import_orgkost (p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_bedrijf_naam VARCHAR2 (256);
v_afdeling_naam VARCHAR2 (256);
v_afdeling_naam_parent VARCHAR2 (256);
v_afdeling_omschrijving VARCHAR2 (256);
v_kostenplaats_nr VARCHAR2 (256); -- Overlap hier met import_kpn
v_kostenplaats_omschrijving VARCHAR2 (255);
v_kostenplaats_module VARCHAR2 (255);
v_kostenplaats_begin VARCHAR2 (255);
v_kostenplaats_begin_d DATE;
v_kostenplaats_eind VARCHAR2 (255);
v_kostenplaats_eind_d DATE;
v_kostenplaatsgrp_oms VARCHAR2 (255);
v_kostenplaatsgrp_key NUMBER (10);
v_perslid VARCHAR2 (255);
v_perslid_key NUMBER (10);
v_kostenplaats_limiet VARCHAR2 (255);
v_kostenplaats_limietperiode VARCHAR2 (255);
v_kostenplaats_extern VARCHAR2 (255);
v_kostenplaats_fiat VARCHAR2 (255);
v_fiatteur_1 VARCHAR2 (255);
v_fiatteur_1_key NUMBER (10);
v_fiatteur_2 VARCHAR2 (255);
v_fiatteur_2_key NUMBER (10);
v_fiatteur_3 VARCHAR2 (255);
v_fiatteur_3_key NUMBER (10);
v_kostenplaatsgrp_nr VARCHAR2 (255);
v_kostenplaatsgrp_limiet VARCHAR2 (255);
v_kostenplaatsgrp_limietp VARCHAR2 (255);
-- PRS_BEDRIJF
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM DVON_IMP_ORGKOST;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam_parent);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_module);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_begin);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_eind);
fac.imp_getfield (v_newline, c_fielddelimitor, v_perslid);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limiet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limietperiode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_extern);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_fiat);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_1);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_2);
fac.imp_getfield (v_newline, c_fielddelimitor, v_fiatteur_3);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_limiet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_limietp);
v_aanduiding := v_bedrijf_naam || '|' || v_afdeling_naam || '|' || v_afdeling_omschrijving || '|' || v_kostenplaats_nr || '|' || v_kostenplaats_omschrijving;
IF (header_is_valid = 0)
THEN
IF UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT'
AND UPPER (v_kostenplaats_nr) = 'KOSTENPLAATS'
AND UPPER (v_perslid) = 'BUDGETHOUDER'
AND UPPER (v_kostenplaats_fiat) = 'OPDRACHTENFIATTEREN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_bedrijf_naam := TRIM (v_bedrijf_naam);
IF LENGTH (v_bedrijf_naam) > 60
THEN
v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Bedrijf-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_bedrijf_naam || ']'
);
END IF;
--
v_afdeling_naam := TRIM (v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 15
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']'
);
END IF;
--
v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);
IF LENGTH (v_afdeling_naam_parent) > 15
THEN
v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']'
);
END IF;
--
v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);
IF LENGTH (v_afdeling_omschrijving) > 60
THEN
v_afdeling_omschrijving := SUBSTR (v_afdeling_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingsomschrijving is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_omschrijving || ']'
);
END IF;
--
v_kostenplaats_nr := TRIM (v_kostenplaats_nr);
IF LENGTH (v_kostenplaats_nr) > 30
THEN
v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Kostenplaats-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_kostenplaats_nr || ']'
);
END IF;
IF LENGTH (v_kostenplaats_omschrijving) > 60
THEN
v_kostenplaats_omschrijving := SUBSTR (v_kostenplaats_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenpaatsomschrijving is te lang',
'Kostenpaatsomschrijving wordt afgebroken tot ['
|| v_kostenplaats_omschrijving
|| ']');
END IF;
--
v_kostenplaats_module := UPPER (TRIM (v_kostenplaats_module));
IF v_kostenplaats_module NOT IN ('ALG', 'PRS', 'PRJ')
THEN
v_kostenplaats_module := 'PRS';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Ongelding kostenplaatstype',
'Kostenplaatstype wordt aangepast naar [' || v_kostenplaats_module || ']');
END IF;
--
v_kostenplaats_begin := TRIM (v_kostenplaats_begin);
v_kostenplaats_begin_d := fac.safe_to_date (v_kostenplaats_begin, 'dd-mm-yyyy');
IF v_kostenplaats_begin IS NOT NULL AND v_kostenplaats_begin_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatsbegin is ongeldig',
'Kostenplaatsbegin wordt leeg gemaakt');
END IF;
--
v_kostenplaats_eind := TRIM (v_kostenplaats_eind);
v_kostenplaats_eind_d := fac.safe_to_date (v_kostenplaats_eind, 'dd-mm-yyyy');
IF v_kostenplaats_eind IS NOT NULL AND v_kostenplaats_eind_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatseind is ongeldig',
'Kostenplaatseind wordt leeg gemaakt');
END IF;
--
v_kostenplaatsgrp_oms := TRIM (v_kostenplaatsgrp_oms);
IF v_kostenplaatsgrp_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (v_kostenplaatsgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostenplaatsgrp_key := v_kostenplaatsgrp_key;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaatsgroep-aanduiding kan niet gevonden worden',
'Kostenplaatsgroep wordt aangemaakt [' || v_kostenplaatsgrp_oms || ']');
END;
ELSE
v_kostenplaatsgrp_key := NULL;
END IF;
--
v_perslid := TRIM (v_perslid);
IF v_perslid IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_perslid);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_perslid_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden',
'Budgethouder wordt leeg gemaakt [' || v_perslid || ']');
END;
ELSE
v_perslid_key := NULL;
END IF;
v_kostenplaats_limiet := TRIM (v_kostenplaats_limiet);
v_kostenplaats_limietperiode := UPPER (TRIM (v_kostenplaats_limietperiode));
IF v_kostenplaats_limietperiode IS NOT NULL
AND v_kostenplaats_limietperiode NOT IN ('J', 'M')
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgetperiode-aanduiding kan niet gevonden worden',
'Budgetperiode wordt leeg gemaakt [' || v_kostenplaats_limietperiode || ']');
END IF;
v_kostenplaats_extern := TRIM (v_kostenplaats_extern);
IF v_kostenplaats_extern IS NOT NULL AND v_kostenplaats_extern NOT IN ('0', '1')
THEN
v_kostenplaats_extern := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaats extern-aanduiding kan niet gevonden worden',
'Kostenplaats_extern-aanduiding wordt leeg gemaakt');
END IF;
v_kostenplaats_fiat := TRIM (v_kostenplaats_fiat);
IF v_kostenplaats_fiat IS NOT NULL AND v_kostenplaats_fiat NOT IN ('0', '1')
THEN
v_kostenplaats_fiat := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Opdrachtfiatteren-aanduiding kan niet gevonden worden',
'Opdrachtfiatteren-aanduiding wordt leeg gemaakt');
END IF;
IF v_fiatteur_1 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_1_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_1);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_1_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 1 kan niet gevonden worden',
'Fiatteur 1 wordt leeg gemaakt [' || v_fiatteur_1 || ']');
END;
ELSE
v_fiatteur_1_key := NULL;
END IF;
IF v_fiatteur_2 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_2_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_2);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_2_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 2 kan niet gevonden worden',
'Fiatteur 2 wordt leeg gemaakt [' || v_fiatteur_2 || ']');
END;
ELSE
v_fiatteur_2_key := NULL;
END IF;
IF v_fiatteur_3 IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_fiatteur_3_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_fiatteur_3);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_fiatteur_3_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Fiatteur 3 kan niet gevonden worden',
'Fiatteur 3 wordt leeg gemaakt [' || v_fiatteur_3 || ']');
END;
ELSE
v_fiatteur_3_key := NULL;
END IF;
v_all_null :=
(v_bedrijf_naam IS NULL)
AND (v_afdeling_naam IS NULL)
AND (v_afdeling_naam_parent IS NULL)
AND (v_afdeling_omschrijving IS NULL)
AND (v_kostenplaats_nr IS NULL);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling/kostenplaats [' || v_aanduiding || ']';
INSERT INTO DVON_IMP_ORGKOST (prs_bedrijf_naam,
prs_afdeling_naam,
prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_key,
prs_perslid_key,
prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode,
prs_kostenplaats_extern,
prs_kostenplaats_fiat,
prs_fiatteur_1,
prs_fiatteur_2,
prs_fiatteur_3,
prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_nr,
prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limietp
)
VALUES (
v_bedrijf_naam,
v_afdeling_naam,
v_afdeling_naam_parent,
v_afdeling_omschrijving,
v_kostenplaats_nr,
v_kostenplaats_omschrijving,
v_kostenplaats_module,
v_kostenplaats_begin_d,
v_kostenplaats_eind_d,
v_kostenplaatsgrp_key,
v_perslid_key,
fac.safe_to_number (v_kostenplaats_limiet),
DECODE (v_kostenplaats_limietperiode, 'M', 1, 'J', 2, 0),
fac.safe_to_number (v_kostenplaats_extern),
fac.safe_to_number (v_kostenplaats_fiat),
v_fiatteur_1_key,
v_fiatteur_2_key,
v_fiatteur_3_key,
v_kostenplaatsgrp_oms,
v_kostenplaatsgrp_nr,
fac.safe_to_number (v_kostenplaatsgrp_limiet),
DECODE (v_kostenplaatsgrp_limietp, 'M', 1, 'J', 2, 0)
);
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig'
);
ELSE
fac.imp_writelog (p_import_key, 'S', 'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, '');
END dvon_import_orgkost;
/
CREATE OR REPLACE PROCEDURE dvon_import_orgkost_del (
p_import_key IN NUMBER
) IS
BEGIN
dvon_import_orgkost(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE DVON_UPDATE_ORGKOST (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_organisatie (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER(10);
v_ongeldig NUMBER(1);
v_count_update NUMBER(10);
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
--
v_bedrijf_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_prs_afdeling_parentkey NUMBER(10);
CURSOR cBedrijf
IS
SELECT min(prs_bedrijf_naam) prs_bedrijf_naam
FROM DVON_IMP_ORGKOST
WHERE prs_bedrijf_naam is not null
GROUP BY upper(prs_bedrijf_naam);
recBedrijf cBedrijf%ROWTYPE;
-- Bij 1-op-1 relatie tussen kostenplaats en afdeling de kostenplaatsomschrijving zetten op
-- de afdelingsomschrijving, ander de kostenplaatsomschrijving leeg laten.
CURSOR cKPN
IS
SELECT MIN(prs_kostenplaats_nr) prs_kostenplaats_nr,
DECODE(COUNT(*),1,MAX(prs_afdeling_omschrijving),'') prs_kostenplaats_omschrijving,
'PRS' prs_kostenplaats_module
FROM DVON_IMP_ORGKOST
WHERE prs_kostenplaats_nr IS NOT NULL
GROUP BY UPPER(prs_kostenplaats_nr);
recKPN cKpn%ROWTYPE;
CURSOR cAfdeling1
IS
SELECT MIN(prs_bedrijf_naam) prs_bedrijf_naam
,UPPER(prs_bedrijf_naam) prs_bedrijf_naam_upper
,MIN(prs_afdeling_naam) prs_afdeling_naam
,UPPER(prs_afdeling_naam) prs_afdeling_upper
,MAX(prs_afdeling_omschrijving) prs_afdeling_omschrijving
,MIN(prs_afdeling_naam_parent) prs_afdeling_naam_parent
,MIN(UPPER(prs_afdeling_naam_parent)) prs_afdeling_naam_parent_upper
,MAX(prs_kostenplaats_nr) prs_kostenplaats_nr
,MAX(UPPER(prs_kostenplaats_nr)) prs_kostenplaats_upper
,NIVEAU
FROM (SELECT 1 NIVEAU,
a1.prs_bedrijf_naam,
a1.prs_afdeling_naam,
a1.prs_afdeling_omschrijving,
a1.prs_kostenplaats_nr,
'' PRS_AFDELING_NAAM_PARENT
FROM DVON_IMP_ORGKOST a1
WHERE a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 2,
a2.prs_bedrijf_naam,
a2.prs_afdeling_naam,
a2.prs_afdeling_omschrijving,
a2.prs_kostenplaats_nr,
a1.prs_afdeling_naam
FROM DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2
WHERE a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 3,
a3.prs_bedrijf_naam,
a3.prs_afdeling_naam,
a3.prs_afdeling_omschrijving,
a3.prs_kostenplaats_nr,
a2.prs_afdeling_naam
FROM DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST a3
WHERE a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 4,
a4.prs_bedrijf_naam,
a4.prs_afdeling_naam,
a4.prs_afdeling_omschrijving,
a4.prs_kostenplaats_nr,
a3.prs_afdeling_naam
FROM DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST a3, DVON_IMP_ORGKOST a4
WHERE a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam
AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 5,
a5.prs_bedrijf_naam,
a5.prs_afdeling_naam,
a5.prs_afdeling_omschrijving,
a5.prs_kostenplaats_nr,
a4.prs_afdeling_naam
FROM DVON_IMP_ORGKOST a1, DVON_IMP_ORGKOST a2, DVON_IMP_ORGKOST a3, DVON_IMP_ORGKOST a4, DVON_IMP_ORGKOST a5
WHERE a5.prs_afdeling_naam_parent = a4.prs_afdeling_naam
AND a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam
AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL)
WHERE ((prs_bedrijf_naam IS NOT NULL) AND (prs_afdeling_naam IS NOT NULL)) -- geen lege regels
GROUP BY UPPER(prs_bedrijf_naam), UPPER(prs_afdeling_naam), NIVEAU
ORDER BY NIVEAU;
recAfdeling1 cAfdeling1%ROWTYPE;
BEGIN
OPEN cBedrijf;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cBedrijf%ISOPEN THEN
LOOP
BEGIN
FETCH cBedrijf INTO recBedrijf;
EXIT WHEN cBedrijf%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| ';
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Kijken of bedrijf al bestaat';
SELECT count(*)
INTO v_count
FROM prs_bedrijf
WHERE upper(prs_bedrijf_naam_upper) = upper(recBedrijf.prs_bedrijf_naam)
AND prs_bedrijf_verwijder is null;
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen bedrijf';
INSERT INTO PRS_BEDRIJF (
prs_bedrijf_naam
,prs_bedrijf_intern
) VALUES (
recBedrijf.prs_bedrijf_naam
,1
);
commit;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens verwerken van bedrijf ['||recBedrijf.PRS_BEDRIJF_NAAM||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
END IF;
OPEN cKPN;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cKPN%ISOPEN THEN
LOOP
BEGIN
v_aanduiding := recKPN.PRS_KOSTENPLAATS_NR||'| ';
v_errormsg := '';
v_errorhint := '';
FETCH cKPN INTO recKPN;
EXIT WHEN cKPN%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| ';
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Kijken of de kostenplaats al bestaat';
SELECT count(*)
INTO v_count
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder is null
AND upper(prs_kostenplaats_upper) = upper(recKPN.prs_kostenplaats_nr);
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen kostenplaats';
INSERT INTO PRS_KOSTENPLAATS
(PRS_KOSTENPLAATS_NR
,PRS_KOSTENPLAATS_OMSCHRIJVING
,PRS_KOSTENPLAATS_MODULE)
VALUES
(recKPN.prs_kostenplaats_nr
,recKPN.prs_kostenplaats_omschrijving
,recKPN.prs_kostenplaats_module);
commit;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens verwerken van kostenplaats ['||recKPN.PRS_KOSTENPLAATS_NR||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostenplaats: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Kostenplaats: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
END IF;
OPEN cAfdeling1;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cAfdeling1%ISOPEN THEN
LOOP
BEGIN
FETCH cAfdeling1 INTO recAfdeling1;
EXIT WHEN cAfdeling1%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recAfdeling1.prs_bedrijf_naam||'|'||recAfdeling1.prs_afdeling_naam||'|'||recAfdeling1.prs_afdeling_naam_parent ||'| ';
v_errormsg := '';
v_errorhint := '';
IF (recAfdeling1.niveau = 1) THEN
v_errorhint := 'Bedrijf niet gevonden bij afdeling';
v_prs_afdeling_parentkey := to_number(NULL);
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND prs_bedrijf_naam_upper = recAfdeling1.prs_bedrijf_naam_upper;
ELSE
v_errorhint := 'Parent van de afdeling niet gevonden';
v_bedrijf_key := to_number(NULL);
SELECT prs_afdeling_key
INTO v_prs_afdeling_parentkey
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = recAfdeling1.prs_afdeling_naam_parent_upper;
END IF;
v_errorhint := 'Bepalen of afdeling bestaat';
SELECT count(*)
INTO v_count
FROM prs_afdeling
WHERE upper(rtrim(prs_afdeling_omschrijving)) = upper(rtrim(recAfdeling1.prs_afdeling_omschrijving))
AND prs_afdeling_verwijder is null;
v_errorhint := 'Kostenplaats bij afdeling bepalen';
SELECT COUNT(*), NVL(MAX(prs_kostenplaats_key),to_number(NULL))
INTO v_count, v_kostenplaats_key
FROM PRS_KOSTENPLAATS
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_upper = UPPER(trim(recAfdeling1.prs_kostenplaats_upper))
AND UPPER(prs_kostenplaats_module) = 'PRS';
v_errorhint := 'Kostenplaats bij afdeling bepalen';
SELECT COUNT(*)
INTO v_count
FROM PRS_AFDELING
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = UPPER(trim(recAfdeling1.prs_afdeling_upper));
v_errorhint := 'Fout bij toevoegen afdeling';
IF (v_count = 0) THEN
INSERT INTO PRS_AFDELING
(prs_afdeling_naam
,prs_afdeling_omschrijving
,prs_bedrijf_key
,prs_afdeling_parentkey
,prs_kostenplaats_key
)
VALUES
(recAfdeling1.prs_afdeling_naam
,recAfdeling1.prs_afdeling_omschrijving
,v_bedrijf_key
,v_prs_afdeling_parentkey
,v_kostenplaats_key
);
COMMIT;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens verwerken van afdeling ['||recAfdeling1.PRS_AFDELING_NAAM||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Afdeling: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Afdeling: verwerkte regels met foutmelding: <b>'||to_char(v_count_error),
''
);
END IF;
CLOSE cAfdeling1;
END;
-- Organisatie (afdeling, bedrijf etc. verwijderen lijkt bij deze cust import niet nodig, dus uitgeschakeld).
-- SUBPROC
-- PROCEDURE add_organisatie_del (
-- p_import_key IN NUMBER
--) IS
--
--BEGIN
--
-- fac.imp_prs_delete_organisatie(p_import_key,1);
-- add_organisatie(p_import_key);
--
--END;
-- SUBPROC
PROCEDURE update_kostenplaats (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT DISTINCT
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_key,
prs_perslid_key,
prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode,
prs_kostenplaats_extern,
prs_kostenplaats_fiat,
prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_nr,
prs_fiatteur_1,
prs_fiatteur_2,
prs_fiatteur_3,
prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limietp
FROM DVON_IMP_ORGKOST;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE;
v_kostenplaatsgrp_key prs_kostenplaatsgrp.prs_kostenplaatsgrp_key%TYPE;
BEGIN
FOR rec IN c
LOOP
BEGIN
BEGIN
v_aanduiding := rec.prs_kostenplaatsgrp_nr || '|' || rec.prs_kostenplaatsgrp_oms;
v_errorhint := 'Opzoeken kostenplaatsgroep';
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (rec.prs_kostenplaatsgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostenplaatsgroep';
INSERT INTO prs_kostenplaatsgrp (prs_kostenplaatsgrp_oms)
VALUES (rec.prs_kostenplaats_omschrijving)
RETURNING prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key;
END;
BEGIN
v_aanduiding := rec.prs_kostenplaats_nr || '|' || rec.prs_kostenplaats_omschrijving;
v_errorhint := 'Opzoeken kostenplaats';
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_upper = UPPER (rec.prs_kostenplaats_nr);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostenplaats';
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr,
prs_kostenplaats_module,
prs_kostenplaats_omschrijving)
VALUES (rec.prs_kostenplaats_nr,
rec.prs_kostenplaats_module,
rec.prs_kostenplaats_omschrijving)
RETURNING prs_kostenplaats_key
INTO v_kostenplaats_key;
END;
-- Even de kostenplaats groep updaten, dit kunnen fiatteuren en/of limieten zijn
UPDATE prs_kostenplaatsgrp g
SET prs_kostenplaatsgrp_oms = rec.prs_kostenplaatsgrp_oms,
prs_kostenplaatsgrp_limiet = rec.prs_kostenplaatsgrp_limiet,
prs_kostenplaatsgrp_limperiode = rec.prs_kostenplaatsgrp_limietp,
prs_kostenplaatsgrp_nr = rec.prs_kostenplaatsgrp_nr,
prs_perslid_key = rec.prs_fiatteur_1,
prs_kostenplaatsgrp_fiat2_key = rec.prs_fiatteur_2,
prs_kostenplaatsgrp_fiat3_key = rec.prs_fiatteur_3
WHERE g.prs_kostenplaatsgrp_key = v_kostenplaatsgrp_key;
-- We hebben nu een kostenplaats record aangemaakt of gevonden.
-- Dan gaan we deze nu updaten.
v_errorhint := 'Aanpassen kostenplaats';
UPDATE prs_kostenplaats k
SET prs_kostenplaats_omschrijving = rec.prs_kostenplaats_omschrijving,
prs_kostenplaats_module = rec.prs_kostenplaats_module,
prs_kostenplaats_begin = rec.prs_kostenplaats_begin,
prs_kostenplaats_eind = rec.prs_kostenplaats_eind,
prs_kostenplaatsgrp_key = rec.prs_kostenplaatsgrp_key,
prs_perslid_key = rec.prs_perslid_key,
prs_kostenplaats_limiet = rec.prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode = rec.prs_kostenplaats_limietperiode,
prs_kostenplaats_extern =
COALESCE (rec.prs_kostenplaats_extern, prs_kostenplaats_extern),
prs_kostenplaats_fiat = COALESCE (rec.prs_kostenplaats_fiat, prs_kostenplaats_fiat)
WHERE k.prs_kostenplaats_key = v_kostenplaats_key;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' | ' || v_aanduiding);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' | ' || v_aanduiding);
END;
-- MAIN
BEGIN
add_organisatie (p_import_key);
-- add_organisatie_del (p_import_key);
update_kostenplaats (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces afgebroken!');
END DVON_UPDATE_ORGKOST;
/
CREATE OR REPLACE PROCEDURE dvon_import_extrains (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_teller NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
v_ins_srtkenmerk_key1 VARCHAR2 (255);
v_ins_srtkenmerk_key2 VARCHAR2 (255);
v_ins_srtkenmerk_key3 VARCHAR2 (255);
v_ins_srtkenmerk_key4 VARCHAR2 (255);
v_ins_srtkenmerk_key5 VARCHAR2 (255);
v_ins_srtkenmerk_key6 VARCHAR2 (255);
v_ins_srtkenmerk_key7 VARCHAR2 (255);
v_ins_srtkenmerk_key8 VARCHAR2 (255);
v_ins_srtkenmerk_key9 VARCHAR2 (255);
v_ins_srtkenmerk_key10 VARCHAR2 (255);
v_ins_srtkenmerk_key11 VARCHAR2 (255);
v_ins_srtkenmerk_key12 VARCHAR2 (255);
v_ins_srtkenmerk_key13 VARCHAR2 (255);
v_ins_srtkenmerk_key14 VARCHAR2 (255);
v_ins_srtkenmerk_key15 VARCHAR2 (255);
v_ins_srtkenmerk_key16 VARCHAR2 (255);
v_ins_srtkenmerk_key17 VARCHAR2 (255);
v_ins_srtkenmerk_key18 VARCHAR2 (255);
v_ins_srtkenmerk_key19 VARCHAR2 (255);
v_ins_srtkenmerk_key20 VARCHAR2 (255);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C60
v_ins_discipline_kostensoort VARCHAR2 (255); --C60
v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
v_ins_deel_omschrijving VARCHAR2 (255); -- C60
v_ins_deel_opmerking VARCHAR2 (1000); -- C320
v_reserveerbaar VARCHAR2 (255); -- C1
v_reserveerbaar_n NUMBER (1); -- N1
v_res_deel_eenheid VARCHAR2 (255); -- C10
v_res_deel_prijs VARCHAR2 (255); -- N7,2
v_res_deel_prijs_n NUMBER (7, 2); -- N7,2
v_alg_locatie_code VARCHAR2 (255); -- C10
v_alg_gebouw_code VARCHAR2 (255); -- C12
v_alg_verdieping_volgnr VARCHAR2 (255); -- N3
v_alg_verdieping_volgnr_n NUMBER (3); -- N3
v_alg_ruimte_nr VARCHAR2 (255); -- C10
v_res_deel_alg_level VARCHAR2 (255); -- C1 (naar -1 t/m 5)
v_res_deel_alg_level_n NUMBER (1); -- N1
v_res_discipline_omschrijving VARCHAR2 (255); -- C60
v_res_discipline_kostensoort VARCHAR2 (255); -- C60
v_prs_perslid_matchcode VARCHAR2 (255);
v_prs_perslid_matchwaarde VARCHAR2 (255);
v_ins_kenmerkwaarde1 VARCHAR2 (4000);
v_ins_kenmerkwaarde2 VARCHAR2 (4000);
v_ins_kenmerkwaarde3 VARCHAR2 (4000);
v_ins_kenmerkwaarde4 VARCHAR2 (4000);
v_ins_kenmerkwaarde5 VARCHAR2 (4000);
v_ins_kenmerkwaarde6 VARCHAR2 (4000);
v_ins_kenmerkwaarde7 VARCHAR2 (4000);
v_ins_kenmerkwaarde8 VARCHAR2 (4000);
v_ins_kenmerkwaarde9 VARCHAR2 (4000);
v_ins_kenmerkwaarde10 VARCHAR2 (4000);
v_ins_kenmerkwaarde11 VARCHAR2 (4000);
v_ins_kenmerkwaarde12 VARCHAR2 (4000);
v_ins_kenmerkwaarde13 VARCHAR2 (4000);
v_ins_kenmerkwaarde14 VARCHAR2 (4000);
v_ins_kenmerkwaarde15 VARCHAR2 (4000);
v_ins_kenmerkwaarde16 VARCHAR2 (4000);
v_ins_kenmerkwaarde17 VARCHAR2 (4000);
v_ins_kenmerkwaarde18 VARCHAR2 (4000);
v_ins_kenmerkwaarde19 VARCHAR2 (4000);
v_ins_kenmerkwaarde20 VARCHAR2 (4000);
v_file_index NUMBER;
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
-- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
-- discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- kw is bijvoorbeeld 'Parkeercode' of 'Parkeercode|3' waarbij de laatste in groep 3 zit
-- het resultaat is NULL (als niet gevonden) of 234|3 voor strkenmer_key 234 in groep 3
-- Als geen groep is meegegeven wordt 234|0 opgeleverd (de default groep)
FUNCTION bepaal_srtkenmerk_key (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF p_kw LIKE 'maat'
THEN -- maat, dus maar even wegzetten (wordt later gesplitst)
SELECT 9999
INTO v_srtkenmerk_key
FROM DUAL;
ELSE -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_ins;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
v_prs_perslid_matchcode := '';
v_teller :=1;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_reserveerbaar);
fac.imp_getfield (v_newline, c_delim, v_res_deel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_res_deel_prijs);
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_volgnr);
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_res_deel_alg_level);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20);
v_aanduiding :=
'['
|| v_ins_discipline_omschrijving
|| '|'
|| v_ins_srtgroep_omschrijving
|| '|'
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtdeel_omschrijving
|| '|'
|| v_ins_deel_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_discipline_omschrijving) =
'DISCIPLINEOMSCHRIJVING'
AND UPPER (v_ins_discipline_kostensoort) =
'DISCIPLINEKOSTENSOORT'
AND UPPER (v_ins_srtgroep_omschrijving) =
'GROEPSOORTOMSCHRIJVING'
AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
AND UPPER (v_ins_srtdeel_omschrijving) =
'OBJECTSOORTOMSCHRIJVING'
AND UPPER (v_ins_deel_omschrijving) = 'OBJECTOMSCHRIJVING'
AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
AND UPPER (v_reserveerbaar) = 'RESERVEERBAAR'
AND UPPER (v_res_deel_eenheid) = 'EENHEID'
AND UPPER (v_res_deel_prijs) = 'PRIJS'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE'
AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM'
AND UPPER (v_res_discipline_kostensoort) =
'CATALOGUSKOSTENSOORT'
AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
THEN
v_ins_srtkenmerk_key1 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde1);
v_ins_srtkenmerk_key2 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde2);
v_ins_srtkenmerk_key3 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde3);
v_ins_srtkenmerk_key4 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde4);
v_ins_srtkenmerk_key5 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde5);
v_ins_srtkenmerk_key6 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde6);
v_ins_srtkenmerk_key7 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde7);
v_ins_srtkenmerk_key8 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde8);
v_ins_srtkenmerk_key9 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde9);
v_ins_srtkenmerk_key10 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde10);
v_ins_srtkenmerk_key11 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde11);
v_ins_srtkenmerk_key12 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde12);
v_ins_srtkenmerk_key13 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde13);
v_ins_srtkenmerk_key14 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde14);
v_ins_srtkenmerk_key15 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde15);
v_ins_srtkenmerk_key16 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde16);
v_ins_srtkenmerk_key17 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde17);
v_ins_srtkenmerk_key18 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde18);
v_ins_srtkenmerk_key19 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde19);
v_ins_srtkenmerk_key20 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde20);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_ins_discipline_omschrijving :=
TRIM (v_ins_discipline_omschrijving);
IF v_ins_discipline_omschrijving IS NULL
OR LENGTH (v_ins_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Kostensoort ongeldig';
v_ins_discipline_kostensoort :=
TRIM (v_ins_discipline_kostensoort);
IF LENGTH (v_ins_discipline_kostensoort) > 60
THEN
v_ins_discipline_kostensoort :=
SUBSTR (v_ins_discipline_kostensoort, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Disciplinekostensoort wordt afgebroken tot ['
|| v_ins_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);
IF v_ins_srtgroep_omschrijving IS NULL
OR LENGTH (v_ins_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortcode ongeldig';
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Objectsoortomschrijving ongeldig';
v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);
IF v_ins_srtdeel_omschrijving IS NULL
OR LENGTH (v_ins_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectomschrijving ongeldig';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF v_ins_deel_omschrijving IS NULL
OR LENGTH (v_ins_deel_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Objectopmerking ongeldig';
v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);
IF LENGTH (v_ins_deel_opmerking) > 320
THEN
v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Objectopmerking wordt afgebroken tot ['
|| v_ins_deel_opmerking
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1),
'J', 1,
0)
INTO v_reserveerbaar_n
FROM DUAL;
--
v_errormsg := 'Eenheid ongeldig';
v_res_deel_eenheid := TRIM (v_res_deel_eenheid);
IF LENGTH (v_res_deel_eenheid) > 10
THEN
v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Eenheid wordt afgebroken tot ['
|| v_res_deel_eenheid
|| ']'
);
END IF;
--
v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99';
v_res_deel_prijs := TRIM (v_res_deel_prijs);
v_res_deel_prijs_n := NULL;
IF (v_res_deel_prijs IS NOT NULL)
THEN
IF (fac.safe_to_number (v_res_deel_prijs) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs);
END IF;
END IF;
--
v_errormsg := 'Locatiecode ongeldig';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 10
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
END IF;
--
v_errormsg := 'Gebouwcode ongeldig';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 12
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
END IF;
--
v_errormsg := 'Bouwlaagvolgnummer ongeldig';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
v_alg_verdieping_volgnr_n := NULL;
IF (v_alg_verdieping_volgnr IS NOT NULL)
THEN
v_alg_verdieping_volgnr_n :=
ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));
IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_alg_verdieping_volgnr_n :=
fac.safe_to_number (v_alg_verdieping_volgnr);
END IF;
END IF;
--
v_errormsg := 'Ruimtenummer ongeldig';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF LENGTH (v_alg_ruimte_nr) > 10
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ruimtenummer wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1),
'E', 0,
'D', 1,
'L', 2,
'G', 3,
'V', 4,
'R', 5,
-1)
INTO v_res_deel_alg_level_n
FROM DUAL;
--
v_errormsg := 'Catalogusnaam ongeldig';
v_res_discipline_omschrijving :=
TRIM (v_res_discipline_omschrijving);
IF LENGTH (v_res_discipline_omschrijving) > 60
THEN
v_res_discipline_omschrijving :=
SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Catalogusnaam wordt afgebroken tot ['
|| v_res_discipline_omschrijving
|| ']'
);
END IF;
--
v_errormsg := 'Cataloguskostensoort ongeldig';
v_res_discipline_kostensoort :=
TRIM (v_res_discipline_kostensoort);
IF LENGTH (v_res_discipline_kostensoort) > 60
THEN
v_res_discipline_kostensoort :=
SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Cataloguskostensoort wordt afgebroken tot ['
|| v_res_discipline_kostensoort
|| ']'
);
END IF;
-- De rest alleen ff trimmen.
v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode);
v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde);
v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
-- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
-- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
-- dan is kenmerkwaarde<n> gevuld met <waarde>!
-- NB. Een NULL-waarde resulteert NIET in het wissen van een
-- kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
INSERT INTO fac_imp_ins (
ins_discipline_omschrijving,
ins_discipline_kostensoort,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
reserveerbaar,
res_deel_eenheid,
res_deel_prijs,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
res_deel_alg_level,
res_discipline_omschrijving,
res_discipline_kostensoort,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20
)
VALUES (
v_ins_discipline_omschrijving,
v_ins_discipline_kostensoort,
v_ins_srtgroep_omschrijving,
v_ins_srtdeel_code,
v_ins_srtdeel_omschrijving,
TO_CHAR(fac.safe_to_number (v_ins_deel_omschrijving) + v_teller),
v_ins_deel_opmerking,
v_reserveerbaar_n,
v_res_deel_eenheid,
v_res_deel_prijs_n,
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr_n,
v_alg_ruimte_nr,
v_res_deel_alg_level_n,
v_res_discipline_omschrijving,
v_res_discipline_kostensoort,
v_prs_perslid_matchcode,
v_prs_perslid_matchwaarde,
DECODE (v_ins_srtkenmerk_key1,
NULL, v_ins_kenmerkwaarde1,
'9999|0',
(SELECT i.ins_srtkenmerk_key || '|0'
FROM ins_v_aanwezigsrtkenmerk i, ins_v_srtdeel_kenmerk ik
WHERE i.ins_srtkenmerk_key = ik.ins_srtkenmerk_key
AND i.ins_srtkenmerk_upper LIKE '%MAAT%'
AND ik.ins_srtdeel_upper = UPPER (v_ins_srtdeel_omschrijving))
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900),
TO_CHAR (v_ins_srtkenmerk_key1)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key2,
NULL, v_ins_kenmerkwaarde2,
TO_CHAR (v_ins_srtkenmerk_key2)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key3,
NULL, v_ins_kenmerkwaarde3,
TO_CHAR (v_ins_srtkenmerk_key3)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key4,
NULL, v_ins_kenmerkwaarde4,
TO_CHAR (v_ins_srtkenmerk_key4)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key5,
NULL, v_ins_kenmerkwaarde5,
TO_CHAR (v_ins_srtkenmerk_key5)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key6,
NULL, v_ins_kenmerkwaarde6,
TO_CHAR (v_ins_srtkenmerk_key6)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key7,
NULL, v_ins_kenmerkwaarde7,
TO_CHAR (v_ins_srtkenmerk_key7)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key8,
NULL, v_ins_kenmerkwaarde8,
TO_CHAR (v_ins_srtkenmerk_key8)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key9,
NULL, v_ins_kenmerkwaarde9,
TO_CHAR (v_ins_srtkenmerk_key9)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key10,
NULL, v_ins_kenmerkwaarde10,
TO_CHAR (v_ins_srtkenmerk_key10)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key11,
NULL, v_ins_kenmerkwaarde11,
TO_CHAR (v_ins_srtkenmerk_key11)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key12,
NULL, v_ins_kenmerkwaarde12,
TO_CHAR (v_ins_srtkenmerk_key12)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key13,
NULL, v_ins_kenmerkwaarde13,
TO_CHAR (v_ins_srtkenmerk_key13)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key14,
NULL, v_ins_kenmerkwaarde14,
TO_CHAR (v_ins_srtkenmerk_key14)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key15,
NULL, v_ins_kenmerkwaarde15,
TO_CHAR (v_ins_srtkenmerk_key15)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key16,
NULL, v_ins_kenmerkwaarde16,
TO_CHAR (v_ins_srtkenmerk_key16)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key17,
NULL, v_ins_kenmerkwaarde17,
TO_CHAR (v_ins_srtkenmerk_key17)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key18,
NULL, v_ins_kenmerkwaarde18,
TO_CHAR (v_ins_srtkenmerk_key18)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key19,
NULL, v_ins_kenmerkwaarde19,
TO_CHAR (v_ins_srtkenmerk_key19)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key20,
NULL, v_ins_kenmerkwaarde20,
TO_CHAR (v_ins_srtkenmerk_key20)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)
)
);
COMMIT;
v_teller := v_teller +1;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END dvon_import_extrains;
/
CREATE OR REPLACE PROCEDURE dvon_update_extrains (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_kostensoort (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT prs_kostensoort_upper,
MAX (prs_kostensoort_omschrijving) prs_kostensoort_omschrijving
FROM ( SELECT UPPER (ins_discipline_kostensoort) prs_kostensoort_upper,
MAX (ins_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE ins_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (ins_discipline_kostensoort)
UNION ALL
SELECT UPPER (res_discipline_kostensoort) prs_kostensoort_upper,
MAX (res_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1 AND res_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (res_discipline_kostensoort))
GROUP BY prs_kostensoort_upper;
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper;
IF ccount = 0
THEN
INSERT INTO prs_kostensoort (prs_kostensoort_oms)
VALUES (rec.prs_kostensoort_omschrijving);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_discipline_kostensoort) ins_kostensoort_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
IF ccount = 0
THEN
IF rec.ins_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.ins_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('INS',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
VALUES (v_discipline_key, 0);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_resdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (res_discipline_omschrijving) res_discipline_upper,
UPPER (res_discipline_kostensoort) res_kostensoort_upper,
MAX (res_discipline_omschrijving) res_discipline_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1
GROUP BY UPPER (res_discipline_omschrijving), UPPER (res_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.res_discipline_upper;
IF ccount = 0
THEN
IF rec.res_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.res_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('RES',
SUBSTR (rec.res_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO res_disc_params (res_ins_discipline_key)
VALUES (v_discipline_key);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving);
v_discipline_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg :=
'Fout bij toevoegen groepsoort [' || rec.ins_srtgroep_omschrijving || '] ';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
IF ccount = 0
THEN
INSERT INTO ins_srtgroep (ins_discipline_key,
ins_srtgroep_module,
ins_srtgroep_omschrijving)
VALUES (v_discipline_key,
'INS',
SUBSTR (TRIM (rec.ins_srtgroep_omschrijving), 1, 60));
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
MAX (ins_srtdeel_code) ins_srtdeel_code,
MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving),
UPPER (ins_srtgroep_omschrijving),
UPPER (ins_srtdeel_code),
UPPER (ins_srtdeel_omschrijving);
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
v_errormsg :=
'Fout bij toevoegen objectsoort [' || rec.ins_srtdeel_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
IF ccount = 0
THEN
-- binding 17 betekent ruimtegebonden of persoonsgebonden
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
17);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
-- p_srtkenmerkgroepwaarde = '234|1=37-ZB-DR'
-- Ofwel: srtkenmerk_key|groep=waarde
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_srtkenmerkgroepwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_waarde VARCHAR(255);
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_srtkenmerkgroepwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk van soort [' || p_srtkenmerkgroepwaarde || ']';
v_srtkenmerk_key := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde, 1, INSTR (p_srtkenmerkgroepwaarde, '|') - 1));
v_groep := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde,
INSTR (p_srtkenmerkgroepwaarde, '|') + 1,
INSTR (p_srtkenmerkgroepwaarde, '=') - 1 - INSTR (p_srtkenmerkgroepwaarde, '|')));
v_waarde := SUBSTR (p_srtkenmerkgroepwaarde, INSTR (p_srtkenmerkgroepwaarde, '=') + 1);
SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE d.ins_deel_key = p_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND k.ins_srtkenmerk_key = v_srtkenmerk_key
AND k.ins_kenmerk_groep = v_groep
AND ( (k.ins_srtinstallatie_key = sd.ins_srtdeel_key
AND k.ins_kenmerk_niveau = 'S')
OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key
AND k.ins_kenmerk_niveau = 'G')
OR (k.ins_srtinstallatie_key = sg.ins_discipline_key
AND k.ins_kenmerk_niveau = 'D'))
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || v_waarde || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (v_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam, v_kolomnaam, v_kolomtxt
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT ( * ), MAX (ins_kenmerkdeel_key)
INTO ccount, v_kenmerkdeel_key
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_deel_key = p_deel_key AND ins_kenmerk_key = v_kenmerk_key;
IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN
v_waarde := REPLACE (v_waarde, ',', '.');
END IF;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
VALUES (p_deel_key, v_kenmerk_key, v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die als bestaan maar met de nieuwe import leeg zijn.
DELETE ins_kenmerkdeel
WHERE ins_kenmerk_key = v_kenmerk_key
AND ins_deel_key = p_deel_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_inskenmerk');
END;
-- SUBPROC
PROCEDURE add_deel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
reserveerbaar,
res_discipline_omschrijving,
res_deel_eenheid,
res_deel_prijs,
res_deel_alg_level,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20
FROM fac_imp_ins;
v_discipline_key NUMBER (10);
v_rdiscipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_matchkolom VARCHAR2 (255);
sql_stmt VARCHAR2 (1000);
v_ruimte_type VARCHAR2 (10);
v_deel_key NUMBER (10);
ccount NUMBER (10);
pcount NUMBER (10);
v_count_tot NUMBER (10);
v_count_insnew NUMBER (10);
v_count_insupd NUMBER (10);
v_count_resnew NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
v_count_tot := 0;
v_count_insnew := 0;
v_count_insupd := 0;
v_count_resnew := 0;
v_aanduiding := '';
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.ins_discipline_omschrijving
|| '|'
|| rec.ins_srtgroep_omschrijving
|| '|'
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '|'
|| rec.ins_deel_omschrijving
|| '] ';
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.ins_discipline_omschrijving);
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij bepalen objectsoort';
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (UPPER(ins_srtdeel_code)) = UPPER (rec.ins_srtdeel_code)
AND TRIM (ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschrijving);
v_locatie_key := NULL;
IF rec.alg_locatie_code IS NOT NULL
THEN -- ruimtegebonden object
v_errormsg := 'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (rec.alg_locatie_code);
v_errormsg := 'Fout bij bepalen gebouw [' || rec.alg_gebouw_code || ']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (rec.alg_gebouw_code);
v_errormsg :=
'Fout bij bepalen verdieping [' || rec.alg_verdieping_volgnr || ']';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec.alg_verdieping_volgnr;
v_errormsg := 'Fout bij bepalen ruimte [' || rec.alg_ruimte_nr || ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_verdieping_key
AND TRIM (alg_ruimte_upper_nr) = UPPER (rec.alg_ruimte_nr);
v_ruimte_type := 'R';
-- ruimtegebonden objecten hebben een unieke ID binnen locatie
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R
AND ins_alg_locatie_key = v_locatie_key
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
ELSE -- persoonsgebonden object
v_matchkolom := '';
CASE rec.prs_perslid_matchcode
WHEN '1'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '2'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '3'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '4'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '5'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
ELSE
-- voor developers only: indien geen code wordt gebruikt,
-- kan als persoonmatchcode een kolom uit de perslid-tabel
-- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
v_matchkolom := rec.prs_perslid_matchcode;
END CASE;
v_errormsg := 'Fout bij bepalen persoon [' || rec.prs_perslid_matchwaarde || ']';
sql_stmt :=
'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) '
|| ' FROM prs_v_aanwezigperslid '
|| ' WHERE UPPER ('
|| v_matchkolom
|| ') = UPPER (:pwaarde) '
|| 'GROUP BY prs_perslid_key';
--dbms_output.put_line(rec.prs_perslid_matchwaarde);
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', rec.prs_perslid_matchwaarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.define_column(l_cursor_1, 2, pcount);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
-- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht??
DBMS_SQL.column_value (l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.column_value (l_cursor_1, 2, pcount);
DBMS_SQL.close_cursor(l_cursor_1);
--dbms_output.put_line(pcount);
IF pcount != 1
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Kan persoon niet 1-duidig bepalen');
END IF;
v_ruimte_type := 'P';
-- persoonsgebonden objecten hebben een unieke ID
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- P
AND ins_alg_locatie_key IS NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
END IF;
IF ccount = 0
THEN -- toevoegen object!
v_errormsg := 'Fout bij toevoegen INS-object';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key)
VALUES (v_discipline_key,
v_srtdeel_key,
'INS',
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
v_ruimte_key,
v_ruimte_type,
v_locatie_key)
RETURNING ins_deel_key
INTO v_deel_key;
-- Overslaan als reserveerbaar en geen RES-discipline of andersom,
-- dus verder geen controle op eventuele inconsistentie!
IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL)
THEN
v_errormsg :=
'Fout bij bepalen RES-discipline ['
|| rec.res_discipline_omschrijving
|| ']';
SELECT ins_discipline_key
INTO v_rdiscipline_key
FROM res_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.res_discipline_omschrijving);
v_errormsg := 'Fout bij toevoegen RES-object';
INSERT INTO res_deel (res_ins_deel_key,
res_deel_omschrijving,
res_deel_opmerking,
res_deel_eenheid,
res_deel_prijs,
res_discipline_key,
res_deel_alg_level)
VALUES (v_deel_key,
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
rec.res_deel_eenheid,
rec.res_deel_prijs,
v_rdiscipline_key,
rec.res_deel_alg_level);
v_count_resnew := v_count_resnew + 1;
END IF;
v_srtnoti_code := 'INSNEW';
v_count_insnew := v_count_insnew + 1;
ELSE -- bijwerken object!
v_errormsg := 'Fout bij bepalen INS-object';
SELECT ins_deel_key
INTO v_deel_key
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R/P
AND COALESCE (ins_alg_locatie_key, -1) = COALESCE (v_locatie_key, -1) -- gevuld/NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
v_srtnoti_code := 'INSUPD';
v_count_insupd := v_count_insupd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)! ins_kenmerkwaarde1
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde1);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde2);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde3);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde4);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde5);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde6);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde7);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde8);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde9);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde10);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde11);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde12);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde13);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde14);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde15);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde16);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde17);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde18);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde19);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde20);
fac.trackaction (v_srtnoti_code,
v_deel_key,
sys_context('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
NULL);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_insnew),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_insupd),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_resnew),
'');
COMMIT;
END;
-- MAIN
BEGIN
add_kostensoort (p_import_key);
add_insdiscipline (p_import_key);
add_resdiscipline (p_import_key);
add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
add_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END dvon_update_extrains;
/
CREATE OR REPLACE PROCEDURE dvon_import_dirksen (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
v_file_index NUMBER;
-- De importvelden
v_ordernummer VARCHAR (20);
v_orderdatum DATE;
v_orderdatum_txt VARCHAR (255);
v_ordersoort VARCHAR (255);
v_orderstatus VARCHAR (255);
v_medewerker VARCHAR (255);
v_medewerker_huidig VARCHAR (255);
v_regeltype VARCHAR (255);
v_artikelnummer VARCHAR (255);
v_artikelnaam VARCHAR (255);
v_maat VARCHAR (255);
v_prijs_per_stuk VARCHAR (20);
v_aantal VARCHAR (20);
v_regeltotaal VARCHAR (20);
v_retourtype VARCHAR (255);
v_team VARCHAR (255);
v_afleveradresnaam VARCHAR (255);
v_adres VARCHAR (255);
v_postcode VARCHAR (255);
v_plaats VARCHAR (255);
v_magazijnartikel VARCHAR (255);
v_ordersoort_retour VARCHAR (255);
v_ins_srtkenmerk_key1 VARCHAR2 (255);
v_teller NUMBER (10);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
CURSOR c2
IS
SELECT
sub.ordernummer,
sub.disciplineomschrijving,
sub.disciplinekostensoort,
sub.groepsoortomschrijving,
sub.objectsoortcode,
sub.objectsoortomschrijving,
sub.objectomschrijving,
NULL objectopmerking,
sub.reserveerbaar,
sub.eenheid,
sub.prijs,
sub.locatiecode,
sub.gebouwcode,
sub.bouwlaagvolgnummer,
sub.ruimtenummer,
sub.reserveringscope,
sub.catalogusnaam,
sub.cataloguskostensoort,
sub.persoonmatchcode,
sub.persoonmatchwaarde,
sub.maat,
sub.kenmerk2,
sub.kenmerk3,
sub.kenmerk4,
sub.kenmerk5,
sub.kenmerk6,
sub.kenmerk7,
sub.kenmerk8,
sub.kenmerk9,
sub.kenmerk10,
sub.kenmerk11,
sub.kenmerk12,
sub.kenmerk13,
sub.kenmerk14,
sub.kenmerk15,
sub.kenmerk16,
sub.kenmerk17,
sub.kenmerk18,
sub.kenmerk19,
sub.kenmerk20
FROM
(
SELECT
dd.ordernummer,
d.ins_discipline_omschrijving disciplineomschrijving,
NULL disciplinekostensoort,
sg.ins_srtgroep_omschrijving groepsoortomschrijving,
sd.ins_srtdeel_code objectsoortcode,
sd.ins_srtdeel_omschrijving objectsoortomschrijving,
MAX (i.ins_deel_key) objectomschrijving,
dd.aantal aantal,
NULL reserveerbaar,
NULL eenheid,
NULL prijs,
'DIRKSEN' locatiecode,
'DIRKSEN' gebouwcode,
'0' bouwlaagvolgnummer,
'LEVERINGEN' ruimtenummer,
NULL reserveringscope,
NULL catalogusnaam,
NULL cataloguskostensoort,
NULL persoonmatchcode,
NULL persoonmatchwaarde,
dd.maat maat,
NULL kenmerk2,
NULL kenmerk3,
NULL kenmerk4,
NULL kenmerk5,
NULL kenmerk6,
NULL kenmerk7,
NULL kenmerk8,
NULL kenmerk9,
NULL kenmerk10,
NULL kenmerk11,
NULL kenmerk12,
NULL kenmerk13,
NULL kenmerk14,
NULL kenmerk15,
NULL kenmerk16,
NULL kenmerk17,
NULL kenmerk18,
NULL kenmerk19,
NULL kenmerk20
FROM dvon_imp_dirksen dd,
ins_discipline d,
ins_deel i,
ins_srtdeel sd,
ins_srtgroep sg,
ins_srtkenmerk isk,
ins_v_srtdeel_kenmerk ik,
fac_kenmerkdomein fk
WHERE dd.artikelnummer = sd.ins_srtdeel_nr
AND i.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND dd.maat IS NOT NULL
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%'
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND ik.ins_srtdeel_upper = UPPER (sd.ins_srtdeel_omschrijving)
AND isk.fac_kenmerkdomein_key = fk.fac_kenmerkdomein_key
AND UPPER (dd.regeltype) IN ('SPECIALS', 'STANDAARD ARTIKEL')
AND UPPER (dd.maat) IN (SELECT f.fac_usrdata_upper
FROM fac_usrdata f
WHERE f.fac_usrtab_key = fk.fac_usrtab_key
AND f.fac_usrdata_verwijder IS NULL) -- alleen bestaande maten
GROUP BY (
dd.ordernummer,
d.ins_discipline_omschrijving,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
dd.aantal,
dd.maat)
) sub,
DUAL
CROSS JOIN
( SELECT ROWNUM n
FROM DUAL
CONNECT BY LEVEL <=
(SELECT MAX (aantal)
FROM dvon_imp_dirksen))
WHERE n <= aantal
ORDER BY objectsoortcode;
BEGIN
-- Eerst opruiming
DELETE FROM dvon_imp_dirksen;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
v_count_tot := v_count_tot + 1;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ordernummer);
fac.imp_getfield (v_newline, c_delim, v_orderdatum_txt);
fac.imp_getfield (v_newline, c_delim, v_ordersoort);
fac.imp_getfield (v_newline, c_delim, v_orderstatus);
fac.imp_getfield (v_newline, c_delim, v_medewerker);
fac.imp_getfield (v_newline, c_delim, v_medewerker_huidig);
fac.imp_getfield (v_newline, c_delim, v_regeltype);
fac.imp_getfield (v_newline, c_delim, v_artikelnummer);
fac.imp_getfield (v_newline, c_delim, v_artikelnaam);
fac.imp_getfield (v_newline, c_delim, v_maat);
fac.imp_getfield (v_newline, c_delim, v_prijs_per_stuk);
fac.imp_getfield (v_newline, c_delim, v_aantal);
fac.imp_getfield (v_newline, c_delim, v_regeltotaal);
fac.imp_getfield (v_newline, c_delim, v_retourtype);
fac.imp_getfield (v_newline, c_delim, v_team);
fac.imp_getfield (v_newline, c_delim, v_afleveradresnaam);
fac.imp_getfield (v_newline, c_delim, v_adres);
fac.imp_getfield (v_newline, c_delim, v_postcode);
fac.imp_getfield (v_newline, c_delim, v_plaats);
fac.imp_getfield (v_newline, c_delim, v_magazijnartikel);
fac.imp_getfield (v_newline, c_delim, v_ordersoort_retour);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Alleen de velden waar echt wat mee gedaan wordt, de rest vervalt toch.
IF (header_is_valid = 0)
THEN
IF UPPER (v_regeltype) = 'REGELTYPE'
AND UPPER (v_artikelnummer) = 'ARTIKELNUMMER'
AND UPPER (v_maat) = 'MAAT'
AND UPPER (v_aantal) = 'AANTAL'
THEN
header_is_valid := 1;
END IF;
ELSE
v_errormsg := 'Ongeldige header';
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
v_orderdatum := fac.safe_to_date (v_orderdatum_txt, 'DD-MM-YYYY');
-- We vullen de Dirksen tabel, vanaf daar kan de data gemuteerd worden zodat deze in fac_imp_ins gezet kan worden.
INSERT INTO DVON_IMP_DIRKSEN (
ordernummer,
orderdatum,
ordersoort,
orderstatus,
medewerker,
medewerker_huidig,
regeltype,
artikelnummer,
artikelnaam,
maat,
prijs_per_stuk,
aantal,
regeltotaal,
retourtype,
team,
afleveradresnaam,
adres,
postcode,
plaats,
magazijnartikel,
ordersoort_retour
)
VALUES (
v_ordernummer,
v_orderdatum,
v_ordersoort,
v_orderstatus,
v_medewerker,
v_medewerker_huidig,
v_regeltype,
v_artikelnummer,
v_artikelnaam,
v_maat,
v_prijs_per_stuk,
v_aantal,
v_regeltotaal,
v_retourtype,
v_team,
v_afleveradresnaam,
v_adres,
v_postcode,
v_plaats,
v_magazijnartikel,
v_ordersoort_retour
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
-- Nu gaan we de ingelezen data omhangen naar fac_imp_ins
-- Per ordernummer worden op basis van "aantal" regels aangemaakt als losse objecten (zie cursor c2)
-- De objectidentificatie (uniek) wordt bepaald door de hoogste ins_deel_key binnen die objectsoort +1 (v_teller)
-- Dit kan straks weer verwerkt worden met dvon_update_extrains
BEGIN
-- Eerst opruimen
DELETE FROM fac_imp_ins;
v_count_tot := 0;
v_count_import := 0;
v_ins_srtkenmerk_key1:= 9999;
v_teller :=1;
FOR rec IN c2
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
INSERT INTO fac_imp_ins (
ins_discipline_omschrijving,
ins_discipline_kostensoort,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
reserveerbaar,
res_deel_eenheid,
res_deel_prijs,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
res_deel_alg_level,
res_discipline_omschrijving,
res_discipline_kostensoort,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1
)
VALUES (
rec.disciplineomschrijving,
rec.disciplinekostensoort,
rec.groepsoortomschrijving,
rec.objectsoortcode,
rec.objectsoortomschrijving,
TO_CHAR(fac.safe_to_number (rec.objectomschrijving) + v_teller),
rec.objectopmerking,
rec.reserveerbaar,
rec.eenheid,
rec.prijs,
rec.locatiecode,
rec.gebouwcode,
rec.bouwlaagvolgnummer,
rec.ruimtenummer,
rec.reserveringscope,
rec.catalogusnaam,
rec.cataloguskostensoort,
'',
rec.persoonmatchwaarde,
DECODE (v_ins_srtkenmerk_key1,
NULL, rec.maat,
'9999',
(SELECT i.ins_srtkenmerk_key || '|0'
FROM ins_v_aanwezigsrtkenmerk i, ins_v_srtdeel_kenmerk ik
WHERE i.ins_srtkenmerk_key = ik.ins_srtkenmerk_key
AND i.ins_srtkenmerk_upper LIKE '%MAAT%'
AND ik.ins_srtdeel_upper = UPPER (rec.objectsoortomschrijving))
|| '='
|| SUBSTR (rec.maat, 1, 3900),
TO_CHAR (v_ins_srtkenmerk_key1)
|| '='
|| SUBSTR (rec.maat, 1, 3900)
)
);
COMMIT;
v_teller := v_teller +1;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
END;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END dvon_import_dirksen;
/
CREATE OR REPLACE PROCEDURE dvon_update_dirksen (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
BEGIN
dvon_update_extrains (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END dvon_update_dirksen;
/
-- Ingelezen objecten in bulk uitleenbaar maken via export
CREATE OR REPLACE PROCEDURE DVON_EXPORT_LEENMAARUIT (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
BEGIN
UPDATE ins_srtdeel
SET ins_srtdeel_uitleenbaar = 1
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_uitleenbaar != 1;
UPDATE ins_deel
SET ins_alg_ruimte_key_org = 201,
ins_alg_ruimte_type_org = 'R'
WHERE ins_alg_ruimte_type = 'P'
AND ins_alg_ruimte_key_org IS NULL;
END;
/
-- Vanaf hier rapportages
CREATE OR REPLACE VIEW dvon_v_rap_voorraad
(
srtdeel_key,
object_groep,
object_soort,
maat,
aantal,
locatie,
gebouw,
verdiepingcode,
ruimtenr
)
AS
SELECT i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
maat.fac_usrdata_omschr,
COALESCE (COUNT (maat.fac_usrdata_omschr), 0),
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
FROM ins_deel i,
ins_srtdeel srt,
ins_srtgroep ig,
alg_ruimte ar,
alg_locatie al,
alg_gebouw ag,
alg_verdieping av,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_srtdeel_key = srt.ins_srtdeel_key
AND i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND srt.ins_srtgroep_key = ig.ins_srtgroep_key
AND ar.alg_verdieping_key = av.alg_verdieping_key
AND av.alg_gebouw_key = ag.alg_gebouw_key
AND ag.alg_locatie_key = al.alg_locatie_key
AND i.ins_deel_key = maat.ins_deel_key(+)
AND maat.fac_usrdata_omschr IS NOT NULL
AND i.ins_alg_ruimte_key_org IS NULL
AND UPPER (al.alg_locatie_code) LIKE '%DVO-ASSEN3%'
GROUP BY i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
maat.fac_usrdata_omschr,
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
UNION ALL
SELECT i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
'NVT',
COUNT (i.ins_deel_key),
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr
FROM ins_deel i,
ins_srtdeel srt,
ins_srtgroep ig,
alg_ruimte ar,
alg_locatie al,
alg_gebouw ag,
alg_verdieping av
WHERE NOT EXISTS
(SELECT 1
FROM ins_kenmerk ik, ins_srtkenmerk isk
WHERE i.ins_srtdeel_key = ik.ins_srtinstallatie_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%')
AND i.ins_srtdeel_key = srt.ins_srtdeel_key
AND i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND srt.ins_srtgroep_key = ig.ins_srtgroep_key
AND ar.alg_verdieping_key = av.alg_verdieping_key
AND av.alg_gebouw_key = ag.alg_gebouw_key
AND ag.alg_locatie_key = al.alg_locatie_key
AND i.ins_alg_ruimte_key_org IS NULL
AND UPPER (al.alg_locatie_code) LIKE '%DVO-ASSEN3%'
GROUP BY i.ins_srtdeel_key,
ig.ins_srtgroep_omschrijving,
srt.ins_srtdeel_omschrijving,
al.alg_locatie_omschrijving,
ag.alg_gebouw_omschrijving,
av.alg_verdieping_volgnr,
ar.alg_ruimte_nr;
CREATE OR REPLACE VIEW dvon_v_rap_voorraad_auth
(
fclt_3d_discipline_key,
srtdeel_key,
object_groep,
object_soort,
maat,
aantal,
locatie,
gebouw,
verdiepingcode,
ruimtenr
)
AS
SELECT i.ins_discipline_key,
sub.ins_srtdeel_key,
iv.groep,
iv.soort,
maat.fac_usrdata_omschr,
COALESCE (COUNT (maat.fac_usrdata_omschr), 0),
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr
FROM ins_v_udr_deel iv,
ins_discipline i,
( SELECT ins_deel_key, ins_srtdeel_key FROM ins_deel) sub,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE iv.deel_key = maat.ins_deel_key(+)
AND maat.fac_usrdata_omschr IS NOT NULL
AND iv.uitgeleend NOT LIKE 'ja'
AND sub.ins_deel_key = iv.deel_key
AND i.ins_discipline_omschrijving = iv.discipline
AND i.ins_discipline_verwijder IS NULL
GROUP BY sub.ins_srtdeel_key,
maat.fac_usrdata_omschr,
iv.groep,
iv.soort,
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr,
i.ins_discipline_key
UNION ALL
SELECT i.ins_discipline_key,
sub.ins_srtdeel_key,
iv.groep,
iv.soort,
'NVT',
COUNT (iv.deel_key),
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr
FROM ins_v_udr_deel iv,
ins_discipline i,
( SELECT ins_deel_key, ins_srtdeel_key FROM ins_deel) sub
WHERE NOT EXISTS
(SELECT 1
FROM ins_kenmerk ik,
ins_srtkenmerk isk
WHERE
sub.ins_srtdeel_key = ik.ins_srtinstallatie_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%')
AND iv.uitgeleend NOT LIKE 'ja'
AND sub.ins_deel_key = iv.deel_key
AND i.ins_discipline_omschrijving = iv.discipline
AND i.ins_discipline_verwijder IS NULL
GROUP BY sub.ins_srtdeel_key,
iv.groep,
iv.soort,
iv.locatie_omschrijving,
iv.gebouw,
iv.verdiepingcode,
iv.ruimtenr,
i.ins_discipline_key;
CREATE OR REPLACE VIEW dvon_v_rap_bes_voorraad
(
bestelopdrachtnummer,
bestellingkey,
bestelaanvraagnr,
besteldatum,
status,
besteller,
catalogus,
groep,
objectgroep,
productomschrijving,
productcode,
maat,
aantal,
kleurbolletje,
op_voorraad,
voorraad_locatie,
opmerking,
besteld_voor,
bestopdr_key
)
AS
SELECT bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_key(+)
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat(+) = maat.fac_usrdata_omschr
AND maat.fac_usrdata_omschr NOT LIKE '%NVT%'
UNION ALL
SELECT bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_key(+)
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat = 'NVT';
CREATE OR REPLACE VIEW dvon_v_rap_bes_voorraad_auth
(
fclt_3d_discipline_key,
bestelopdrachtnummer,
bestellingkey,
bestelaanvraagnr,
besteldatum,
status,
besteller,
catalogus,
groep,
objectgroep,
productomschrijving,
productcode,
maat,
aantal,
kleurbolletje,
op_voorraad,
voorraad_locatie,
opmerking,
besteld_voor,
bestopdr_key
)
AS
SELECT d.ins_discipline_key,
bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_key(+)
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat(+) = maat.fac_usrdata_omschr
AND maat.fac_usrdata_omschr NOT LIKE '%NVT%'
UNION ALL
SELECT d.ins_discipline_key,
bo.bes_bestelopdr_id,
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
b.bes_bestelling_datum besteldatum,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteller,
d.ins_discipline_omschrijving catalogus,
sg.bes_srtgroep_omschrijving bestelgroep,
COALESCE (dv.object_groep, 'Niet beschikbaar') objectgroep,
sd.bes_srtdeel_omschrijving productomschrijving,
sd.bes_srtdeel_nr productcode,
COALESCE (maat.fac_usrdata_omschr, 'NVT') maat,
bi.bes_bestelling_item_aantal aantal,
lcl.l ('lcl_bestelopdr_flag' || bo.bes_bestelopdr_flag),
COALESCE (dv.aantal, 0) op_voorraad,
COALESCE (dv.locatie, 'Niet beschikbaar') voorraad_locatie,
bo.bes_bestelopdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
bo.bes_bestelopdr_key
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
dvon_v_rap_voorraad dv,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) = bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_key(+)
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
AND dv.srtdeel_key(+) = sd.ins_srtdeel_key
AND bo.bes_bestelopdr_key IS NOT NULL
AND dv.maat = 'NVT';
CREATE OR REPLACE VIEW dvon_v_rap_gelev_nbev
(
bestelling_key,
bestelaanvraagnr,
besteld_voor,
bestelling_status,
kostenplaats,
datum_laatste_lev,
email_besteld_voor,
fiatteur,
email_fiatteur
)
AS
SELECT DISTINCT
b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
(SELECT bes_bestellingstatuses_omschr
FROM bes_bestellingstatuses bs
WHERE bs.bes_bestellingstatuses_key = b.bes_bestelling_status)
status,
pk.prs_kostenplaats_omschrijving,
b.bes_bestelling_leverdatum,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = b.prs_perslid_key_voor)
email_voor,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.bes_bestelling_fiat_user)
fiatteur,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = b.bes_bestelling_fiat_user)
email_fiat
FROM bes_bestelling b,
prs_v_perslid_fullnames pf,
prs_kostenplaats pk,
prs_perslid p
WHERE b.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND b.bes_bestelling_leverdatum IS NOT NULL
AND b.bes_bestelling_status = 6;
CREATE OR REPLACE VIEW dvon_v_rap_bezit_extra
(
perslid_key,
deel_key,
fclt_3d_discipline_key,
deel_soort,
deel_oms,
maat,
uitgegeven,
eigenaar,
locatie
)
AS
SELECT (SELECT pf.prs_perslid_key
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
perslid_key,
i.ins_deel_key,
i.ins_discipline_key,
isrt.ins_srtdeel_omschrijving,
i.ins_deel_omschrijving,
maat.fac_usrdata_omschr,
DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uitgegeven,
(SELECT pf.prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
persoon,
(SELECT ar.alg_ruimte_upper_nr
FROM alg_ruimte ar
WHERE i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND i.ins_alg_ruimte_type = 'R')
locatie
FROM ins_deel i,
ins_srtdeel isrt,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = fac.safe_to_number (iv.ins_kenmerkdeel_waarde)
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_deel_key = maat.ins_deel_key(+)
AND i.ins_srtdeel_key = isrt.ins_srtdeel_key
AND i.ins_deel_verwijder IS NULL;
CREATE OR REPLACE VIEW dvon_v_rap_bezit_extra_print
(
perslid_key,
deel_key,
fclt_3d_discipline_key,
discipline,
deel_soort,
deel_oms,
maat,
uitgegeven,
eigenaar,
locatie
)
AS
SELECT (SELECT pf.prs_perslid_key
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
perslid_key,
i.ins_deel_key,
i.ins_discipline_key,
idc.ins_discipline_omschrijving,
isrt.ins_srtdeel_omschrijving,
i.ins_deel_omschrijving,
maat.fac_usrdata_omschr,
DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uitgegeven,
(SELECT pf.prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames pf
WHERE i.ins_alg_ruimte_key = pf.prs_perslid_key
AND i.ins_alg_ruimte_type = 'P')
persoon,
(SELECT ar.alg_ruimte_upper_nr
FROM alg_ruimte ar
WHERE i.ins_alg_ruimte_key = ar.alg_ruimte_key
AND i.ins_alg_ruimte_type = 'R')
locatie
FROM ins_deel i,
ins_srtdeel isrt,
ins_discipline idc,
(SELECT f.fac_usrdata_omschr, iv.ins_deel_key
FROM fac_usrdata f,
ins_v_srtdeel_kenmerkdeel iv,
ins_kenmerk ik,
ins_srtkenmerk isk
WHERE f.fac_usrdata_key = iv.ins_kenmerkdeel_waarde
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND iv.ins_kenmerk_key = ik.ins_kenmerk_key
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE i.ins_deel_key = maat.ins_deel_key(+)
AND i.ins_srtdeel_key = isrt.ins_srtdeel_key
AND i.ins_deel_verwijder IS NULL
AND i.ins_discipline_key = idc.ins_discipline_key;
CREATE OR REPLACE VIEW dvon_v_rap_art_voorraad
(
-- fclt_3d_discipline_key,
-- catalogus,
-- groep,
productomschrijving,
maat,
aantal_besteld,
op_voorraad,
onvoldoende_voorraad
)
AS
SELECT --fclt_3d_discipline_key,
--catalogus,
--groep,
productomschrijving,
maat,
SUM (aantal) besteld,
op_voorraad,
CASE WHEN op_voorraad - SUM (aantal) < 0 THEN '!' ELSE 'V' END
FROM dvon_v_rap_bes_voorraad_auth
GROUP BY --fclt_3d_discipline_key,
--catalogus,
--groep,
productomschrijving,
maat,
op_voorraad;
CREATE OR REPLACE VIEW dvon_v_rap_impobjsrt
(
objsrtkey,
disciplineomschrijving,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
Uitleenbaar,
Leverancier,
Vervaldatum,
Kenmerksoort,
Bewerken_bij,
Volgnummer,
Verplicht,
Groep
)
AS
SELECT i.ins_srtdeel_key,
itab.ins_discipline_omschrijving,
ig.ins_srtgroep_omschrijving,
i.ins_srtdeel_code,
i.ins_srtdeel_omschrijving,
DECODE (i.ins_srtdeel_uitleenbaar, 1, 'ja', 'nee'),
sub.fac_usrdata_omschr,
i.ins_srtdeel_vervaldatum,
isk.ins_srtkenmerk_omschrijving,
DECODE (ik.ins_kenmerk_bewerkniveau, 'D', 'deel', 'S', 'soort'),
ik.ins_kenmerk_volgnummer,
DECODE (ik.ins_kenmerk_verplicht, 1, 'ja', 'nee'),
ik.ins_kenmerk_groep
FROM ins_srtdeel i,
ins_kenmerk ik,
ins_srtkenmerk isk,
ins_srtgroep ig,
ins_tab_discipline itab,
(SELECT f.fac_usrdata_omschr, i.ins_deel_key
FROM fac_usrdata f, ins_kenmerkdeel i
WHERE i.ins_kenmerkdeel_waarde = f.fac_usrdata_key
AND i.ins_kenmerk_key = 241) sub
WHERE i.ins_srtgroep_key = ig.ins_srtgroep_key
AND ig.ins_discipline_key = itab.ins_discipline_key
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND ik.ins_kenmerk_niveau = 'S'
AND ik.ins_srtinstallatie_key = i.ins_srtdeel_key
AND i.ins_srtdeel_key = sub.ins_deel_key(+)
AND i.ins_srtdeel_verwijder IS NULL
AND ik.ins_kenmerk_verwijder IS NULL;
CREATE OR REPLACE VIEW DVON_V_RAP_ORGKOST
(
Bedrijfsnaam,
Afdelingscodeparent,
Afdelingscode,
Afdelingsomschrijving,
Kostenplaats,
Kostenplaatsomschrijving,
KostenplaatsType,
Kostenplaatsbegin,
Kostenplaatseind,
Budgethouder,
KostenplaatsBudget,
KostenplaatsBudgetPeriode,
KostenplaatsExtern,
OpdrachtenFiatteren,
Kostenplaatsgroep,
Kostenplaatsgroepnummer,
Fiatteur_1,
Fiatteur_2,
Fiatteur_3,
Limiet,
Limiet_periode
)
AS
SELECT (SELECT pb.prs_bedrijf_naam
FROM prs_bedrijf pb
WHERE pb.prs_bedrijf_key = 21)
bedrijf,
par.prs_afdeling_naam,
pa.prs_afdeling_naam,
pa.prs_afdeling_omschrijving,
pk.prs_kostenplaats_nr,
pk.prs_kostenplaats_omschrijving,
pk.prs_kostenplaats_module,
TRUNC (pk.prs_kostenplaats_begin),
TRUNC (pk.prs_kostenplaats_eind),
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pk.prs_perslid_key)
budgethouder,
prs_kostenplaats_limiet,
DECODE (pk.prs_kostenplaats_limietperiode, 1, 'M', 2, 'J', 0),
pk.prs_kostenplaats_extern,
pk.prs_kostenplaats_fiat,
pkg.prs_kostenplaatsgrp_oms,
pkg.prs_kostenplaatsgrp_nr,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_perslid_key)
fiat1,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_kostenplaatsgrp_fiat2_key)
fiat2,
(SELECT prs_perslid_oslogin
FROM prs_perslid
WHERE prs_perslid_key = pkg.prs_kostenplaatsgrp_fiat3_key)
fiat3,
pkg.prs_kostenplaatsgrp_limiet,
DECODE (pkg.prs_kostenplaatsgrp_limperiode, 1, 'M', 2, 'J', 0)
FROM prs_afdeling pa,
prs_kostenplaats pk,
prs_kostenplaatsgrp pkg,
(SELECT prs_afdeling_key, prs_afdeling_naam FROM prs_afdeling) par
WHERE pa.prs_afdeling_parentkey = par.prs_afdeling_key(+)
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND pk.prs_kostenplaatsgrp_key = pkg.prs_kostenplaatsgrp_key(+)
AND pk.prs_kostenplaats_verwijder IS NULL
AND pa.prs_afdeling_verwijder IS NULL;
-- t.b.v. de import CATARTIKEL
CREATE OR REPLACE VIEW dvon_v_rap_impcatartikel
(
catalogusnaam,
leverancier,
artikelnr,
groep,
omschrijving,
prijs,
eenheid,
picture,
wijzigdagen,
annuleerdagen,
duedate,
minimumvoorraad,
maximumvoorraad,
opmerking,
objectsoortcode,
kenmerksoort,
volgnummer,
verplicht,
kenmerkgroep
)
AS
SELECT DISTINCT i.ins_discipline_omschrijving,
pb.prs_bedrijf_naam,
b.bes_srtdeel_nr,
bg.bes_srtgroep_omschrijving,
b.bes_srtdeel_omschrijving,
NULL, --prijs is altijd leeg
b.bes_srtdeel_eenheid,
b.bes_srtdeel_image,
b.bes_srtdeel_wijzigdagen,
b.bes_srtdeel_annuleerdagen,
b.bes_srtdeel_vervaldatum,
b.bes_srtdeel_voorraadmin,
b.bes_srtdeel_voorraadmax,
b.bes_srtdeel_opmerking,
sd.ins_srtdeel_code,
bsk.bes_srtkenmerk_omschrijving,
bk.bes_kenmerk_volgnummer,
bk.bes_kenmerk_verplicht,
bk.bes_kenmerk_groep
FROM bes_srtdeel b,
bes_srtgroep bg,
bes_kenmerk bk,
bes_srtkenmerk bsk,
prs_bedrijf pb,
bes_discipline i,
ins_srtdeel sd
WHERE b.prs_bedrijf_key = pb.prs_bedrijf_key
AND b.bes_srtgroep_key = bg.bes_srtgroep_key(+)
AND bg.ins_discipline_key = i.ins_discipline_key(+)
AND b.ins_srtdeel_key = sd.ins_srtdeel_key
AND bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
AND bk.bes_srtinstallatie_key = b.bes_srtdeel_key
AND b.bes_srtdeel_verwijder IS NULL
UNION ALL
SELECT DISTINCT i.ins_discipline_omschrijving,
pb.prs_bedrijf_naam,
b.bes_srtdeel_nr,
bg.bes_srtgroep_omschrijving,
b.bes_srtdeel_omschrijving,
NULL, --prijs is altijd leeg
b.bes_srtdeel_eenheid,
b.bes_srtdeel_image,
b.bes_srtdeel_wijzigdagen,
b.bes_srtdeel_annuleerdagen,
b.bes_srtdeel_vervaldatum,
b.bes_srtdeel_voorraadmin,
b.bes_srtdeel_voorraadmax,
b.bes_srtdeel_opmerking,
sd.ins_srtdeel_code,
NULL, --alle kenmerkvelden leeg, deze union pakt alleen de artikelen zonder kenmerk
NULL,
NULL,
NULL
FROM bes_srtdeel b,
bes_srtgroep bg,
prs_bedrijf pb,
bes_discipline i,
ins_srtdeel sd
WHERE b.prs_bedrijf_key = pb.prs_bedrijf_key
AND b.bes_srtgroep_key = bg.bes_srtgroep_key(+)
AND bg.ins_discipline_key = i.ins_discipline_key(+)
AND b.ins_srtdeel_key = sd.ins_srtdeel_key
AND b.bes_srtdeel_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM bes_kenmerk
WHERE bes_srtinstallatie_key = b.bes_srtdeel_key);
-- Voor het exporteren van bestelde artikelen om later in te lezen via de objectenimport
CREATE OR REPLACE VIEW dvon_v_rap_expbestelling
(
bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
objectidentificatie,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
ingangsdatum,
vervaldatum,
aantal,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
)
AS
SELECT sub.bes_bestelling_key,
d.ins_discipline_omschrijving,
NULL,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
MAX (i.ins_deel_key),
NULL, -- geen opmerking
NULL, -- reserveerbaar is nvt
NULL, -- eenheid is nvt
NULL, -- prijs is nvt
'DVO-ASSEN3', -- locatiecode
'DVO-ASS-MA', -- gebouwcode
'0', -- bouwlaag
'MAGAZIJN', --ruimtenummer
NULL, -- reserveringscope
NULL, -- catalogusnaam
NULL, -- cataloguskostensoort
NULL, -- persoonmatchcode
NULL, -- persoonmatchwaarde
NULL, -- ingangsdatum
NULL, -- vervaldatum
sub.aantal, -- aantal, moet nog omgebogen worden
sub.maat, -- kenmerk 1
-- en hieronder kenmerk 2 tm 20
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM ( SELECT b.bes_bestelling_key,
sd.ins_srtdeel_key,
sd.bes_srtdeel_omschrijving productomschrijving,
maat.fac_usrdata_omschr maat,
SUM (bi.bes_bestelling_item_aantal) aantal
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_kenmerkbesteli bki,
bes_kenmerk bk,
ins_tab_discipline d,
bes_srtdeel sd,
bes_srtgroep sg,
(SELECT f.fac_usrdata_omschr,
f.fac_usrdata_key,
bsk.bes_srtkenmerk_key
FROM fac_usrdata f, bes_srtkenmerk bsk
WHERE bsk.bes_srtkenmerk_upper LIKE '%MAAT%') maat
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key =
boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bki.bes_bestelling_item_key(+) =
bi.bes_bestelling_item_key
AND bki.bes_kenmerk_key = bk.bes_kenmerk_key(+)
AND bk.bes_srtkenmerk_key = maat.bes_srtkenmerk_key(+)
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND maat.fac_usrdata_key(+) =
fac.safe_to_number (bki.bes_kenmerkbesteli_waarde)
GROUP BY (b.bes_bestelling_key,
sd.ins_srtdeel_key,
sd.bes_srtdeel_omschrijving,
-- bi.bes_bestelling_item_aantal,
maat.fac_usrdata_omschr)) sub,
ins_tab_discipline d,
ins_deel i,
ins_srtdeel sd,
ins_srtgroep sg
WHERE sub.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtdeel_key = i.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND sub.ins_srtdeel_key IS NOT NULL
GROUP BY (sub.bes_bestelling_key,
d.ins_discipline_omschrijving,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
sub.aantal,
sub.maat);
-- Bovenstaande view maar dan in formaat voor import EXTRAINS
CREATE OR REPLACE VIEW dvon_v_expbestelling_data
(
bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
objectomschrijving,
nummer,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
)
AS
SELECT bestelling_key,
disciplineomschrijving,
disciplinekostensoort,
groepsoortomschrijving,
objectsoortcode,
objectsoortomschrijving,
objectidentificatie,
ROWNUM,
objectopmerking,
reserveerbaar,
eenheid,
prijs,
locatiecode,
gebouwcode,
bouwlaagvolgnummer,
ruimtenummer,
reserveringscope,
catalogusnaam,
cataloguskostensoort,
persoonmatchcode,
persoonmatchwaarde,
maat,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20
FROM dvon_v_rap_expbestelling d
CROSS JOIN
( SELECT ROWNUM n
FROM DUAL
CONNECT BY LEVEL <=
(SELECT MAX (aantal)
FROM dvon_v_rap_expbestelling))
WHERE n <= aantal
ORDER BY objectsoortcode;
-- Maten in de Dirksen import die niet in Facilitor staan
CREATE OR REPLACE VIEW DVON_V_RAP_DIRKSENMAATLOG
(
DIRKSEN_ORDNR,
GROEPSOORT,
OBJECTSOORT,
MISSENDE_MAAT
)
AS
SELECT dd.ordernummer,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_omschrijving,
dd.maat
FROM dvon_imp_dirksen dd,
ins_discipline d,
ins_deel i,
ins_srtdeel sd,
ins_srtgroep sg,
ins_srtkenmerk isk,
ins_v_srtdeel_kenmerk ik,
fac_kenmerkdomein fk
WHERE dd.artikelnummer = sd.ins_srtdeel_nr
AND i.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND dd.maat IS NOT NULL
AND isk.ins_srtkenmerk_upper LIKE '%MAAT%'
AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
AND ik.ins_srtdeel_upper = UPPER (sd.ins_srtdeel_omschrijving)
AND isk.fac_kenmerkdomein_key = fk.fac_kenmerkdomein_key
AND UPPER (dd.regeltype) IN ('SPECIALS', 'STANDAARD ARTIKEL')
AND UPPER (dd.maat) NOT IN
(SELECT f.fac_usrdata_upper
FROM fac_usrdata f
WHERE f.fac_usrtab_key = fk.fac_usrtab_key
AND f.fac_usrdata_verwijder IS NULL) -- alleen missende maten
GROUP BY (dd.ordernummer,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_omschrijving,
dd.maat);
CREATE OR REPLACE VIEW dvon_v_rap_bes_tracking
(
bestelling_key,
bestelaanvraagnr,
bestelling_status,
besteld_voor,
besteld_door,
fiatteur,
besfi,
besacp,
besrej,
besupd
)
AS
SELECT b.bes_bestelling_key,
'A-' || b.bes_bestelling_key bestelaanvraagnr,
bs.bes_bestellingstatuses_omschr status,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
besteld_voor,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.prs_perslid_key)
besteld_door,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = b.bes_bestelling_fiat_user)
fiatteur,
(SELECT MAX (t.fac_tracking_key)
FROM fac_tracking t
WHERE t.fac_tracking_refkey = b.bes_bestelling_key
AND t.fac_srtnotificatie_key = 6)
besfi,
(SELECT MAX (t.fac_tracking_key)
FROM fac_tracking t
WHERE t.fac_tracking_refkey = b.bes_bestelling_key
AND t.fac_srtnotificatie_key = 2)
besacp,
(SELECT MAX (t.fac_tracking_key)
FROM fac_tracking t
WHERE t.fac_tracking_refkey = b.bes_bestelling_key
AND t.fac_srtnotificatie_key = 10)
besrej,
(SELECT MAX (t.fac_tracking_key)
FROM fac_tracking t
WHERE t.fac_tracking_refkey = b.bes_bestelling_key
AND t.fac_srtnotificatie_key = 11)
besupd
FROM bes_bestelling b, bes_bestellingstatuses bs
WHERE b.bes_bestelling_status = bs.bes_bestellingstatuses_key;
CREATE OR REPLACE VIEW dvon_v_rap_bes_all
(
bestelling_key,
bestelaanvraagnr,
bestelling_status,
besteld_voor,
besteld_door,
tijdstip_fiat,
fiatteur,
tijdstip_acp,
acp_door,
tijdstip_afgwz,
afgwz_door,
tijdstip_wijziging,
gewijzgid_door
)
AS
SELECT
v.bestelling_key,
v.bestelaanvraagnr,
v.bestelling_status,
v.besteld_voor,
v.besteld_door,
(SELECT t.fac_tracking_datum FROM fac_tracking t where t.fac_tracking_key = v.besfi) tijdstip_fiat,
v.fiatteur,
(SELECT t.fac_tracking_datum FROM fac_tracking t where t.fac_tracking_key = v.besacp) tijdstip_acp,
(SELECT pf.prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames pf where t.fac_tracking_key = v.besacp AND t.prs_perslid_key = pf.prs_perslid_key) acp_door,
(SELECT t.fac_tracking_datum FROM fac_tracking t where t.fac_tracking_key = v.besrej) tijdstip_afgwz,
(SELECT pf.prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames pf where t.fac_tracking_key = v.besrej AND t.prs_perslid_key = pf.prs_perslid_key) afgwz_door,
(SELECT t.fac_tracking_datum FROM fac_tracking t where t.fac_tracking_key = v.besupd) tijdstip_wijziging,
(SELECT pf.prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames pf where t.fac_tracking_key = v.besupd AND t.prs_perslid_key = pf.prs_perslid_key) gewijzigd_door
FROM
dvon_v_rap_bes_tracking v;
CREATE OR REPLACE VIEW dvon_v_noti_bes_deel
(
code,
sender,
receiver,
text,
key,
xkey
)
AS
SELECT DISTINCT
'CUST01',
NULL,
b.prs_perslid_key,
'Deellevering voor bestelling met nummer '
|| b.bes_bestelling_key,
b.bes_bestelling_key,
NULL
FROM bes_bestelling b,
(SELECT
bes_bestelling_key,
SUM (bes_bestelling_item_aantalontv) aantalontv,
SUM (bes_bestelling_item_aantal) aantal
FROM bes_bestelling_item
GROUP BY bes_bestelling_key) bi,
bes_bestelopdr bo,
fac_tracking fa
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.aantalontv IS NOT NULL -- Er moeten artikelen ontvangen zijn voor een deellevering
AND bi.aantalontv < bi.aantal -- Levering is nog niet compleet
AND fa.fac_tracking_refkey = bo.bes_bestelopdr_key
AND fa.fac_srtnotificatie_key = 25 -- BESUPD er is iets geleverd
AND b.bes_bestelling_key = substr(bo.bes_bestelopdr_id, 1, instr(bo.bes_bestelopdr_id, '/')-1)
AND fa.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval
/ 24
FROM fac_notificatie_job
WHERE fac_notificatie_job_view =
'DVON_V_NOTI_BES_DEEL')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE fac_notificatie_job_view =
'DVON_V_NOTI_BES_DEEL');
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile