1421 lines
51 KiB
SQL
1421 lines
51 KiB
SQL
--
|
||
-- $Id$
|
||
--
|
||
-- Script containing customer specific configuration sql statements for kfst: Kien Facility Management Strijp-S
|
||
|
||
DEFINE thisfile = 'KFST.SQL'
|
||
DEFINE dbuser = '^KFST'
|
||
|
||
SET ECHO ON
|
||
SET DEFINE ON
|
||
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
||
WHENEVER SQLERROR EXIT;
|
||
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
|
||
WHENEVER SQLERROR CONTINUE;
|
||
SPOOL &fcltlogfile
|
||
SET DEFINE OFF
|
||
|
||
------ payload begin ------
|
||
|
||
|
||
CREATE OR REPLACE PACKAGE KFST
|
||
AS
|
||
PROCEDURE add_xml_row (p_bestand IN VARCHAR2,
|
||
p_regel IN VARCHAR2);
|
||
|
||
PROCEDURE add_xml_element (p_bestand IN VARCHAR2,
|
||
p_tag IN VARCHAR2,
|
||
p_value IN VARCHAR2);
|
||
|
||
PROCEDURE set_kenmerk(p_module IN VARCHAR2,
|
||
p_kenmerk_key IN NUMBER,
|
||
p_link_key IN NUMBER,
|
||
p_kenmerk_waarde IN VARCHAR2,
|
||
p_history IN NUMBER);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY KFST
|
||
AS
|
||
PROCEDURE add_xml_row (
|
||
p_bestand IN VARCHAR2,
|
||
p_regel IN VARCHAR2)
|
||
AS
|
||
v_index NUMBER;
|
||
BEGIN
|
||
SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1
|
||
INTO v_index
|
||
FROM fac_rapport
|
||
WHERE fac_rapport_node = p_bestand;
|
||
|
||
INSERT INTO fac_rapport (
|
||
fac_rapport_node,
|
||
fac_rapport_volgnr,
|
||
fac_rapport_regel)
|
||
VALUES (p_bestand,
|
||
v_index,
|
||
p_regel);
|
||
END;
|
||
|
||
PROCEDURE add_xml_element (
|
||
p_bestand IN VARCHAR2,
|
||
p_tag IN VARCHAR2,
|
||
p_value IN VARCHAR2)
|
||
AS
|
||
BEGIN
|
||
kfst.add_xml_row(p_bestand,
|
||
'<' || p_tag || '>'
|
||
|| xml.char_to_html(p_value)
|
||
|| '</' || p_tag || '>');
|
||
END;
|
||
|
||
PROCEDURE set_kenmerk(p_module IN VARCHAR2,
|
||
p_kenmerk_key IN NUMBER,
|
||
p_link_key IN NUMBER,
|
||
p_kenmerk_waarde IN VARCHAR2,
|
||
p_history IN NUMBER)
|
||
AS
|
||
v_count NUMBER;
|
||
v_niveau VARCHAR2 (1);
|
||
BEGIN
|
||
CASE p_module
|
||
WHEN 'PRS'
|
||
THEN
|
||
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
|
||
-- opgeslagen (da's dus redundant..?)
|
||
SELECT prs_kenmerk_niveau
|
||
INTO v_niveau
|
||
FROM prs_kenmerk
|
||
WHERE prs_kenmerk_key = p_kenmerk_key;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = p_kenmerk_waarde
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
v_niveau,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
|
||
WHEN 'ALG'
|
||
THEN
|
||
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
|
||
-- opgeslagen (da's dus redundant..?)
|
||
SELECT alg_kenmerk_niveau
|
||
INTO v_niveau
|
||
FROM alg_kenmerk
|
||
WHERE alg_kenmerk_key = p_kenmerk_key;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM alg_onrgoedkenmerk
|
||
WHERE alg_onrgoed_key = p_link_key
|
||
AND alg_kenmerk_key = p_kenmerk_key
|
||
AND alg_onrgoedkenmerk_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE alg_onrgoedkenmerk
|
||
WHERE alg_onrgoed_key = p_link_key
|
||
AND alg_kenmerk_key = p_kenmerk_key
|
||
AND alg_onrgoedkenmerk_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE alg_onrgoedkenmerk
|
||
SET alg_onrgoedkenmerk_waarde = p_kenmerk_waarde
|
||
WHERE alg_onrgoed_key = p_link_key
|
||
AND alg_kenmerk_key = p_kenmerk_key
|
||
AND alg_onrgoedkenmerk_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO alg_onrgoedkenmerk (alg_kenmerk_key,
|
||
alg_onrgoed_key,
|
||
alg_onrgoed_niveau,
|
||
alg_onrgoedkenmerk_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
v_niveau,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
|
||
WHEN 'MLD'
|
||
THEN
|
||
-- melding- of opdrachtkenmerk?
|
||
SELECT mld_kenmerk_niveau
|
||
INTO v_niveau
|
||
FROM mld_kenmerk
|
||
WHERE mld_kenmerk_key = p_kenmerk_key;
|
||
|
||
CASE v_niveau
|
||
WHEN 'O'
|
||
THEN
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM mld_kenmerkopdr
|
||
WHERE mld_opdr_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkopdr_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE mld_kenmerkopdr
|
||
WHERE mld_opdr_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkopdr_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE mld_kenmerkopdr
|
||
SET mld_kenmerkopdr_waarde = p_kenmerk_waarde
|
||
WHERE mld_opdr_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkopdr_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO mld_kenmerkopdr (mld_kenmerk_key,
|
||
mld_opdr_key,
|
||
mld_kenmerkopdr_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
WHEN 'S'
|
||
THEN
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM mld_kenmerkmelding
|
||
WHERE mld_melding_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkmelding_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE mld_kenmerkmelding
|
||
WHERE mld_melding_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkmelding_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE mld_kenmerkmelding
|
||
SET mld_kenmerkmelding_waarde = p_kenmerk_waarde
|
||
WHERE mld_melding_key = p_link_key
|
||
AND mld_kenmerk_key = p_kenmerk_key
|
||
AND mld_kenmerkmelding_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO mld_kenmerkmelding (mld_kenmerk_key,
|
||
mld_melding_key,
|
||
mld_kenmerkmelding_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
END CASE;
|
||
WHEN 'FIN'
|
||
THEN
|
||
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
|
||
-- opgeslagen (da's dus redundant..?)
|
||
SELECT fin_kenmerk_type
|
||
INTO v_niveau
|
||
FROM fin_kenmerk
|
||
WHERE fin_kenmerk_key = p_kenmerk_key;
|
||
|
||
|
||
IF v_niveau = 'F'
|
||
THEN
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM fin_kenmerkfactuur
|
||
WHERE fin_factuur_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactuur_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE fin_kenmerkfactuur
|
||
WHERE fin_factuur_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactuur_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE fin_kenmerkfactuur
|
||
SET fin_kenmerkfactuur_waarde = p_kenmerk_waarde
|
||
WHERE fin_factuur_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactuur_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_kenmerk_key,
|
||
fin_factuur_key,
|
||
fin_kenmerkfactuur_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- Kenmerk bij factuurregel
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM fin_kenmerkfactregel
|
||
WHERE fin_factuurregel_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactregel_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
DELETE fin_kenmerkfactregel
|
||
WHERE fin_factuurregel_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactregel_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE fin_kenmerkfactregel
|
||
SET fin_kenmerkfactregel_waarde = p_kenmerk_waarde
|
||
WHERE fin_factuurregel_key = p_link_key
|
||
AND fin_kenmerk_key = p_kenmerk_key
|
||
AND fin_kenmerkfactregel_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key,
|
||
fin_factuurregel_key,
|
||
fin_kenmerkfactregel_waarde)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
|
||
END IF;
|
||
END CASE;
|
||
END;
|
||
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE kfst_import_kostenstructuur (
|
||
p_import_key IN NUMBER
|
||
)
|
||
AS
|
||
CURSOR c_cursor
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
|
||
v_newline VARCHAR2 (1000);
|
||
v_aanduiding VARCHAR2 (1000); -- Import line
|
||
v_field VARCHAR2 (100); -- Import field
|
||
v_fielddelimitor VARCHAR2 (1); -- Field seperator
|
||
v_errormsg VARCHAR (200);
|
||
v_errorhint VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_skipfield VARCHAR2 (100);
|
||
-- De importvelden
|
||
v_GrootboekNummer VARCHAR2(100);
|
||
v_GrootboekOms VARCHAR2(100);
|
||
v_HoofdstukNummer VARCHAR2(100);
|
||
v_HoofdstukOms VARCHAR2(100);
|
||
v_AccountNummer VARCHAR2(100);
|
||
v_AccountOms VARCHAR2(100);
|
||
header_found BOOLEAN;
|
||
|
||
BEGIN
|
||
-- Init
|
||
header_found := FALSE;
|
||
v_fielddelimitor := ';';
|
||
|
||
-- Clear my previous imported rows
|
||
DELETE FROM kfst_imp_kostenstructuur;
|
||
|
||
FOR rec1 IN c_cursor
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := v_newline;
|
||
|
||
IF SUBSTR (v_newline, 1, 3) = '?'
|
||
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;
|
||
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_GrootboekNummer);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_GrootboekOms);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_HoofdstukNummer);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_HoofdstukOms);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_AccountNummer);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_AccountOms);
|
||
|
||
|
||
-- Skip until a valid header is found
|
||
IF UPPER(v_GrootboekNummer) = 'CODE'
|
||
AND UPPER(v_GrootboekOms) = 'OMSCHRIJVING GROOTBOEKREKENING'
|
||
AND UPPER(v_HoofdstukNummer) = 'HOOFDSTUKNUMMER'
|
||
AND UPPER(v_HoofdstukOms) = 'HOOFDSTUKNAAM'
|
||
AND UPPER(v_AccountNummer) = 'ACCOUNTNUMMER'
|
||
AND UPPER(v_AccountOms) = 'ACCOUNTOMSCHRIJVING'
|
||
THEN
|
||
-- Sla de kopregel over.
|
||
header_found := TRUE;
|
||
ELSIF (header_found AND v_GrootboekNummer IS NOT NULL)
|
||
THEN
|
||
INSERT INTO kfst_imp_kostenstructuur
|
||
(GrootboekNummer,
|
||
GrootboekOms,
|
||
HoofdstukNummer,
|
||
HoofdstukOms,
|
||
AccountNummer,
|
||
AccountOms)
|
||
VALUES (v_GrootboekNummer,
|
||
v_GrootboekOms,
|
||
v_HoofdstukNummer,
|
||
v_HoofdstukOms,
|
||
v_AccountNummer,
|
||
v_AccountOms);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF NOT header_found
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Geen geldige header aangetroffen',
|
||
'Bestand is geen geldig kostensoort importbestand.'
|
||
);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
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_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
|
||
-- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden.
|
||
DELETE FROM kfst_imp_kostenstructuur;
|
||
END;
|
||
/
|
||
|
||
|
||
-- Importfunctie om de kostensoort structuur in de eigentabellen te plaatsen. De structuur
|
||
-- is opgedeeld in 3 niveaus. Eerst het hoofdstuk dan het account en vervolgens het grootboek.
|
||
-- Uiteindelijk wordt het grootboeknummer gekoppeld aan de factuur via de kostensoort.
|
||
-- Eigen tabel waardes: 181 Hoofdstuk
|
||
-- 182 Account
|
||
-- 107 Grootboek / Kostencode
|
||
CREATE OR REPLACE PROCEDURE kfst_update_kostenstructuur (p_import_key IN NUMBER)
|
||
AS
|
||
|
||
CURSOR c
|
||
IS
|
||
SELECT *
|
||
FROM kfst_imp_kostenstructuur;
|
||
|
||
v_oldcount NUMBER;
|
||
v_newcount NUMBER;
|
||
v_kostensoort_key NUMBER;
|
||
v_kostensoortgrp_key NUMBER;
|
||
v_errormsg VARCHAR (1000);
|
||
v_error_hint VARCHAR (1000);
|
||
oracle_err_mes VARCHAR2 (150);
|
||
oracle_err_num VARCHAR2 (150);
|
||
BEGIN
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_newcount
|
||
FROM kfst_imp_kostenstructuur;
|
||
|
||
IF v_newcount = 0 THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'KFST kostenstructuur import bevat geen records',
|
||
'$Revision$'
|
||
);
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- How many active records are now present?
|
||
SELECT COUNT (*)
|
||
INTO v_oldcount
|
||
FROM prs_kostensoort; -- grootboekrecords
|
||
|
||
FOR rec IN c
|
||
LOOP
|
||
BEGIN
|
||
BEGIN
|
||
-- Bestaat het account al in de kostensoortgrp tabel
|
||
SELECT prs_kostensoortgrp_key
|
||
INTO v_kostensoortgrp_key
|
||
FROM prs_kostensoortgrp
|
||
WHERE prs_kostensoortgrp_altcode = rec.AccountNummer;
|
||
|
||
-- Zo ja, dan is misschien de omschrijving aangepast.
|
||
UPDATE prs_kostensoortgrp
|
||
SET prs_kostensoortgrp_oms = rec.AccountOms
|
||
WHERE prs_kostensoortgrp_key = v_kostensoortgrp_key;
|
||
EXCEPTION WHEN NO_DATA_FOUND
|
||
THEN
|
||
INSERT INTO prs_kostensoortgrp (prs_kostensoortgrp_altcode, prs_kostensoortgrp_oms)
|
||
VALUES (rec.AccountNummer, rec.AccountOms)
|
||
RETURNING prs_kostensoortgrp_key INTO v_kostensoortgrp_key;
|
||
END;
|
||
|
||
BEGIN
|
||
-- Bestaat het grootboek al in de kostensoort tabel
|
||
SELECT prs_kostensoort_key
|
||
INTO v_kostensoort_key
|
||
FROM prs_kostensoort
|
||
WHERE prs_kostensoort_refcode = rec.GrootboekNummer;
|
||
|
||
-- Zo ja, dan is misschien de omschrijving aangepast.
|
||
UPDATE prs_kostensoort
|
||
SET prs_kostensoort_oms = rec.GrootboekNummer,
|
||
prs_kostensoort_opmerking = rec.GrootboekOms || ' H' || SUBSTR(rec.hoofdstuknummer, 1,1),
|
||
prs_kostensoortgrp_key = v_kostensoortgrp_key
|
||
WHERE prs_kostensoort_key = v_kostensoort_key;
|
||
EXCEPTION WHEN NO_DATA_FOUND
|
||
THEN
|
||
INSERT INTO prs_kostensoort (prs_kostensoort_refcode, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_key)
|
||
VALUES (rec.GrootboekNummer, rec.GrootboekNummer, rec.GrootboekOms || ' H' || SUBSTR(rec.hoofdstuknummer, 1,1), v_kostensoortgrp_key)
|
||
RETURNING prs_kostensoort_key INTO v_kostensoort_key;
|
||
END;
|
||
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_error_hint := v_errormsg;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| 'ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_error_hint
|
||
);
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
END LOOP;
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_newcount
|
||
FROM prs_kostensoort; -- grootboekrecords
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal kostensoorten vooraf: ' || TO_CHAR (v_oldcount) || ' nu: ' || TO_CHAR (v_newcount),
|
||
''
|
||
);
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_error_hint := v_errormsg;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| 'ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_error_hint
|
||
);
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE VIEW kfst_v_factuur_gegevens
|
||
(
|
||
fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_datum,
|
||
fin_factuur_nr,
|
||
prs_bedrijf_key,
|
||
fin_factuurregel_omschrijving,
|
||
prs_kostensoort_refcode,
|
||
prs_kostensoort_oms,
|
||
fin_factuurregel_totaal,
|
||
fin_factuurregel_btw,
|
||
fin_btwtabelwaarde_code,
|
||
fin_btwtabelwaarde_key,
|
||
fin_factuurregel_nr,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_boekmaand,
|
||
opdr_datum,
|
||
prs_kostenplaats_key,
|
||
mld_opdr_key,
|
||
cnt_contract_key,
|
||
bes_bestelopdr_key,
|
||
fin_factuur_statuses_key,
|
||
lev_kpn,
|
||
kpcode,
|
||
kdcode
|
||
)
|
||
AS
|
||
SELECT f.fin_factuur_key,
|
||
DECODE (
|
||
c.cnt_contract_key,
|
||
NULL, DECODE (
|
||
bo.bes_bestelopdr_key,
|
||
NULL, (SELECT sd.ins_srtdiscipline_prefix
|
||
|| m.mld_melding_key
|
||
|| '/'
|
||
|| o.mld_opdr_bedrijfopdr_volgnr
|
||
FROM mld_melding m,
|
||
mld_stdmelding std,
|
||
ins_tab_discipline d,
|
||
ins_srtdiscipline sd
|
||
WHERE m.mld_melding_key =
|
||
o.mld_melding_key
|
||
AND m.mld_stdmelding_key =
|
||
std.mld_stdmelding_key
|
||
AND std.mld_ins_discipline_key =
|
||
d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key =
|
||
sd.ins_srtdiscipline_key),
|
||
bo.bes_bestelopdr_id),
|
||
'C'
|
||
|| TO_CHAR (cnt_contract_nummer_intern)
|
||
|| DECODE (cnt_contract_versie,
|
||
NULL, NULL,
|
||
'.' || cnt_contract_versie))
|
||
opdracht_id,
|
||
f.fin_factuur_datum,
|
||
f.fin_factuur_nr,
|
||
COALESCE (b_c.prs_bedrijf_key,
|
||
COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))
|
||
prs_bedrijf_key,
|
||
fr.fin_factuurregel_omschrijving,
|
||
k.prs_kostensoort_refcode,
|
||
k.prs_kostensoort_oms,
|
||
fr.fin_factuurregel_totaal,
|
||
ROUND (
|
||
fr.fin_factuurregel_totaal
|
||
* DECODE (btw.fin_btwtabelwaarde_verlegd,
|
||
1, 0,
|
||
btw.fin_btwtabelwaarde_perc / 100),
|
||
2)
|
||
fin_factuurregel_btw,
|
||
btw.fin_btwtabelwaarde_code,
|
||
btw.fin_btwtabelwaarde_key,
|
||
fr.fin_factuurregel_nr,
|
||
f.fin_factuur_debiteur_nr,
|
||
f.fin_factuur_opmerking,
|
||
f.fin_factuur_boekmaand,
|
||
COALESCE (
|
||
o.mld_opdr_datumbegin,
|
||
COALESCE (c.cnt_contract_looptijd_tot,
|
||
bo.bes_bestelopdr_datum)),
|
||
COALESCE (
|
||
o.prs_kostenplaats_key,
|
||
COALESCE (
|
||
c.prs_kostenplaats_key,
|
||
(SELECT DISTINCT b.prs_kostenplaats_key
|
||
FROM bes_bestelling b,
|
||
bes_bestelopdr_item boi,
|
||
bes_bestelling_item bi
|
||
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
|
||
AND boi.bes_bestelopdr_item_key =
|
||
bi.bes_bestelopdr_item_key
|
||
AND bi.bes_bestelling_key = b.bes_bestelling_key))),
|
||
o.mld_opdr_key,
|
||
c.cnt_contract_key,
|
||
bo.bes_bestelopdr_key,
|
||
( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn
|
||
-- met status ingevoerd, afgewezen of incompleet
|
||
SELECT DECODE (COUNT (*), 0, f.fin_factuur_statuses_key, 2)
|
||
FROM fin_factuur f_t,
|
||
cnt_contract c_t,
|
||
bes_bestelopdr b_t,
|
||
mld_opdr o_t
|
||
WHERE f_t.fin_factuur_verwijder IS NULL
|
||
AND f_t.mld_opdr_key = o_t.mld_opdr_key(+)
|
||
AND f_t.cnt_contract_key = c_t.cnt_contract_key(+)
|
||
AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+)
|
||
AND COALESCE (
|
||
o_t.mld_uitvoerende_keys,
|
||
COALESCE (b_t.prs_bedrijf_key,
|
||
c_t.cnt_prs_bedrijf_key)) =
|
||
COALESCE (
|
||
o.mld_uitvoerende_keys,
|
||
COALESCE (bo.prs_bedrijf_key,
|
||
c.cnt_prs_bedrijf_key))
|
||
AND f.fin_factuur_nr = f_t.fin_factuur_nr
|
||
AND f_t.fin_factuur_statuses_key IN (1, 2, 3)
|
||
AND f.fin_factuur_statuses_key = 6)
|
||
fin_factuur_statuses_key,
|
||
lk.prs_kostenplaats_nr
|
||
lev_kpn,
|
||
(SELECT alg_gebouw_code
|
||
FROM alg_gebouw g
|
||
WHERE g.alg_gebouw_key = COALESCE(og.alg_gebouw_key, cg.alg_gebouw_key)),
|
||
(SELECT alg_gebouw_code
|
||
FROM alg_gebouw g
|
||
WHERE g.alg_gebouw_key = COALESCE(og.alg_gebouw_key, cg.alg_gebouw_key))
|
||
FROM fin_factuur f,
|
||
fin_factuurregel fr,
|
||
fin_btwtabelwaarde btw,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_typeopdr ot,
|
||
cnt_contract c,
|
||
bes_bestelopdr bo,
|
||
prs_bedrijf b_o,
|
||
prs_bedrijf b_c,
|
||
prs_bedrijf b_b,
|
||
prs_kostensoort k,
|
||
prs_kostensoortgrp kg,
|
||
prs_kostenplaats lk,
|
||
alg_v_allonrgoed_gegevens og,
|
||
(SELECT kfr.fin_factuurregel_key,
|
||
fac.safe_to_number (fin_kenmerkfactregel_waarde)
|
||
alg_gebouw_key
|
||
FROM fin_kenmerkfactregel kfr
|
||
WHERE fin_kenmerk_key = 81) cg
|
||
WHERE f.fin_factuur_key = fr.fin_factuur_key
|
||
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
|
||
AND f.mld_opdr_key = o.mld_opdr_key(+)
|
||
AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
|
||
AND o.mld_melding_key = m.mld_melding_key(+)
|
||
AND f.cnt_contract_key = c.cnt_contract_key(+)
|
||
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
|
||
AND bo.prs_bedrijf_key = b_b.prs_bedrijf_key(+)
|
||
AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
|
||
AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
|
||
AND k.prs_kostensoort_key = COALESCE(fr.prs_kostensoort_key, f.prs_kostensoort_key)
|
||
AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+)
|
||
AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+)
|
||
AND fr.fin_factuurregel_key = cg.fin_factuurregel_key(+)
|
||
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
|
||
AND f.fin_factuur_verwijder IS NULL;
|
||
|
||
|
||
CREATE OR REPLACE VIEW kfst_v_bron_export_exact_xml
|
||
(
|
||
fin_factuur_key,
|
||
oms_kop,
|
||
oms_detail,
|
||
opdracht_id,
|
||
factuur_nr,
|
||
datum,
|
||
crdnr,
|
||
bedrag_txt,
|
||
bedrag,
|
||
bedrag_incl,
|
||
betaalref,
|
||
itemcode,
|
||
reknr,
|
||
kstplcode,
|
||
kstdrcode,
|
||
btw_code,
|
||
lev_kpn,
|
||
boekstuknr
|
||
)
|
||
AS
|
||
SELECT fin_factuur_key,
|
||
SUBSTR(b.prs_bedrijf_naam, 1,30) oms_kop,
|
||
REPLACE (SUBSTR (fin_factuurregel_omschrijving, 1, 60), ',', '')
|
||
oms_detail,
|
||
opdracht_id,
|
||
fin_factuur_nr,
|
||
TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
|
||
b.prs_leverancier_nr crdnr,
|
||
REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt,
|
||
bedrag,
|
||
bedrag_incl,
|
||
fin_factuur_nr betaalref,
|
||
prs_kostensoort_oms itemcode,
|
||
prs_kostensoort_refcode reknr,
|
||
kpcode kstplcode,
|
||
kdcode kstdrcode,
|
||
fin_btwtabelwaarde_code btw_code,
|
||
lev_kpn,
|
||
(SELECT fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur kf WHERE fin_kenmerk_key = 1 AND kf.fin_factuur_key = fg.fin_factuur_key) boekstuknr
|
||
FROM ( SELECT g.fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_datum,
|
||
fin_factuur_nr,
|
||
prs_bedrijf_key,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_opmerking,
|
||
prs_kostensoort_refcode,
|
||
prs_kostensoort_oms,
|
||
fin_factuurregel_omschrijving,
|
||
SUM (fin_factuurregel_totaal) bedrag,
|
||
SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incl,
|
||
fin_btwtabelwaarde_code,
|
||
mld_opdr_key,
|
||
cnt_contract_key,
|
||
prs_kostenplaats_key,
|
||
lev_kpn,
|
||
kpcode,
|
||
kdcode
|
||
FROM kfst_v_factuur_gegevens g, kfst_exp_factuur e
|
||
WHERE fin_factuur_statuses_key = 6
|
||
AND g.fin_factuur_key = e.fin_factuur_key
|
||
GROUP BY g.fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_datum,
|
||
fin_factuur_nr,
|
||
prs_bedrijf_key,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_opmerking,
|
||
prs_kostensoort_refcode,
|
||
prs_kostensoort_oms,
|
||
fin_btwtabelwaarde_code,
|
||
fin_factuurregel_omschrijving,
|
||
mld_opdr_key,
|
||
cnt_contract_key,
|
||
prs_kostenplaats_key,
|
||
lev_kpn,
|
||
kpcode,
|
||
kdcode) fg,
|
||
prs_bedrijf b
|
||
WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key;
|
||
|
||
|
||
CREATE OR REPLACE VIEW kfst_v_export_exact_t (
|
||
result,
|
||
result_order
|
||
)
|
||
AS
|
||
SELECT REPLACE(REPLACE( regelnummer
|
||
|| ','
|
||
|| dagb_type
|
||
|| ','
|
||
|| dagbknr
|
||
|| ','
|
||
|| periode
|
||
|| ','
|
||
|| bkjcode
|
||
|| ','
|
||
|| boekstuknr
|
||
|| ','
|
||
|| oms25
|
||
|| ','
|
||
|| datum
|
||
|| ','
|
||
|| empty9
|
||
|| ','
|
||
|| debnr
|
||
|| ','
|
||
|| crdnr
|
||
|| ','
|
||
|| empty12
|
||
|| ','
|
||
|| bedrag
|
||
|| ','
|
||
|| drbk_in_val
|
||
|| ','
|
||
|| valcode
|
||
|| ','
|
||
|| koers
|
||
|| ','
|
||
|| kredbep
|
||
|| ','
|
||
|| bdrkredbep
|
||
|| ','
|
||
|| vervdatfak
|
||
|| ','
|
||
|| vervdatkrd
|
||
|| ','
|
||
|| empty21
|
||
|| ','
|
||
|| empty22
|
||
|| ','
|
||
|| weeknummer
|
||
|| ','
|
||
|| betaalref
|
||
|| ','
|
||
|| betwijze
|
||
|| ','
|
||
|| grek_bdr
|
||
|| ','
|
||
|| empty27
|
||
|| ','
|
||
|| empty28
|
||
|| ','
|
||
|| empty29
|
||
|| ','
|
||
|| empty30
|
||
|| ','
|
||
|| empty31
|
||
|| ','
|
||
|| transsubtype
|
||
|| ','
|
||
|| empty33
|
||
|| ','
|
||
|| empty34
|
||
|| ','
|
||
|| empty35
|
||
|| ','
|
||
|| empty36
|
||
|| ','
|
||
|| empty37
|
||
|| ','
|
||
|| empty38
|
||
|| ','
|
||
|| projectnr
|
||
|| ','
|
||
|| empty40,CHR (13), ''), CHR (10), '<ret>'),
|
||
boekstuknr * 100 + regelnummer
|
||
FROM (
|
||
SELECT 0 regelnummer,
|
||
'I' dagb_type,
|
||
'61' dagbknr,
|
||
'' periode,
|
||
'' bkjcode,
|
||
boekstuknr,
|
||
oms_kop oms25,
|
||
TO_CHAR (TO_DATE(datum, 'yyyy-mm-dd'), 'ddmmyyyy') datum,
|
||
'' empty9,
|
||
'' debnr,
|
||
crdnr,
|
||
'' empty12,
|
||
REPLACE (TO_CHAR (bedrag), ',', '.') bedrag,
|
||
'' drbk_in_val,
|
||
'' valcode,
|
||
'' koers,
|
||
'' kredbep,
|
||
'' bdrkredbep,
|
||
'' vervdatfak,
|
||
'' vervdatkrd,
|
||
'' empty21,
|
||
'' empty22,
|
||
'' weeknummer,
|
||
betaalref,
|
||
'' betwijze,
|
||
'' grek_bdr,
|
||
'' empty27,
|
||
'' empty28,
|
||
'' empty29,
|
||
'' empty30,
|
||
'' empty31,
|
||
'' transsubtype,
|
||
'' empty33,
|
||
'' empty34,
|
||
'' empty35,
|
||
'' empty36,
|
||
'' empty37,
|
||
'' empty38,
|
||
'' projectnr,
|
||
'!' empty40
|
||
FROM (SELECT datum,
|
||
factuur_nr,
|
||
betaalref,
|
||
crdnr,
|
||
oms_kop,
|
||
boekstuknr,
|
||
SUM (bedrag_incl)
|
||
bedrag
|
||
FROM kfst_v_bron_export_exact_xml
|
||
GROUP BY datum,
|
||
factuur_nr,
|
||
betaalref,
|
||
crdnr,
|
||
oms_kop,
|
||
boekstuknr) fg
|
||
UNION ALL
|
||
SELECT 1 regelnummer,
|
||
'I' dagb_type,
|
||
'61' dagbknr,
|
||
'' periode,
|
||
'' bkjcode,
|
||
boekstuknr,
|
||
oms_detail,
|
||
TO_CHAR (TO_DATE(datum, 'yyyy-mm-dd'), 'ddmmyyyy') datum,
|
||
reknr,
|
||
'' debnr,
|
||
crdnr,
|
||
'' empty12,
|
||
REPLACE (TO_CHAR (bedrag_incl), ',', '.') bedrag,
|
||
'' drbk_in_val,
|
||
'' val_code,
|
||
'' koers,
|
||
'' kredbep,
|
||
'' bdrkredbep,
|
||
'' vervdatfak,
|
||
'' vervdatkrd,
|
||
btw_code,
|
||
REPLACE (TO_CHAR (bedrag_incl - bedrag), ',', '.') btw_bdr,
|
||
'' weeknummer,
|
||
'' empty24,
|
||
'' empty25,
|
||
'' empty26,
|
||
kstplcode,
|
||
kstdrcode,
|
||
'' empty29,
|
||
'' empty30,
|
||
'' empty31,
|
||
'' transsubtype,
|
||
'' empty33,
|
||
'' empty34,
|
||
'' emtpy35,
|
||
'' empty36,
|
||
'' empty37,
|
||
'' empty38,
|
||
'' projectnr,
|
||
'!' empty40
|
||
FROM kfst_v_bron_export_exact_xml fg
|
||
ORDER BY boekstuknr, regelnummer);
|
||
|
||
CREATE OR REPLACE VIEW kfst_v_export_exact (
|
||
result,
|
||
result_order
|
||
)
|
||
AS
|
||
SELECT fac_rapport_regel, fac_rapport_volgnr
|
||
FROM fac_rapport
|
||
WHERE fac_rapport_node = 'EXACT';
|
||
|
||
--
|
||
-- Oude procedure om XML formaat te gebruiken. Tegenwoordig werkt men met csv bestanden.
|
||
--
|
||
/*
|
||
CREATE OR REPLACE PROCEDURE kfst_select_exact (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2
|
||
)
|
||
AS
|
||
CURSOR c
|
||
IS
|
||
SELECT crdnr, factuur_nr, MAX(datum) datum
|
||
FROM kfst_v_bron_export_exact_xml
|
||
GROUP BY crdnr, factuur_nr;
|
||
|
||
CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM kfst_v_bron_export_exact_xml
|
||
WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr')
|
||
AND factuur_nr = c_factuur_nr;
|
||
|
||
v_order_count NUMBER;
|
||
v_amount_sum NUMBER(10,2);
|
||
v_amount_sum_incl NUMBER(10,2);
|
||
v_count NUMBER;
|
||
v_sub_count NUMBER;
|
||
v_bestand VARCHAR2(12);
|
||
v_boekstuknummer NUMBER;
|
||
v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE;
|
||
v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE;
|
||
|
||
BEGIN
|
||
|
||
v_order_count := 0;
|
||
v_amount_sum := 0;
|
||
v_amount_sum_incl := 0;
|
||
v_count := 0;
|
||
v_bestand := SUBSTR(p_applname, 1, 12);
|
||
v_crdnr := 'Q';
|
||
v_factuur_nr := 'Q';
|
||
|
||
-- Eerst opruiming
|
||
DELETE FROM imp_log
|
||
WHERE imp_log_applicatie = p_applname;
|
||
|
||
DELETE fac_rapport
|
||
WHERE fac_rapport_node = v_bestand;
|
||
|
||
DELETE fin_kenmerkfactuur kf
|
||
WHERE fin_kenmerk_key = 1
|
||
AND fin_factuur_key IN (SELECT fin_factuur_key
|
||
FROM fin_factuur
|
||
WHERE fin_factuur_statuses_key <> 7);
|
||
|
||
-- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
|
||
-- deze keys gebruikt kunnen worden.
|
||
DELETE kfst_exp_factuur;
|
||
|
||
INSERT INTO kfst_exp_factuur (fin_factuur_key)
|
||
( SELECT DISTINCT fin_factuur_key
|
||
FROM kfst_v_factuur_gegevens
|
||
WHERE fin_factuur_statuses_key = 6
|
||
AND fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum:
|
||
AND fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan <20><>n jaar in de toekomst.
|
||
);
|
||
|
||
-- Bepaal het boekstuknummer (key 1) met het hoogste nummer van dit jaar
|
||
-- ## AAIT#36589
|
||
|
||
SELECT MAX(fin_kenmerkfactuur_waarde)
|
||
INTO v_boekstuknummer
|
||
FROM fin_kenmerkfactuur
|
||
WHERE fin_kenmerk_key = 1
|
||
AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY');
|
||
|
||
IF v_boekstuknummer IS NULL
|
||
THEN
|
||
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '610000');
|
||
END IF;
|
||
|
||
-- header
|
||
kfst.add_xml_row (v_bestand, '<?xml version="1.0" encoding="windows-1252"?>');
|
||
kfst.add_xml_row (v_bestand, '<eExact>');
|
||
kfst.add_xml_row (v_bestand, '<GLEntries>');
|
||
|
||
FOR rec IN c
|
||
LOOP
|
||
BEGIN
|
||
-- Als we een nieuwe leverancier/factuurnummer tegenkomen gaan we het boekstuknummer ophogen.
|
||
IF rec.crdnr <> v_crdnr OR rec.factuur_nr <> v_factuur_nr
|
||
THEN
|
||
v_boekstuknummer := v_boekstuknummer + 1;
|
||
v_crdnr := rec.crdnr;
|
||
v_factuur_nr := rec.factuur_nr;
|
||
END IF;
|
||
|
||
kfst.add_xml_row (v_bestand, '<GLEntry status="E" entry="' || xml.char_to_html(v_boekstuknummer) || '">');
|
||
kfst.add_xml_element (v_bestand, 'Description', rec.factuur_nr);
|
||
kfst.add_xml_element (v_bestand, 'Date', rec.datum);
|
||
kfst.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
|
||
kfst.add_xml_row (v_bestand, '<Journal type="I" code="61"/>');
|
||
v_sub_count := 1;
|
||
FOR rec1 IN c_sub (v_crdnr, v_factuur_nr)
|
||
LOOP
|
||
BEGIN
|
||
-- Eerst maar even een kenmerk voor het boestuknummer aanmaken
|
||
kfst.set_kenmerk('FIN', 1, rec1.fin_factuur_key, v_boekstuknummer, 0);
|
||
kfst.add_xml_row (v_bestand, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
|
||
kfst.add_xml_element (v_bestand, 'Date', rec1.datum);
|
||
kfst.add_xml_row (v_bestand, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
|
||
kfst.add_xml_element (v_bestand, 'Description', rec1.oms25);
|
||
kfst.add_xml_row (v_bestand, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
|
||
kfst.add_xml_row (v_bestand, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
|
||
kfst.add_xml_row (v_bestand, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
|
||
kfst.add_xml_row (v_bestand, '<Item code="' || xml.char_to_html(rec1.itemcode) || '"/>');
|
||
kfst.add_xml_row (v_bestand, '<Amount>');
|
||
kfst.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt);
|
||
kfst.add_xml_row (v_bestand, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
|
||
kfst.add_xml_row (v_bestand, '</Amount>');
|
||
kfst.add_xml_row (v_bestand, '<Payment>');
|
||
kfst.add_xml_element (v_bestand, 'Reference', rec1.betaalref);
|
||
kfst.add_xml_element (v_bestand, 'InvoiceNumber', rec1.fin_factuur_key);
|
||
kfst.add_xml_row (v_bestand, '</Payment>');
|
||
kfst.add_xml_row (v_bestand, '<FinReferences>');
|
||
kfst.add_xml_element (v_bestand, 'YourRef', rec1.betaalref);
|
||
kfst.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
|
||
kfst.add_xml_row (v_bestand, '</FinReferences>');
|
||
kfst.add_xml_row (v_bestand, '<FreeFields>');
|
||
kfst.add_xml_row (v_bestand, '<FreeTexts>');
|
||
kfst.add_xml_row (v_bestand, '<FreeText number="3">' || rec1.opdracht_id || '</FreeText>');
|
||
kfst.add_xml_row (v_bestand, '</FreeTexts>');
|
||
kfst.add_xml_row (v_bestand, '</FreeFields>');
|
||
kfst.add_xml_row (v_bestand, '</FinEntryLine>');
|
||
v_sub_count := v_sub_count + 1;
|
||
v_amount_sum := v_amount_sum + rec1.bedrag;
|
||
v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl;
|
||
END;
|
||
END LOOP;
|
||
IF v_sub_count = 1
|
||
THEN
|
||
fac.writelog (p_applname, 'E', 'Fout tijdens Exact export. Factuurnummer: ' || v_factuur_nr || ' Crdnr: ' || v_crdnr,'');
|
||
END IF;
|
||
kfst.add_xml_row (v_bestand, '</GLEntry>');
|
||
v_order_count := v_order_count + 1;
|
||
END;
|
||
END LOOP;
|
||
|
||
kfst.add_xml_row (v_bestand, '</GLEntries>');
|
||
kfst.add_xml_row (v_bestand, '</eExact>');
|
||
fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, '');
|
||
|
||
END;
|
||
/
|
||
*/
|
||
CREATE OR REPLACE PROCEDURE kfst_select_exact (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2
|
||
)
|
||
AS
|
||
|
||
CURSOR c
|
||
IS
|
||
SELECT crdnr, factuur_nr, MAX(datum) datum
|
||
FROM kfst_v_bron_export_exact_xml
|
||
GROUP BY crdnr, factuur_nr;
|
||
|
||
CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM kfst_v_bron_export_exact_xml
|
||
WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr')
|
||
AND factuur_nr = c_factuur_nr;
|
||
|
||
CURSOR cv IS
|
||
SELECT result, result_order
|
||
FROM kfst_v_export_exact_t
|
||
ORDER BY result_order;
|
||
|
||
v_first NUMBER;
|
||
v_count NUMBER;
|
||
v_bestand VARCHAR2(12);
|
||
v_boekstuknummer NUMBER;
|
||
v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE;
|
||
v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE;
|
||
|
||
v_log VARCHAR2(1000);
|
||
v_log_prev VARCHAR2 (1000);
|
||
v_errormsg VARCHAR (200);
|
||
v_errorhint VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
BEGIN
|
||
v_count := 0;
|
||
v_bestand := SUBSTR(p_applname, 1, 12);
|
||
v_crdnr := 'Q';
|
||
v_factuur_nr := 'Q';
|
||
|
||
-- Eerst opruiming
|
||
DELETE FROM imp_log
|
||
WHERE imp_log_applicatie = p_applname;
|
||
|
||
DELETE fac_rapport
|
||
WHERE fac_rapport_node = v_bestand;
|
||
|
||
DELETE fin_kenmerkfactuur kf
|
||
WHERE fin_kenmerk_key = 1
|
||
AND fin_factuur_key IN (SELECT fin_factuur_key
|
||
FROM fin_factuur
|
||
WHERE fin_factuur_statuses_key <> 7);
|
||
|
||
-- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
|
||
-- deze keys gebruikt kunnen worden.
|
||
DELETE kfst_exp_factuur;
|
||
|
||
INSERT INTO kfst_exp_factuur (fin_factuur_key)
|
||
( SELECT DISTINCT fin_factuur_key
|
||
FROM kfst_v_factuur_gegevens
|
||
WHERE fin_factuur_statuses_key = 6
|
||
AND fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum:
|
||
AND fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan <20><>n jaar in de toekomst.
|
||
);
|
||
|
||
-- Bepaal het boekstuknummer (key 1) met het hoogste nummer van dit jaar
|
||
|
||
SELECT MAX(fin_kenmerkfactuur_waarde)
|
||
INTO v_boekstuknummer
|
||
FROM fin_kenmerkfactuur
|
||
WHERE fin_kenmerk_key = 1
|
||
AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY');
|
||
|
||
IF v_boekstuknummer IS NULL
|
||
THEN
|
||
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '610000');
|
||
END IF;
|
||
|
||
-- nu gaan we de boekstuknummer invullen
|
||
FOR rec IN c
|
||
LOOP
|
||
BEGIN
|
||
-- Als we een nieuwe leverancier/factuurnummer tegenkomen gaan we het boekstuknummer ophogen.
|
||
IF rec.crdnr <> v_crdnr OR rec.factuur_nr <> v_factuur_nr
|
||
THEN
|
||
v_boekstuknummer := v_boekstuknummer + 1;
|
||
v_crdnr := rec.crdnr;
|
||
v_factuur_nr := rec.factuur_nr;
|
||
END IF;
|
||
|
||
FOR rec1 IN c_sub (v_crdnr, v_factuur_nr)
|
||
LOOP
|
||
BEGIN
|
||
-- Boekstuknummer aanmaken
|
||
kfst.set_kenmerk('FIN', 1, rec1.fin_factuur_key, v_boekstuknummer, 0);
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- De view bevat voor alle subregels volgnummer 1. Deze gaan we nu omzetten naar echte volgnummers.
|
||
FOR rec IN cv
|
||
LOOP
|
||
BEGIN
|
||
v_first := substr(rec.result, 1,1);
|
||
IF v_first = 0 THEN
|
||
v_count := 0;
|
||
ELSE
|
||
v_count := v_count + 1;
|
||
END IF;
|
||
|
||
v_log_prev := v_log;
|
||
v_log := rec.result_order || ' | ' || rec.result_order;
|
||
INSERT INTO fac_rapport (
|
||
fac_rapport_regel,
|
||
fac_rapport_volgnr,
|
||
fac_rapport_node)
|
||
VALUES (
|
||
v_count || substr (rec.result, 2),
|
||
SUBSTR(rec.result_order, 1,2) || SUBSTR(rec.result_order, 5,4) || to_char(1000+v_count), -- forceer sortering bij count > 9, alleen jaar en volgnummer van het boekstuknummer zijn interessant.
|
||
v_bestand);
|
||
END;
|
||
END LOOP;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.writelog (p_applname, 'E', SUBSTR (v_errormsg, 1, 1000), '');
|
||
fac.writelog (p_applname, 'I', 'Log: ' || SUBSTR (v_log, 1, 990), '');
|
||
fac.writelog (p_applname, 'I', 'Log_prev: ' || SUBSTR (v_log_prev, 1, 990), '');
|
||
INSERT INTO fac_rapport (
|
||
fac_rapport_regel,
|
||
fac_rapport_volgnr,
|
||
fac_rapport_node)
|
||
VALUES (
|
||
'Fout: Export is afgebroken',
|
||
9999999999,
|
||
v_bestand);
|
||
-- Als er iets fout gegaan is willen we voorkomen dat de verwerk actie uitgevoerd wordt.
|
||
DELETE kfst_exp_factuur;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE VIEW kfst_v_export_verwerk_exact (
|
||
result,
|
||
result_order
|
||
)
|
||
AS
|
||
SELECT 'Lijst met bevroren facturen:' fac_rapport_regel, 0 fac_rapport_volgnr
|
||
FROM DUAL
|
||
UNION ALL
|
||
SELECT fac_rapport_regel, fac_rapport_volgnr
|
||
FROM fac_rapport
|
||
WHERE fac_rapport_node = 'VW_EXACT';
|
||
|
||
-- Procedure om alle geexporteerde facturen naar status verwerkt te zetten.
|
||
CREATE OR REPLACE PROCEDURE kfst_select_verwerk_exact (
|
||
p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2
|
||
)
|
||
AS
|
||
CURSOR c_fact
|
||
IS
|
||
SELECT f.fin_factuur_key
|
||
FROM kfst_exp_factuur f
|
||
, kfst_v_factuur_gegevens fg
|
||
WHERE f.fin_factuur_key = fg.fin_factuur_key
|
||
AND fg.fin_factuur_statuses_key = 6;
|
||
|
||
v_errormsg VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_aanvrager NUMBER;
|
||
v_bestelling_key NUMBER;
|
||
v_bestand VARCHAR2(12);
|
||
v_logdate DATE;
|
||
v_volgnr NUMBER;
|
||
BEGIN
|
||
v_errormsg := 'Geen akties';
|
||
|
||
-- Facilitor user
|
||
v_aanvrager := 4;
|
||
|
||
v_logdate := SYSDATE;
|
||
|
||
v_bestand := 'VW_EXACT';
|
||
v_volgnr := 1;
|
||
-- Eerst opruiming
|
||
DELETE fac_rapport
|
||
WHERE fac_rapport_node = v_bestand;
|
||
|
||
FOR rec1 IN c_fact
|
||
LOOP
|
||
BEGIN
|
||
UPDATE fin_factuur f
|
||
SET fin_factuur_statuses_key = 7
|
||
WHERE f.fin_factuur_key = rec1.fin_factuur_key;
|
||
|
||
fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
|
||
|
||
INSERT INTO fac_rapport (fac_rapport_node,
|
||
fac_rapport_volgnr,
|
||
fac_rapport_regel)
|
||
VALUES (v_bestand,
|
||
v_volgnr,
|
||
rec1.fin_factuur_key);
|
||
|
||
v_volgnr := v_volgnr + 1;
|
||
END;
|
||
END LOOP;
|
||
DELETE kfst_exp_factuur;
|
||
END;
|
||
/
|
||
|
||
------ 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 |