Files
Customer/NFIT/nfit.sql
Maykel Geerdink bf315f5556 NFIT#13892
svn path=/Customer/trunk/; revision=13601
2008-05-19 14:59:24 +00:00

1550 lines
65 KiB
SQL
Raw Blame History

-- Script containing customer specific configuration sql statements for NFIT Nefit Buderus Deventer
-- (c) 2006 Facilitor/Dijkoraad IT bv
-- $Revision: 14 $
-- $Modtime: 19-05-08 16:54 $
--
-- Support: +31 53 4800700
set echo on
SPOOL xNFIT.LST
CREATE OR REPLACE VIEW nfit_v_iqbs (bestellingkey,
bestelopdrkey,
bestelopdrprefix,
bestelopdrnummer,
crediteurennummer,
bedrag,
projectnummer,
kostensoort,
kostenplaats,
budget,
afdelingscode,
status,
teexporteren
)
AS
SELECT b.bes_bestelling_key bestellingkey,
bo.bes_bestelopdr_key bestelopdrkey,
'11' bestelopdrprefix,
'11'
|| bo.bes_bestelopdr_key bestelopdrnummer,
(SELECT b.prs_leverancier_nr
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key) crediteurennummer,
to_char(SUM ( (NVL (boi.bes_bestelopdr_item_aantalontv, 0) - NVL (boi.bes_bestelopdr_item_aantalexp, 0))
* NVL (boi.bes_bestelopdr_item_prijs, 0)
), '9999999990.99') bedrag,
(SELECT kbl.bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell kbl, bes_kenmerk bk
WHERE kbl.bes_kenmerk_key = bk.bes_kenmerk_key
AND bk.bes_srtkenmerk_key = 2
AND kbl.bes_bestelling_key = b.bes_bestelling_key) projectnummer,
NVL ((SELECT ks.prs_kostensoort_oms
FROM bes_kenmerkbestell kbl, prs_kostensoort ks, bes_kenmerk bk
WHERE kbl.bes_kenmerkbestell_waarde = ks.prs_kostensoort_key
AND kbl.bes_kenmerk_key = bk.bes_kenmerk_key
AND bk.bes_srtkenmerk_key = 27
AND kbl.bes_bestelling_key = b.bes_bestelling_key),
(SELECT prs_kostensoort_oms
FROM prs_kostensoort kst
WHERE kst.prs_kostensoort_key = itd.prs_kostensoort_key)
) kostensoort,
(SELECT k.prs_kostenplaats_nr
FROM prs_kostenplaats k
WHERE k.prs_kostenplaats_key = b.prs_kostenplaats_key) kostenplaats,
(SELECT kbl.bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell kbl, bes_kenmerk bk
WHERE kbl.bes_kenmerk_key = bk.bes_kenmerk_key
AND bk.bes_srtkenmerk_key = 23
AND kbl.bes_bestelling_key = b.bes_bestelling_key) budget,
(SELECT a.prs_afdeling_naam
FROM prs_afdeling a, prs_perslid p
WHERE p.prs_perslid_key = b.prs_perslid_key AND a.prs_afdeling_key = p.prs_afdeling_key) afdelingscode,
bo.bes_bestelopdr_status status,
(SELECT fud.fac_usrdata_omschr
FROM bes_kenmerkbestell kbl, fac_usrdata fud, bes_kenmerk bk
WHERE kbl.bes_kenmerkbestell_waarde = fud.fac_usrdata_key
AND kbl.bes_kenmerk_key = bk.bes_kenmerk_key
AND bk.bes_srtkenmerk_key = 28
AND kbl.bes_bestelling_key = b.bes_bestelling_key) teexporteren
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
ins_srtdeel isd,
ins_srtgroep isg,
ins_tab_discipline itd
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 isd.ins_srtdeel_key = bi.ins_srtdeel_key
AND itd.ins_discipline_key = isg.ins_discipline_key
AND isg.ins_srtgroep_key = isd.ins_srtgroep_key
AND bo.bes_bestelopdr_status IN (4, 6)
AND (SELECT fud.fac_usrdata_omschr
FROM bes_kenmerkbestell kbl, fac_usrdata fud, bes_kenmerk bk
WHERE kbl.bes_kenmerkbestell_waarde = fud.fac_usrdata_key
AND kbl.bes_kenmerk_key = bk.bes_kenmerk_key
AND bk.bes_srtkenmerk_key = 28
AND kbl.bes_bestelling_key = b.bes_bestelling_key) = 'Ja' -- te_exporteren
AND (NVL (boi.bes_bestelopdr_item_aantalontv, 0) - NVL (boi.bes_bestelopdr_item_aantalexp, 0)) > 0
AND (SELECT a1.prs_afdeling_key1
FROM bes_bestelling b1,
prs_perslid p1,
prs_v_afdeling_boom a1
WHERE b1.prs_perslid_key = p1.prs_perslid_key
AND p1.prs_afdeling_key = a1.prs_afdeling_key
AND b1.bes_bestelling_key = b.bes_bestelling_key) = 3 -- business unit TTNL
GROUP BY b.bes_bestelling_key,
bo.bes_bestelopdr_key,
b.prs_kostenplaats_key,
b.prs_perslid_key,
bo.bes_bestelopdr_status,
bo.prs_bedrijf_key,
itd.prs_kostensoort_key
UNION
SELECT m.mld_melding_key bestellingkey,
mo.mld_opdr_key bestelopdrkey,
(SELECT sd.ins_srtdiscipline_prefix
FROM mld_discipline md, ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
AND md.ins_discipline_key = m.mld_ins_discipline_key) bestelopdrprefix,
(SELECT sd.ins_srtdiscipline_prefix
FROM mld_discipline md, ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
AND md.ins_discipline_key = m.mld_ins_discipline_key)
|| mo.mld_melding_key bestelopdrnummer,
(SELECT b.prs_leverancier_nr
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = mo.mld_uitvoerende_keys) crediteurennummer,
to_char(mld_opdr_kosten, '9999999990.99') bedrag,
(SELECT v.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr v, mld_kenmerk mk
WHERE v.mld_kenmerk_key = mk.mld_kenmerk_key
AND mk.mld_srtkenmerk_key = 53
AND v.mld_opdr_key = mo.mld_opdr_key) projectnummer,
NVL ((SELECT ks.prs_kostensoort_oms
FROM mld_kenmerkopdr v, prs_kostensoort ks, mld_kenmerk mk
WHERE v.mld_kenmerkopdr_waarde = ks.prs_kostensoort_key
AND v.mld_kenmerk_key = mk.mld_kenmerk_key
AND mk.mld_srtkenmerk_key = 29
AND v.mld_opdr_key = mo.mld_opdr_key),
NVL ((SELECT prs_kostensoort_oms
FROM prs_kostensoort kst, mld_stdmelding stdm
WHERE kst.prs_kostensoort_key = stdm.prs_kostensoort_key
AND stdm.mld_stdmelding_key = m.mld_stdmelding_key),
(SELECT prs_kostensoort_oms
FROM prs_kostensoort kst, mld_stdmelding stdm, ins_tab_discipline di
WHERE kst.prs_kostensoort_key = di.prs_kostensoort_key
AND di.ins_discipline_key = stdm.mld_ins_discipline_key
AND stdm.mld_stdmelding_key = m.mld_stdmelding_key)
)
) kostensoort,
(SELECT k.prs_kostenplaats_nr
FROM prs_kostenplaats k
WHERE k.prs_kostenplaats_key = mo.prs_kostenplaats_key) kostenplaats,
(SELECT v.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr v, mld_kenmerk mk
WHERE v.mld_kenmerk_key = mk.mld_kenmerk_key
AND mk.mld_srtkenmerk_key = 52
AND v.mld_opdr_key = mo.mld_opdr_key) budget,
(SELECT a.prs_afdeling_naam
FROM prs_afdeling a, prs_perslid p
WHERE p.prs_perslid_key = m.prs_perslid_key AND a.prs_afdeling_key = p.prs_afdeling_key) afdelingscode,
mo.mld_statusopdr_key status,
(SELECT fud.fac_usrdata_omschr
FROM mld_kenmerkopdr v, fac_usrdata fud, mld_kenmerk mk
WHERE v.mld_kenmerkopdr_waarde = fud.fac_usrdata_key
AND v.mld_kenmerk_key = mk.mld_kenmerk_key
AND mk.mld_srtkenmerk_key = 30
AND v.mld_opdr_key = mo.mld_opdr_key) teexporteren
FROM mld_melding m, mld_opdr mo
WHERE mo.mld_melding_key = m.mld_melding_key
AND mo.mld_statusopdr_key IN (6) -- 5 niet voor meldingen
AND (SELECT fud.fac_usrdata_omschr
FROM mld_kenmerkopdr v, fac_usrdata fud, mld_kenmerk mk
WHERE v.mld_kenmerkopdr_waarde = fud.fac_usrdata_key
AND v.mld_kenmerk_key = mk.mld_kenmerk_key
AND mk.mld_srtkenmerk_key = 30
AND v.mld_opdr_key = mo.mld_opdr_key) = 'Ja' -- te_exporteren
AND (SELECT a1.prs_afdeling_key1
FROM mld_melding m1,
prs_perslid p1,
prs_v_afdeling_boom a1
WHERE m1.mld_melding_user_key = p1.prs_perslid_key
AND p1.prs_afdeling_key = a1.prs_afdeling_key
AND m1.mld_melding_key = m.mld_melding_key) = 3 -- business unit TTNL
ORDER BY 3, 1;
CREATE OR REPLACE PROCEDURE nfit_select_iqbs (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
-- View heeft alles al. geen acties nodig
NULL;
END;
/
CREATE OR REPLACE PROCEDURE nfit_export_iqbs (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR exportregels
IS
SELECT bestellingkey, bestelopdrkey, bestelopdrnummer,
bestelopdrnummer
|| ';'
|| crediteurennummer
|| ';'
|| bedrag
|| ';'
|| projectnummer
|| ';'
|| kostensoort
|| ';'
|| kostenplaats
|| ';'
|| budget
|| ';'
|| afdelingscode regel,
status
FROM nfit_v_iqbs;
v_filehandle UTL_FILE.file_type;
v_newline VARCHAR2 (1000);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
l_cnt NUMBER;
lp_filename VARCHAR2 (200);
BEGIN
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname
AND imp_log_datum < SYSDATE - 365; -- Logging blijft nu 1 jaar bewaard.
l_cnt := 0;
v_filehandle := UTL_FILE.fopen (p_filedir, p_filename, 'w');
fac.imp_writelog (p_applname,
p_applrun,
'I',
'Export naar ' || p_filedir || '\' || lp_filename,
''
);
FOR expregel IN exportregels
LOOP
BEGIN
v_newline := expregel.regel;
UTL_FILE.put_line (v_filehandle, v_newline);
IF (SUBSTR (expregel.regel, 1, 2) = '11') -- catalogus bestelling
THEN
-- Aantal te exporteren aanpassen
-- Deze moet gelijk worden aan het aantal dat is ontvangen
UPDATE bes_bestelopdr_item
SET bes_bestelopdr_item_aantalexp = bes_bestelopdr_item_aantalontv
WHERE bes_bestelopdr_key = expregel.bestelopdrkey;
COMMIT;
-- Als van een item alles geleverd is dan kan status ook op AV
-- Eerst op TV zodat ook bestelaanvragen op TV komen door trigger
UPDATE bes_bestelopdr_item
SET bes_bestelopdr_item_status = 6
WHERE bes_bestelopdr_key = expregel.bestelopdrkey
AND bes_bestelopdr_item_aantal = bes_bestelopdr_item_aantalexp;
COMMIT;
UPDATE bes_bestelopdr_item
SET bes_bestelopdr_item_status = 7
WHERE bes_bestelopdr_key = expregel.bestelopdrkey
AND bes_bestelopdr_item_aantal = bes_bestelopdr_item_aantalexp;
COMMIT;
-- Dit gaat niet automatisch als alle items op AV staan
IF (expregel.status = 6) -- status bestelopdr is "geleverd TV"
THEN
-- Bestelopdracht AV verklaren als status is 6 (Geleverd TV)
UPDATE bes_bestelopdr
SET bes_bestelopdr_status = 7
WHERE bes_bestelopdr_key = expregel.bestelopdrkey;
COMMIT;
--
-- Bestelling_items AV verklaren als bestelopdracht AV is
UPDATE bes_bestelling_item
SET bes_bestelling_item_status = 7
WHERE bes_bestelling_key = expregel.bestellingkey
AND bes_bestelling_item_aantal = bes_bestelling_item_aantalontv;
COMMIT;
-- Bestelling AV verklaren als bestel_items AV is
UPDATE bes_bestelling
SET bes_bestelling_status = 7
WHERE bes_bestelling_key = expregel.bestellingkey
AND bes_bestelling_item_cnt = bes_bestelling_item_cnt_lev;
UPDATE bes_bestelling
SET bes_bestelling_verwerkt = SYSDATE
WHERE bes_bestelling_key = expregel.bestellingkey
AND bes_bestelling_item_cnt = bes_bestelling_item_cnt_lev;
COMMIT;
END IF;
ELSIF expregel.status = 6 -- incidentele bestelling meldingen
THEN
-- Meldingsopdracht AV verklaren als status is 6 (Geleverd TV)
UPDATE mld_opdr
SET mld_statusopdr_key = 7
WHERE mld_opdr_key = expregel.bestelopdrkey;
COMMIT;
END IF;
l_cnt := l_cnt + 1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
UTL_FILE.fclose (v_filehandle);
-- EOF reached ?? er wordt geen file uitgelezen???
EXIT;
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
END;
END LOOP;
fac.imp_writelog (p_applname,
p_applrun,
'I',
'Aantal geschreven records: ' || l_cnt,
''
);
UTL_FILE.fclose (v_filehandle); -- close file
COMMIT; -- voor de zekerheid
EXCEPTION
WHEN UTL_FILE.invalid_operation
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_OPERATION (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname,
p_applrun,
'E',
v_errormsg,
'Controleer bestandsnaam van importbestand'
);
WHEN UTL_FILE.invalid_filehandle
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_FILEHANDLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
WHEN UTL_FILE.invalid_path
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_PATH (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_applname,
p_applrun,
'E',
v_errormsg,
'Controleer directory van importbestand (init.ora bevat utl_file_dir setting om te beschrijven welke directories te gebruiken zijn'
);
WHEN UTL_FILE.read_error
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.READ_ERROR (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
WHEN OTHERS
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
END;
/
-- IMPORT NFIT#005
-- View van de import/export logging
CREATE OR REPLACE VIEW NFIT_V_IMPLOG
(FCLT_F_APPLICATIE, LOG_DATUM, FCLT_F_STATUS, OMSCHRIJVING, HINT)
AS
SELECT imp_log_applicatie, imp_log_datum, imp_log_status, imp_log_omschrijving, imp_log_hint
FROM imp_log;
-- Importeren leveranciersgegevens
CREATE OR REPLACE PROCEDURE nfit_import_baan (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
v_filehandle UTL_FILE.file_type;
v_newline VARCHAR2 (1000); -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De importvelden
v_bedrijfsnaam VARCHAR2 (100);
v_post_adres VARCHAR2 (100);
v_post_postcode VARCHAR2 (100);
v_post_plaats VARCHAR2 (100);
v_post_land VARCHAR2 (100);
v_telefoon VARCHAR2 (100);
v_contactpersoon VARCHAR2 (100);
v_leveranciersnummer VARCHAR2 (100);
v_bezoek_adres VARCHAR2 (100);
v_bezoek_postcode VARCHAR2 (100);
v_bezoek_plaats VARCHAR2 (100);
v_bezoek_land VARCHAR2 (100);
v_fax VARCHAR2 (100);
v_branche_code VARCHAR2 (100);
v_betalingsconditie VARCHAR2 (100);
v_taal VARCHAR2 (100);
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
BEGIN
-- Clear my old logs
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
v_filehandle := UTL_FILE.fopen (p_filedir, p_filename, 'r');
v_fielddelimitor := '|';
header_is_valid := TRUE; -- No header present
DELETE FROM nfit_imp_baan;
LOOP
BEGIN
UTL_FILE.get_line (v_filehandle, v_newline);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
UTL_FILE.fclose (v_filehandle);
-- EOF reached
fac.imp_writelog (p_applname, p_applrun, 'I', 'EOF reached', '');
EXIT;
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
END;
fac.imp_getfield (v_newline, v_fielddelimitor, v_bedrijfsnaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_post_adres);
fac.imp_getfield (v_newline, v_fielddelimitor, v_post_postcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_post_plaats);
fac.imp_getfield (v_newline, v_fielddelimitor, v_post_land);
fac.imp_getfield (v_newline, v_fielddelimitor, v_telefoon);
fac.imp_getfield (v_newline, v_fielddelimitor, v_contactpersoon);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leveranciersnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoek_adres);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoek_postcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoek_plaats);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoek_land);
fac.imp_getfield (v_newline, v_fielddelimitor, v_fax);
fac.imp_getfield (v_newline, v_fielddelimitor, v_branche_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_betalingsconditie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_taal);
IF (header_is_valid = FALSE)
THEN
header_is_valid := TRUE;
ELSE
IF header_is_valid = TRUE AND v_leveranciersnummer IS NOT NULL
THEN
INSERT INTO nfit_imp_baan
(bedrijfsnaam,
post_adres,
post_postcode,
post_plaats,
post_land,
telefoon,
contactpersoon,
leveranciersnummer,
bezoek_adres,
bezoek_postcode,
bezoek_plaats,
bezoek_land,
fax,
branche_code,
betalingsconditie,
taal
)
VALUES (SUBSTR (LTRIM(RTRIM(v_bedrijfsnaam)), 1, 60),
SUBSTR (LTRIM(RTRIM(v_post_adres)), 1, 35),
SUBSTR (LTRIM(RTRIM(v_post_postcode)), 1, 12),
SUBSTR (LTRIM(RTRIM(v_post_plaats)), 1, 35),
SUBSTR (LTRIM(RTRIM(v_post_land)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_telefoon)), 1, 20),
SUBSTR (LTRIM(RTRIM(v_contactpersoon)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_leveranciersnummer)), 1, 20),
SUBSTR (LTRIM(RTRIM(v_bezoek_adres)), 1, 35),
SUBSTR (LTRIM(RTRIM(v_bezoek_postcode)), 1, 12),
SUBSTR (LTRIM(RTRIM(v_bezoek_plaats)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_bezoek_land)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_fax)), 1, 20),
SUBSTR (LTRIM(RTRIM(v_branche_code)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_betalingsconditie)), 1, 30),
SUBSTR (LTRIM(RTRIM(v_taal)), 1, 30)
);
END IF;
END IF;
END LOOP;
IF (header_is_valid = FALSE)
THEN
fac.imp_writelog
(p_applname,
p_applrun,
'E',
'Invalid import file',
'Er is geen geldige Header aangetroffen in het importbestand'
);
END IF;
EXCEPTION
WHEN UTL_FILE.invalid_operation
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_OPERATION (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname,
p_applrun,
'E',
v_errormsg,
'Controleer bestandsnaam van importbestand'
);
WHEN UTL_FILE.invalid_filehandle
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_FILEHANDLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
WHEN UTL_FILE.invalid_path
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.INVALID_PATH (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_applname,
p_applrun,
'E',
v_errormsg,
'Controleer directory van importbestand (init.ora bevat utl_file_dir setting om te beschrijven welke directories te gebruiken zijn'
);
WHEN UTL_FILE.read_error
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'UTL_FILE.READ_ERROR (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
WHEN OTHERS
THEN
UTL_FILE.fclose (v_filehandle);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
END;
/
-- Updaten leveranciersgegevens
CREATE OR REPLACE PROCEDURE nfit_update_baan (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
/*
1. Technische documentatie: FSN#1426.doc (09-10-2006)
*/
-- Constanten
c_maxvariation NUMBER := 20;
c_commitbuffer NUMBER := 1000;
-- om de zoveel committen
v_buffercount NUMBER := 0;
CURSOR c_bedr_del
IS
SELECT b.prs_bedrijf_key,
b.prs_bedrijf_naam,b.prs_bedrijf_intern
FROM prs_bedrijf b,
nfit_imp_baan bn
WHERE b.prs_leverancier_nr = bn.leveranciersnummer(+)
AND b.prs_bedrijf_naam IS NOT NULL
AND bn.bedrijfsnaam IS NULL
AND b.prs_bedrijf_leverancier IS NOT NULL
AND b.prs_bedrijf_verwijder IS NULL
ORDER BY 2, 1;
CURSOR c_bedr_upd
IS
SELECT b.prs_bedrijf_key prs_bedrijf_key,
bn.bedrijfsnaam prs_bedrijf_naam,
bn.post_postcode prs_bedrijf_post_postcode,
bn.post_adres prs_bedrijf_post_adres,
bn.post_plaats prs_bedrijf_post_plaats,
bn.post_land prs_bedrijf_post_land,
bn.telefoon prs_bedrijf_telefoon,
bn.contactpersoon prs_bedrijf_contact_persoon,
bn.leveranciersnummer prs_leverancier_nr,
bn.bezoek_adres prs_bedrijf_bezoek_adres,
bn.bezoek_postcode prs_bedrijf_bezoek_postcode,
bn.bezoek_plaats prs_bedrijf_bezoek_plaats,
bn.bezoek_land prs_bedrijf_bezoek_land,
bn.fax prs_bedrijf_fax,
bn.branche_code branche_code,
bn.betalingsconditie betalingsconditie,
bn.taal taal
FROM nfit_imp_baan bn,
prs_bedrijf b
WHERE bn.leveranciersnummer = b.prs_leverancier_nr(+)
AND b.prs_bedrijf_verwijder(+) IS NULL
--AND bn.leveranciersnummer LIKE 'AC0016'
ORDER BY bn.bedrijfsnaam, b.prs_leverancier_nr;
v_kenmerk_branche_code_key NUMBER (10);
v_kenmerk_bconditie_key NUMBER (10);
v_kenmerk_taal_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_kenmerklink_branche_key NUMBER (10);
v_kenmerklink_bconditie_key NUMBER (10);
v_kenmerklink_taal_key NUMBER (10);
v_find NUMBER (10);
rec_bedr_del c_bedr_del%ROWTYPE;
rec_bedr_upd c_bedr_upd%ROWTYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
v_action VARCHAR (10);
v_count NUMBER (10);
v_update BOOLEAN;
v_filehandle UTL_FILE.file_type;
v_aktie VARCHAR (10);
v_bedrijf_count_imp NUMBER;
v_bedrijf_count_fclt NUMBER;
v_bedrijf_newcount_fclt NUMBER;
currentversion fac_module.fac_module_version%TYPE;
l_validatie NUMBER;
BEGIN
-- Clear my old logs
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname
AND imp_log_run <> p_applrun;
COMMIT;
v_update := TRUE;
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_applname, p_applrun, 'I', 'Facilitor Crediteuren import version ' || currentversion, '$Revision: 14 $');
-- #Import
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_bedrijf_count_imp
FROM nfit_imp_baan;
-- Informatieve logging, zien we gelijk hoe laat het was
fac.imp_writelog (p_applname, p_applrun, 'S', 'Aantal ingelezen crediteuren: ' || TO_CHAR (v_bedrijf_count_imp), '');
-- #Actieve crediteuren
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_bedrijf_count_fclt
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND prs_bedrijf_naam NOT LIKE 'INACTIEF:%';
-- v_baan_count_fclt = 1 bij initiele situatie (of er is maar 1 crediteur aanwezig = > ook doorgaan!)
-- IF v_baan_count_imp = 1
-- OR 100 * ABS (v_baan_count_imp - v_baan_count_fclt) / v_baan_count_fclt > c_maxvariation
IF ((v_bedrijf_count_fclt <> 1) AND 1=2
AND ((v_bedrijf_count_imp = 1)
OR (100 * ABS (v_bedrijf_count_imp - v_bedrijf_count_fclt) / v_bedrijf_count_fclt > c_maxvariation)))
THEN
fac.imp_writelog (p_applname,
p_applrun,
'E',
'Het verschil tussen de actieve crediteuren ('
|| TO_CHAR (v_bedrijf_count_fclt)
|| ') en te importeren aantallen ('
|| TO_CHAR (v_bedrijf_count_imp)
|| ') is te groot',
'Zie Specificaties: De afwijking is teveel en bedraagt '
|| TO_CHAR (100 * ABS (v_bedrijf_count_fclt - v_bedrijf_count_imp) / v_bedrijf_count_fclt,
'9999999D9'
)
|| '%.'
);
RETURN;
END IF;
-- Controle: kenmerk "Branchecode" aanwezig?
IF v_update
THEN
BEGIN
v_errormsg := 'kenmerk "Branchecode" bestaat niet';
-- Bepaal de key van kenmerk "Branchecode"
-- kenmerk_key is 1023
SELECT prs_kenmerk_key
INTO v_kenmerk_branche_code_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Branchecode'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'kenmerk "Branchecode" aanmaken';
fac.imp_writelog (p_applname, p_applrun, 'I', v_errormsg, v_errorhint);
-- Kenmerk bestaat kennelijk niet, maak 'm maar aan
INSERT INTO prs_kenmerk
(prs_kenmerk_niveau,
prs_kenmerk_volgnr,
prs_kenmerk_omschrijving,
prs_kenmerk_hint,
prs_kenmerk_kenmerktype,
prs_kenmerk_lengte
)
VALUES ('B',
110,
'Branchecode',
'Branchecode',
'C',
30
);
COMMIT;
-- Wat is de key van deze nieuwe geworden?
SELECT prs_kenmerk_key
INTO v_kenmerk_branche_code_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Branchecode'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C'
AND prs_kenmerk_verwijder IS NULL;
WHEN OTHERS
THEN
v_errorhint := 'kenmerk_key van kenmerk "Branchecode" kan niet bepaald worden';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END;
END IF;
-- Controle: kenmerk "Betalingsconditie" aanwezig?
IF v_update
THEN
BEGIN
v_errormsg := 'kenmerk "Betalingsconditie" bestaat niet';
-- Bepaal de key van kenmerk "Betalingsconditie"
-- kenmerk_key is 1022
SELECT prs_kenmerk_key
INTO v_kenmerk_bconditie_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Betalingsconditie'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'kenmerk "Betalingsconditie" aanmaken';
fac.imp_writelog (p_applname, p_applrun, 'I', v_errormsg, v_errorhint);
-- Kenmerk bestaat kennelijk niet, maak 'm maar aan
INSERT INTO prs_kenmerk
(prs_kenmerk_niveau,
prs_kenmerk_volgnr,
prs_kenmerk_omschrijving,
prs_kenmerk_hint,
prs_kenmerk_kenmerktype,
prs_kenmerk_lengte
)
VALUES ('B',
100,
'Betalingsconditie',
'Betalingsvoorwaarde',
'C',
30
);
COMMIT;
-- Wat is de key van deze nieuwe geworden?
SELECT prs_kenmerk_key
INTO v_kenmerk_bconditie_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Betalingsconditie'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C'
AND prs_kenmerk_verwijder IS NULL;
WHEN OTHERS
THEN
v_errorhint := 'kenmerk_key van kenmerk "Betalingsconditie" kan niet bepaald worden';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END;
END IF;
-- Controle: kenmerk "Taal" aanwezig?
IF v_update
THEN
BEGIN
v_errormsg := 'kenmerk "Taal" bestaat niet';
-- Bepaal de key van kenmerk "Taal"
-- kenmerk_key is 1042
SELECT prs_kenmerk_key
INTO v_kenmerk_taal_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Taal'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'kenmerk "Taal" aanmaken';
fac.imp_writelog (p_applname, p_applrun, 'I', v_errormsg, v_errorhint);
-- Kenmerk bestaat kennelijk niet, maak 'm maar aan
INSERT INTO prs_kenmerk
(prs_kenmerk_niveau,
prs_kenmerk_volgnr,
prs_kenmerk_omschrijving,
prs_kenmerk_hint,
prs_kenmerk_kenmerktype,
prs_kenmerk_lengte
)
VALUES ('B',
120,
'Taal',
'Taal',
'C',
30
);
COMMIT;
-- Wat is de key van deze nieuwe geworden?
SELECT prs_kenmerk_key
INTO v_kenmerk_taal_key
FROM prs_kenmerk
WHERE prs_kenmerk_omschrijving = 'Taal'
AND prs_kenmerk_niveau = 'B'
AND prs_kenmerk_kenmerktype = 'C'
AND prs_kenmerk_verwijder IS NULL;
WHEN OTHERS
THEN
v_errorhint := 'kenmerk_key van kenmerk "Taal" kan niet bepaald worden';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END;
END IF;
-- Delete
v_errormsg := 'Try to open cursor';
v_action := 'DELETE';
FOR rec_bedr_del IN c_bedr_del
LOOP
BEGIN
v_bedrijf_key := rec_bedr_del.prs_bedrijf_key;
v_errormsg := 'Inactiveren van het bedrijf is NIET gelukt';
v_errorhint := 'Inactiveren van het bedrijf is NIET gelukt. Bedrijf met bedrijfsnaam ' || rec_bedr_del.prs_bedrijf_naam;
UPDATE prs_bedrijf
SET prs_bedrijf_naam = SUBSTR ('INACTIEF: ' || prs_bedrijf_naam, 1, 60)
WHERE prs_bedrijf_key = v_bedrijf_key
AND prs_bedrijf_naam NOT LIKE 'INACTIEF:%';
COMMIT;
fac.imp_writelog (p_applname,
p_applrun,
'C',
'Bedrijf als INACTIEF gemarkeerd of was al INACTIEF, bedrijfscode: ' || rec_bedr_del.prs_bedrijf_naam,
''
);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
COMMIT;
-- Update
v_errormsg := 'Try to open cursor';
v_action := 'UPDATE';
FOR rec_bedr_upd IN c_bedr_upd
LOOP
BEGIN
v_errorhint := 'Het bedrijf kan niet bepaald worden ' || rec_bedr_upd.prs_bedrijf_naam;
-- Init
v_update := TRUE;
v_bedrijf_key := 0;
IF rec_bedr_upd.prs_bedrijf_key IS NULL
THEN
v_aktie := 'INSERT';
v_errormsg := 'Bedrijfsgegevens kunnen niet toegevoegd worden';
ELSE
v_aktie := 'UPDATE';
v_errormsg := 'Bedrijfsgegevens kunnen niet gewijzigd worden';
END IF;
-- *** Controle verplichte gegevens + ophalen extra informatie ***
-- Controle: PRS_LEVERANCIER_NR
IF v_update AND rec_bedr_upd.prs_leverancier_nr IS NULL
THEN
v_errorhint := 'Bedrijf heeft geen prs_leverancier_nr; bedrijfsnaam: ' || rec_bedr_upd.prs_bedrijf_naam;
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: PRS_BEDRIJF_NAAM
IF rec_bedr_upd.prs_bedrijf_naam IS NULL
THEN
v_errorhint := 'Bedrijf heeft geen bedrijfsnaam; bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- *** Daadwerkelijk insert/update prs_bedrijf ***
IF v_update
THEN
BEGIN
IF v_aktie = 'INSERT'
THEN
v_errormsg := 'Bedrijf kan niet worden toegevoegd';
-- De volgende flexkenmerken toevoegen
-- bedr.branche_code,
-- bedr.betalingsconditie,
-- bedr.taal.
INSERT INTO prs_bedrijf
(prs_bedrijf_naam,
prs_bedrijf_post_adres,
prs_bedrijf_post_postcode,
prs_bedrijf_post_plaats,
prs_bedrijf_post_land,
prs_bedrijf_telefoon,
prs_bedrijf_contact_persoon,
prs_leverancier_nr,
prs_bedrijf_bezoek_adres,
prs_bedrijf_bezoek_postcode,
prs_bedrijf_bezoek_plaats,
prs_bedrijf_bezoek_land,
prs_bedrijf_fax,
prs_bedrijf_leverancier,
prs_bedrijf_uitvoerende,
prs_bedrijf_contract
)
VALUES (rec_bedr_upd.prs_bedrijf_naam,
rec_bedr_upd.prs_bedrijf_post_adres,
rec_bedr_upd.prs_bedrijf_post_postcode,
rec_bedr_upd.prs_bedrijf_post_plaats,
rec_bedr_upd.prs_bedrijf_post_land,
rec_bedr_upd.prs_bedrijf_telefoon,
rec_bedr_upd.prs_bedrijf_contact_persoon,
rec_bedr_upd.prs_leverancier_nr,
rec_bedr_upd.prs_bedrijf_bezoek_adres,
rec_bedr_upd.prs_bedrijf_bezoek_postcode,
rec_bedr_upd.prs_bedrijf_bezoek_plaats,
rec_bedr_upd.prs_bedrijf_bezoek_land,
rec_bedr_upd.prs_bedrijf_fax,
1,
1,
1
);
COMMIT;
fac.imp_writelog (p_applname,
p_applrun,
'C',
'Nieuw bedrijf toegevoegd',
'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr
);
-- Wat is de key van deze nieuwe geworden?
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_bedrijf
WHERE prs_leverancier_nr = rec_bedr_upd.prs_leverancier_nr
AND prs_bedrijf_naam = rec_bedr_upd.prs_bedrijf_naam
AND prs_bedrijf_verwijder IS NULL;
ELSE -- v_aktie = 'UPDATE'
v_errormsg := 'Bedrijf kan niet worden gewijzigd';
UPDATE prs_bedrijf
SET prs_bedrijf_naam = rec_bedr_upd.prs_bedrijf_naam,
prs_bedrijf_post_adres = rec_bedr_upd.prs_bedrijf_post_adres,
prs_bedrijf_post_postcode = rec_bedr_upd.prs_bedrijf_post_postcode,
prs_bedrijf_post_plaats = rec_bedr_upd.prs_bedrijf_post_plaats,
prs_bedrijf_post_land = rec_bedr_upd.prs_bedrijf_post_land,
prs_bedrijf_telefoon = rec_bedr_upd.prs_bedrijf_telefoon,
prs_bedrijf_contact_persoon = rec_bedr_upd.prs_bedrijf_contact_persoon,
prs_bedrijf_bezoek_adres = rec_bedr_upd.prs_bedrijf_bezoek_adres,
prs_bedrijf_bezoek_postcode = rec_bedr_upd.prs_bedrijf_bezoek_postcode,
prs_bedrijf_bezoek_plaats = rec_bedr_upd.prs_bedrijf_bezoek_plaats,
prs_bedrijf_bezoek_land = rec_bedr_upd.prs_bedrijf_bezoek_land,
prs_bedrijf_fax = rec_bedr_upd.prs_bedrijf_fax,
prs_bedrijf_leverancier = 1,
prs_bedrijf_uitvoerende = 1,
prs_bedrijf_contract = 1
WHERE prs_bedrijf_key = rec_bedr_upd.prs_bedrijf_key
AND prs_leverancier_nr = rec_bedr_upd.prs_leverancier_nr;
/* AND ( prs_bedrijf_naam <> rec_bedr_upd.prs_bedrijf_naam
OR prs_bedrijf_post_adres <> rec_bedr_upd.prs_bedrijf_post_adres
OR prs_bedrijf_post_postcode <> rec_bedr_upd.prs_bedrijf_post_postcode
OR prs_bedrijf_post_plaats <> rec_bedr_upd.prs_bedrijf_post_plaats
OR prs_bedrijf_post_land <> rec_bedr_upd.prs_bedrijf_post_land
OR prs_bedrijf_telefoon <> rec_bedr_upd.prs_bedrijf_telefoon
OR prs_bedrijf_contact_persoon <> rec_bedr_upd.prs_bedrijf_contact_persoon
OR prs_bedrijf_bezoek_adres <> rec_bedr_upd.prs_bedrijf_bezoek_adres
OR prs_bedrijf_bezoek_postcode <> rec_bedr_upd.prs_bedrijf_bezoek_postcode
OR prs_bedrijf_bezoek_plaats <> rec_bedr_upd.prs_bedrijf_bezoek_plaats
OR prs_bedrijf_bezoek_land <> rec_bedr_upd.prs_bedrijf_bezoek_land
OR prs_bedrijf_fax <> rec_bedr_upd.prs_bedrijf_fax
OR prs_bedrijf_naam IS NULL
OR prs_bedrijf_post_adres IS NULL
OR prs_bedrijf_post_postcode IS NULL
OR prs_bedrijf_post_plaats IS NULL
OR prs_bedrijf_post_land IS NULL
OR prs_bedrijf_telefoon IS NULL
OR prs_bedrijf_contact_persoon IS NULL
OR prs_bedrijf_bezoek_adres IS NULL
OR prs_bedrijf_bezoek_postcode IS NULL
OR prs_bedrijf_bezoek_plaats IS NULL
OR prs_bedrijf_bezoek_land IS NULL
OR prs_bedrijf_fax IS NULL
); */
COMMIT;
fac.imp_writelog (p_applname,
p_applrun,
'C',
'Bedrijven bijgewerkt (indien nodig)',
'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr
);
-- Wat is de key van dit bedrijf?
v_bedrijf_key := rec_bedr_upd.prs_bedrijf_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_errorhint := ' {' || v_errormsg || '}; bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
v_update := FALSE;
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
END IF;
-- *** insert/update van de drie kenmerken van de bedrijf ***
IF v_update
THEN
BEGIN
IF v_aktie = 'INSERT'
THEN
v_errormsg := 'Kenmerken kunnen niet worden toegevoegd';
-- De volgende flexkenmerken toevoegen
-- bedr.branche_code,
-- bedr.betalingsconditie,
-- bedr.taal.
IF rec_bedr_upd.branche_code IS NOT NULL
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_branche_code_key,
rec_bedr_upd.branche_code
);
COMMIT;
END IF;
IF rec_bedr_upd.betalingsconditie IS NOT NULL
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_bconditie_key,
rec_bedr_upd.betalingsconditie
);
COMMIT;
END IF;
IF rec_bedr_upd.taal IS NOT NULL
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_taal_key,
rec_bedr_upd.taal
);
COMMIT;
END IF;
fac.imp_writelog (p_applname,
p_applrun,
'C',
'Nieuwe kenmerken toegevoegd (indien waarde aanwezig) ',
'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr
);
ELSE -- v_aktie = 'UPDATE'(kenmerkenlinken kunnen aanwezig zijn)
v_errormsg := 'Kenmerk(en) kunnen niet worden gewijzigd';
v_find := 1;
BEGIN
-- Bepaal de key van het kenmerk "Branche_code"
SELECT prs_kenmerklink_key
INTO v_kenmerklink_branche_key
FROM prs_kenmerklink
WHERE prs_link_key = v_bedrijf_key
AND prs_kenmerk_key = v_kenmerk_branche_code_key
AND prs_kenmerklink_niveau = 'B';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_find := 0;
WHEN OTHERS
THEN
v_errorhint := 'Fout bij het aanmaken van kenmerklink "Branche_code"'
|| TO_CHAR(v_kenmerk_branche_code_key)
|| 'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
v_update := FALSE;
END;
IF v_update AND v_find = 1
THEN
IF rec_bedr_upd.branche_code IS NOT NULL
THEN
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = rec_bedr_upd.branche_code
WHERE prs_kenmerklink_key = v_kenmerklink_branche_key
AND prs_kenmerklink_waarde <> rec_bedr_upd.branche_code;
COMMIT;
ELSE
DELETE prs_kenmerklink
WHERE prs_kenmerklink_key = v_kenmerklink_branche_key;
COMMIT;
END IF;
ELSE
-- Kenmerklink bestaat kennelijk niet, maak 'm aan
IF rec_bedr_upd.branche_code IS NOT NULL AND v_find = 0
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_branche_code_key,
rec_bedr_upd.branche_code
);
COMMIT;
END IF;
END IF;
v_find := 1;
BEGIN
-- Bepaal de key van het kenmerk "Betalingsconditie"
SELECT prs_kenmerklink_key
INTO v_kenmerklink_bconditie_key
FROM prs_kenmerklink
WHERE prs_link_key = v_bedrijf_key
AND prs_kenmerk_key = v_kenmerk_bconditie_key
AND prs_kenmerklink_niveau = 'B';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_find := 0;
WHEN OTHERS
THEN
v_errorhint := 'Fout bij het aanmaken van kenmerklink "Betalingsconditie" '
|| TO_CHAR(v_kenmerk_bconditie_key)
|| 'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
v_update := FALSE;
END;
IF v_update AND v_find = 1
THEN
IF rec_bedr_upd.betalingsconditie IS NOT NULL
THEN
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = rec_bedr_upd.betalingsconditie
WHERE prs_kenmerklink_key = v_kenmerklink_bconditie_key
AND prs_kenmerklink_waarde <> rec_bedr_upd.betalingsconditie;
COMMIT;
ELSE
DELETE prs_kenmerklink
WHERE prs_kenmerklink_key = v_kenmerklink_bconditie_key;
COMMIT;
END IF;
ELSE
-- Kenmerklink bestaat kennelijk niet, maak 'm aan
IF rec_bedr_upd.betalingsconditie IS NOT NULL AND v_find = 0
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_bconditie_key,
rec_bedr_upd.betalingsconditie
);
COMMIT;
END IF;
END IF;
v_find := 1;
BEGIN
-- Bepaal de key van het kenmerk "Taal"
SELECT prs_kenmerklink_key
INTO v_kenmerklink_taal_key
FROM prs_kenmerklink
WHERE prs_link_key = v_bedrijf_key
AND prs_kenmerk_key = v_kenmerk_taal_key
AND prs_kenmerklink_niveau = 'B';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_find := 0;
WHEN OTHERS
THEN
v_errorhint := 'Fout bij het aanmaken van kenmerklink "Taal"'
|| TO_CHAR(v_kenmerk_taal_key)
|| 'bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
v_update := FALSE;
END;
IF v_update AND v_find = 1
THEN
IF rec_bedr_upd.taal IS NOT NULL
THEN
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = rec_bedr_upd.taal
WHERE prs_kenmerklink_key = v_kenmerklink_taal_key
AND prs_kenmerklink_waarde <> rec_bedr_upd.taal;
COMMIT;
ELSE
DELETE prs_kenmerklink
WHERE prs_kenmerklink_key = v_kenmerklink_taal_key;
COMMIT;
END IF;
ELSE
-- Kenmerklink bestaat kennelijk niet, maak 'm aan
IF rec_bedr_upd.taal IS NOT NULL AND v_find = 0
THEN
INSERT INTO prs_kenmerklink
(prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde
)
VALUES (v_bedrijf_key,
'B',
v_kenmerk_taal_key,
rec_bedr_upd.taal
);
COMMIT;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_errorhint := ' {' || v_errormsg || '}; bedrijfsnaam/leveranciersnummer: '
|| rec_bedr_upd.prs_bedrijf_naam
|| '/'
|| rec_bedr_upd.prs_leverancier_nr;
v_update := FALSE;
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
END IF;
v_buffercount := v_buffercount + 1;
IF v_buffercount >= c_commitbuffer
THEN
COMMIT;
v_buffercount := 0;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
SELECT COUNT (*)
INTO v_bedrijf_newcount_fclt
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND prs_bedrijf_naam NOT LIKE 'INACTIEF:%';
fac.imp_writelog (p_applname,
p_applrun,
'S',
'Aantal actieve crediteuren vooraf: '
|| TO_CHAR (v_bedrijf_count_fclt)
|| ' nu: '
|| TO_CHAR (v_bedrijf_newcount_fclt),
''
);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
/
-- NFIT#12061 view voor notificatie op het moment dat het contract de rappeldatum bereikt naar:
-- de beheerder van het contract,
-- de budgethouder van de kostenplaats van de afdeling van het contract
-- en naar Erwin of Sabine (Inkoper)
CREATE OR REPLACE VIEW FAC_V_NOTI_CNTREMINDER
(CODE, SENDER, RECEIVER, TEXT, KEY,
PAR1, PAR2, XKEY)
AS
SELECT '', '',
c.prs_perslid_key_beh naam,
'Rapp<EFBFBD>l: Contract '
|| c.cnt_contract_nummer_intern
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' moet uiterlijk per '
|| TO_CHAR (c.cnt_contract_opzegdatum, 'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.' bericht,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_opzegdatum,
NULL
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND (SYSDATE BETWEEN c.cnt_contract_rappeldatum AND c.cnt_contract_opzegdatum)
UNION
SELECT '', '',
(SELECT kp.prs_perslid_key
FROM prs_afdeling a,
prs_kostenplaats kp
WHERE a.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND a.prs_afdeling_key = c.prs_afdeling_key_eig) naam,
'Rapp<EFBFBD>l: Contract '
|| c.cnt_contract_nummer_intern
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' moet uiterlijk per '
|| TO_CHAR (c.cnt_contract_opzegdatum, 'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.' bericht,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_opzegdatum,
NULL
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND (SYSDATE BETWEEN c.cnt_contract_rappeldatum AND c.cnt_contract_opzegdatum)
UNION
-- Sabine of Erwin
SELECT '', '',
(SELECT p.prs_perslid_key
FROM cnt_kenmerkcontract kc,
cnt_kenmerk ck,
fac_usrdata fud,
prs_perslid p
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = ck.cnt_kenmerk_key
AND kc.cnt_kenmerkcontract_waarde = fud.fac_usrdata_key
AND p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam = fud.fac_usrdata_omschr
AND kc.cnt_contract_key = c.cnt_contract_key
AND ck.cnt_srtkenmerk_key = 21) naam,
'Rapp<EFBFBD>l: Contract '
|| c.cnt_contract_nummer_intern
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' moet uiterlijk per '
|| TO_CHAR (c.cnt_contract_opzegdatum, 'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.' bericht,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_opzegdatum,
NULL
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND (SYSDATE BETWEEN c.cnt_contract_rappeldatum AND c.cnt_contract_opzegdatum);
-- NFIT#12639: Notificatiejob voor afmelden van incidentele bestelling (2 dagen na verwachte leverdatum)
-- kenmerkkey van afleverdatum is 59 voor NFIT
CREATE OR REPLACE VIEW FAC_V_NOTI_MLDOPDR_AFM
(CODE, SENDER, RECEIVER, TEXT, KEY, XKEY)
AS
SELECT '',
'',
m.prs_perslid_key melder,
'Opdracht ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key
|| ' dient te worden afgemeld.' melding,
o.mld_opdr_key,
o.mld_melding_key
FROM mld_opdr o,
mld_kenmerkopdr ko,
mld_melding m,
mld_discipline md,
ins_srtdiscipline sd
WHERE o.mld_opdr_key = ko.mld_opdr_key
AND m.mld_melding_key = o.mld_melding_key
AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
AND md.ins_discipline_key = m.mld_ins_discipline_key
AND o.mld_opdr_datumfiat_nok IS NULL
AND ko.mld_kenmerk_key = 59
AND TO_DATE(ko.mld_kenmerkopdr_waarde||' 00:00:00','dd-mm-yyyy hh24:mi:ss') + 2 <= SYSDATE
AND o.mld_opdr_datumuitgevoerd IS NULL
AND 1 NOT IN (SELECT 1
FROM web_user_messages
WHERE prs_perslid_key_receiver = m.prs_perslid_key
AND 'Opdracht ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key
|| ' dient te worden afgemeld.' = web_user_mess_dsc);
SPOOL OFF