Files
Customer/AA/aaxx_fin.sql
Jos Migo 537b919304 AAIT#90690 -- Verkoopfacturen-verslag erg traag - Opgelost
svn path=/Customer/trunk/; revision=71085
2025-11-28 13:26:22 +00:00

5661 lines
325 KiB
SQL
Raw Permalink Blame History

--
-- $Id$
--
-- Script containing customer FINANCIAL configuration sql statements for HEYDAY
DEFINE thisfile = 'AAXX_FIN.SQL'
DEFINE dbuser = 'AAXX'
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
@@aa_prs_pack.sql;
-------------------------------------------------------------------------------
-- INKOOP- en VERKOOPINTERFACE
-------------------------------------------------------------------------------
-------------------------------------------
-- FUNCTIES
-------------------------------------------
-- FUNCTIE om bij het bovenliggend bedrijf/account de waarden op te halen van:
---- exact_boekdatum - de datum waar de admin in exact voor dit account op is afgesloten en er dus geen inkoopfacturen meer op doorgeboekt mogen worden
---- exact_inkooprun - of voor dit account de inkoopinterface automatisch in avond gerund wordt
CREATE OR REPLACE FUNCTION aaxx_get_exact_setting (
p_soort IN VARCHAR2, -- datum of inkooprun
p_user IN VARCHAR2,
p_user_sub IN VARCHAR2,
p_prs_kostenplaatsgrp_key IN NUMBER)
RETURN VARCHAR2
AS
CURSOR c
IS
SELECT *
FROM (SELECT aaxx_get_user
account,
NULL
sub_account,
NULL
prs_kostenplaatsgrp_key,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw, prs_kenmerk k
WHERE kw.prs_kenmerklink_verwijder IS NULL
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'EXACT_BOEKDATUM'
AND kw.prs_kenmerklink_niveau = 'B'
AND kw.prs_link_key = b.prs_bedrijf_key)
exact_boekdatum_gesloten,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw, prs_kenmerk k
WHERE kw.prs_kenmerklink_verwijder IS NULL
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'EXACT_INKOOPRUN'
AND kw.prs_kenmerklink_niveau = 'B'
AND kw.prs_link_key = b.prs_bedrijf_key)
exact_inkooprun_auto
FROM prs_bedrijf b
WHERE b.prs_bedrijf_naam = 'HEYDAY Facility Management'
AND b.prs_bedrijf_verwijder IS NULL
AND aaxx_get_user NOT IN ('INLO') -- de multi-clientomgeving(en) uitsluiten
UNION
SELECT 'INLO'
account,
flx.getdomeinwaarde (481,
(flx.getflex ('PRS',
k.prs_kenmerk_key,
b.prs_bedrijf_key,
'B')))
sub_account,
bkg.prs_kostenplaatsgrp_key,
bb.exact_boekdatum_gesloten,
COALESCE (ba.exact_inkooprun_auto, '0')
exact_inkooprun_auto
FROM prs_kenmerklink kw,
prs_kenmerk k,
prs_bedrijf b,
( SELECT a.prs_bedrijf_key,
MIN (kg.prs_kostenplaatsgrp_key)
prs_kostenplaatsgrp_key
FROM prs_afdeling a,
prs_kostenplaats k,
prs_kostenplaatsgrp kg
WHERE a.prs_afdeling_verwijder IS NULL
AND a.prs_bedrijf_key IS NOT NULL
AND a.prs_kostenplaats_key =
k.prs_kostenplaats_key
AND k.prs_kostenplaatsgrp_key =
kg.prs_kostenplaatsgrp_key
GROUP BY a.prs_bedrijf_key) bkg,
(SELECT kw.prs_link_key
prs_bedrijf_key,
kw.prs_kenmerklink_waarde
exact_boekdatum_gesloten
FROM prs_kenmerklink kw, prs_kenmerk k
WHERE prs_kenmerklink_verwijder IS NULL
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'EXACT_BOEKDATUM') bb,
(SELECT kw.prs_link_key prs_bedrijf_key,
kw.prs_kenmerklink_waarde exact_inkooprun_auto
FROM prs_kenmerklink kw, prs_kenmerk k
WHERE prs_kenmerklink_verwijder IS NULL
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'EXACT_INKOOPRUN') ba
WHERE kw.prs_kenmerklink_niveau = 'B'
AND prs_kenmerklink_verwijder IS NULL
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'EXACT_SUBACCOUNT'
AND kw.prs_link_key = b.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL
AND b.prs_bedrijf_key = bkg.prs_bedrijf_key
AND b.prs_bedrijf_key = bb.prs_bedrijf_key(+)
AND b.prs_bedrijf_key = ba.prs_bedrijf_key(+)
AND aaxx_get_user IN ('INLO') -- de multi-clientomgeving(en)
) v
WHERE v.account = p_user
AND (1 =
CASE
WHEN p_user_sub IS NULL THEN 1
WHEN v.sub_account = p_user_sub THEN 1
ELSE 0
END)
AND (1 =
CASE
WHEN p_prs_kostenplaatsgrp_key IS NULL
THEN
1
WHEN v.prs_kostenplaatsgrp_key =
p_prs_kostenplaatsgrp_key
THEN
1
ELSE
0
END);
v_output VARCHAR2 (60);
BEGIN
v_output := NULL; -- 'geen resultaat'
BEGIN
FOR rec IN C
LOOP
BEGIN
IF p_soort = 'datum'
THEN
RETURN rec.exact_boekdatum_gesloten;
END IF;
IF p_soort = 'inkooprun'
THEN
RETURN rec.exact_inkooprun_auto;
END IF;
END;
END LOOP;
RETURN v_output;
EXCEPTION
WHEN OTHERS
THEN
RETURN v_output;
END;
END aaxx_get_exact_setting;
/
CREATE OR REPLACE FUNCTION aaxx_get_debiteur_gebouw (p_locatie_code VARCHAR2,
p_gebouw_code VARCHAR2
) RETURN VARCHAR2
AS
CURSOR c IS
SELECT l.alg_locatie_code, g.alg_gebouw_code, kw.alg_onrgoedkenmerk_waarde
FROM alg_locatie l,
alg_gebouw g,
alg_onrgoedkenmerk kw,
alg_kenmerk k
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'G' AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_upper = 'GEBOUW-DEBITEUR'
AND l.alg_locatie_code = p_locatie_code
AND g.alg_gebouw_code = p_gebouw_code ;
v_debiteur VARCHAR2(60);
BEGIN
v_debiteur := 'Onbekende gebouw-debiteur: '|| p_locatie_code || '-' || p_gebouw_code;
BEGIN
FOR rec IN C
LOOP
BEGIN
RETURN rec.alg_onrgoedkenmerk_waarde;
END;
END LOOP;
RETURN v_debiteur;
EXCEPTION WHEN OTHERS THEN
RETURN v_debiteur;
END;
END aaxx_get_debiteur_gebouw;
/
CREATE OR REPLACE FUNCTION aaxx_get_cnt_gebrokenboekjaar (p_cnt_contract_key IN NUMBER
) RETURN VARCHAR2
AS
v_gebrokenboekjaar VARCHAR2(3);
v_beginjaar VARCHAR2(4);
v_eindjaar VARCHAR2(4);
v_teller NUMBER;
BEGIN
SELECT count(*)
INTO v_teller
FROM cnt_contract
WHERE cnt_contract_key = p_cnt_contract_key ;
IF v_teller > 0
THEN
SELECT TO_CHAR(cnt_contract_looptijd_van,'yyyy')
INTO v_beginjaar
FROM cnt_contract
WHERE cnt_contract_key = p_cnt_contract_key ;
SELECT TO_CHAR(cnt_contract_looptijd_tot,'yyyy')
INTO v_eindjaar
FROM cnt_contract
WHERE cnt_contract_key = p_cnt_contract_key ;
IF v_beginjaar = v_eindjaar
THEN
v_gebrokenboekjaar := 'nee';
ELSE
v_gebrokenboekjaar := 'ja';
END IF;
ELSE
v_gebrokenboekjaar := NULL ;
END IF;
RETURN v_gebrokenboekjaar;
END aaxx_get_cnt_gebrokenboekjaar;
/
-- FUNCTIE om binnen multiclient INLO de afwijkende SEN-omschrijving op te halen
---- Betreft de heyday-diensten opgenomen in de prs_kostensoort-tabel
---- De standaard dienst, de SEN-omschrijving, is de prs_kostensoort_opmerking (met als grootboek/kostenrekening de prs_kostensoort_refcode)
---- Indien voor een klant een afwijkende dienstomschrijving wordt gehanteerd dan wordt deze opgenomen in de prs_kostensoort_altcode
---- Voor INLO zijn er echter meerdere klanten, met meerdere verschillende dienstenomschrijving en deze zijn dus NIET onder prs_kostensoort_altcode opgenomen, maar onder EIGEN TABEL, genaamd SEN_AFWIJKEND
CREATE OR REPLACE FUNCTION aaxx_get_sen_omschrijving (
p_klantcode IN VARCHAR2, -- subaccount INLO uit KLANTEN-tabel (de exact-code)
p_prs_kostensoort_oms IN VARCHAR2
)
RETURN VARCHAR2
AS
v_fac_usrtab_key NUMBER(10);
v_klant_key NUMBER(10);
v_prs_kostensoort_opmerking VARCHAR(255) ;
v_retour VARCHAR2(255) := 'check afwijkende sen-omschrijving' ;
BEGIN
-- De SEN-tabel-key ophalen
SELECT MAX(fac_usrtab_key)
INTO v_fac_usrtab_key
FROM fac_usrtab
WHERE UPPER(fac_usrtab_naam) = 'SEN_AFWIJKEND'
AND fac_usrtab_verwijder IS NULL ;
-- De v_klant_key bepalen uit de klanten-eigen-tabel van INLO
SELECT MAX(fac_usrdata_key)
INTO v_klant_key
FROM fac_usrdata
WHERE fac_usrtab_key = 81
AND fac_usrdata_upper = UPPER(p_klantcode)
AND fac_usrdata_verwijder IS NULL ;
-- Kijken of er voor die SEN met code prs_kostensoort_oms een afwijkende SEN/Dienst-omschrijving gevonden kan worden
IF v_fac_usrtab_key IS NOT NULL AND v_klant_key IS NOT NULL
THEN
BEGIN
SELECT fac_usrdata_omschr2
INTO v_prs_kostensoort_opmerking
FROM fac_usrdata
WHERE fac_usrtab_key = v_fac_usrtab_key
AND UPPER(fac_usrdata_omschr) = UPPER(p_prs_kostensoort_oms) -- 'CV CONS REST'
AND fac_usrdata_parentkey = v_klant_key
AND fac_usrdata_verwijder IS NULL ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_retour := '';
END;
IF v_prs_kostensoort_opmerking IS NOT NULL
THEN
v_retour := v_prs_kostensoort_opmerking ;
END IF;
END IF;
RETURN v_retour;
END aaxx_get_sen_omschrijving;
/
-------------------------------------------
-- PO-SYSTEMATIEK - tbv verkoopinterface
-------------------------------------------
-- Heyday vult via een eigen PO-tabel voor al haar klanten de PO-nummers die de klant op de verkoopfacturen wil terug zien
-- Functie om uit PO-tabel voor de CORE-verkoopfacturen het voor die klantomgeving juiste PO-NUMMER te halen
CREATE OR REPLACE FUNCTION aaxx_get_po_nr (p_aaxxuser_sub IN VARCHAR2, -- subklant (inlo)
p_klantcode IN VARCHAR2,
p_klantoms IN VARCHAR2,
p_plaatscode IN VARCHAR2,
p_debiteurnr IN VARCHAR2,
p_kostensoortgroep IN VARCHAR2,
p_kostensoortcode IN VARCHAR2,
p_datum IN DATE) RETURN VARCHAR2
AS
v_po_nr VARCHAR2(20);
v_teller NUMBER;
BEGIN
-- Eerst teller
v_teller := 0 ;
SELECT count(*)
INTO v_teller
FROM aaxx_imp_klant_po
WHERE actief = 1
AND p_datum BETWEEN ingangsdatum AND einddatum
AND ingangsdatum IS NOT NULL AND einddatum IS NOT NULL
AND (1 = CASE WHEN p_aaxxuser_sub IS NULL THEN 1
WHEN UPPER(aaxxuser_sub) = p_aaxxuser_sub THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantcode IS NULL THEN 1
WHEN klantcode = p_klantcode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantoms IS NULL THEN 1
WHEN klantoms = p_klantoms THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_plaatscode IS NULL THEN 1
WHEN plaatscode = p_plaatscode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_debiteurnr IS NULL THEN 1
WHEN debiteurnr = p_debiteurnr THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortgroep IS NULL THEN 1
WHEN kostensoortgroep = p_kostensoortgroep THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortcode IS NULL THEN 1
WHEN kostensoortcode = p_kostensoortcode THEN 1
ELSE 0
END) ;
IF v_teller = 0
THEN
v_po_nr := NULL ;
ELSE
SELECT MAX(po)
INTO v_po_nr
FROM aaxx_imp_klant_po
WHERE actief = 1
AND p_datum BETWEEN ingangsdatum AND einddatum
AND ingangsdatum IS NOT NULL AND einddatum IS NOT NULL
AND (1 = CASE WHEN p_aaxxuser_sub IS NULL THEN 1
WHEN UPPER(aaxxuser_sub) = p_aaxxuser_sub THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantcode IS NULL THEN 1
WHEN klantcode = p_klantcode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantoms IS NULL THEN 1
WHEN klantoms = p_klantoms THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_plaatscode IS NULL THEN 1
WHEN plaatscode = p_plaatscode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_debiteurnr IS NULL THEN 1
WHEN debiteurnr = p_debiteurnr THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortgroep IS NULL THEN 1
WHEN kostensoortgroep = p_kostensoortgroep THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortcode IS NULL THEN 1
WHEN kostensoortcode = p_kostensoortcode THEN 1
ELSE 0
END) ;
END IF;
IF v_teller > 1
THEN
v_po_nr := SUBSTR (v_po_nr || '-!', 1, 20) ;
END IF;
RETURN v_po_nr;
END aaxx_get_po_nr;
/
-- Functie om uit PO-tabel voor de CORE-verkoopfacturen de voor die klantomgeving juiste PO-REGEL te halen
CREATE OR REPLACE FUNCTION aaxx_get_po_regel (p_aaxxuser_sub IN VARCHAR2, -- subklant (inlo)
p_klantcode IN VARCHAR2,
p_klantoms IN VARCHAR2,
p_plaatscode IN VARCHAR2,
p_debiteurnr IN VARCHAR2,
p_kostensoortgroep IN VARCHAR2,
p_kostensoortcode IN VARCHAR2,
p_datum IN DATE) RETURN VARCHAR2
AS
v_po_regel VARCHAR2(100);
v_teller NUMBER;
BEGIN
-- Eerst teller
v_teller := 0 ;
SELECT count(*)
INTO v_teller
FROM aaxx_imp_klant_po
WHERE actief = 1
AND p_datum BETWEEN ingangsdatum AND einddatum
AND ingangsdatum IS NOT NULL AND einddatum IS NOT NULL
AND (1 = CASE WHEN p_aaxxuser_sub IS NULL THEN 1
WHEN UPPER(aaxxuser_sub) = p_aaxxuser_sub THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantcode IS NULL THEN 1
WHEN klantcode = p_klantcode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantoms IS NULL THEN 1
WHEN klantoms = p_klantoms THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_plaatscode IS NULL THEN 1
WHEN plaatscode = p_plaatscode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_debiteurnr IS NULL THEN 1
WHEN debiteurnr = p_debiteurnr THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortgroep IS NULL THEN 1
WHEN kostensoortgroep = p_kostensoortgroep THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortcode IS NULL THEN 1
WHEN kostensoortcode = p_kostensoortcode THEN 1
ELSE 0
END) ;
IF v_teller = 0
THEN
v_po_regel := NULL ;
ELSE
SELECT MAX(regel)
INTO v_po_regel
FROM aaxx_imp_klant_po
WHERE actief = 1
AND p_datum BETWEEN ingangsdatum AND einddatum
AND ingangsdatum IS NOT NULL AND einddatum IS NOT NULL
AND (1 = CASE WHEN p_aaxxuser_sub IS NULL THEN 1
WHEN UPPER(aaxxuser_sub) = p_aaxxuser_sub THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantcode IS NULL THEN 1
WHEN klantcode = p_klantcode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_klantoms IS NULL THEN 1
WHEN klantoms = p_klantoms THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_plaatscode IS NULL THEN 1
WHEN plaatscode = p_plaatscode THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_debiteurnr IS NULL THEN 1
WHEN debiteurnr = p_debiteurnr THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortgroep IS NULL THEN 1
WHEN kostensoortgroep = p_kostensoortgroep THEN 1
ELSE 0
END)
AND (1 = CASE WHEN p_kostensoortcode IS NULL THEN 1
WHEN kostensoortcode = p_kostensoortcode THEN 1
ELSE 0
END) ;
END IF;
IF v_teller > 1
THEN
v_po_regel := SUBSTR (v_po_regel || '-!', 1, 100) ;
END IF;
RETURN v_po_regel;
END aaxx_get_po_regel;
/
-- Import voor HEYDAY-Finance om de PO-nummers van haar klanten te importeren
---- Wordt gebruikt in vk-interface2.0.
CREATE OR REPLACE PROCEDURE aaxx_import_klant_po (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- Input line
v_errormsg VARCHAR (1000);
v_hint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_header_is_valid NUMBER (1);
v_dummy VARCHAR2 (1000);
v_user VARCHAR2 (4);
-- De importvelden:
v_aaxxuser VARCHAR2 (4);
v_aaxxuser_sub VARCHAR2 (60); -- mutliclient - klantnaam
v_klantcode VARCHAR2 (50);
v_klantoms VARCHAR2 (50);
v_debiteurnr VARCHAR2 (20);
v_debiteuroms VARCHAR2 (50);
v_plaatscode VARCHAR2 (20);
v_kostensoortgroep VARCHAR2 (60);
v_kostensoortcode VARCHAR2 (60);
v_klantkostensoort VARCHAR2 (50);
v_regel VARCHAR2 (100);
v_po VARCHAR2 (20);
v_ingangsdatum DATE;
v_einddatum DATE;
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
-- Verwijder regels die de vorige keer geimporteerd zijn maar niet verwerkt zijn.
DELETE aaxx_imp_klant_po
WHERE actief = 0;
-- gooi lege regels weg uit de import
DELETE fac_imp_file
WHERE fac_import_key = p_import_key AND fac_imp_file_line LIKE ';;';
SELECT UPPER(fac_version_cust)
INTO v_user
FROM fac_version;
v_header_is_valid := 0;
v_ongeldig := 0;
FOR rec IN c
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec.fac_imp_file_line;
v_errormsg :=
'Fout opvragen te importeren rij:'
|| SUBSTR (v_newline, 1, 200);
v_aanduiding := '';
IF (UPPER (v_newline) LIKE
'AAXXUSER;AAXXUSER_SUB;KLANTCODE;KLANTOMS;PLAATSCODE;DEBITEURNR;DEBITEUROMS;KOSTENSOORTGROEP;KOSTENSOORTCODE;KLANTKOSTENSOORT;REGEL;PO;INGANGSDATUM;EINDDATUM%')
THEN
v_header_is_valid := 1;
ELSE
-- Lees alle veldwaarden
v_errormsg := 'Fout opvragen te importeren rij (aaxxuser)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_aaxxuser := UPPER(SUBSTR (v_dummy, 1, 4));
IF v_aaxxuser <> v_user
THEN
aaxx_imp_writelog (p_import_key,
'E',
'PO tabel kan niet ingelezen worden.',
'Ongeldige user');
v_ongeldig := 1;
END IF;
v_errormsg := 'Fout opvragen te importeren rij (aaxxuser_sub) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_aaxxuser_sub := SUBSTR (v_dummy, 1, 60);
v_errormsg := 'Fout opvragen te importeren rij (klantcode) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_klantcode := SUBSTR (v_dummy, 1, 50);
v_errormsg := 'Fout opvragen te importeren rij (klantoms) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_klantoms := SUBSTR (v_dummy, 1, 50);
v_errormsg := 'Fout opvragen te importeren rij (plaatscode) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_plaatscode := SUBSTR (v_dummy, 1, 20);
v_errormsg := 'Fout opvragen te importeren rij (debiteurnr) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_debiteurnr := SUBSTR (v_dummy, 1, 20);
v_errormsg :=
'Fout opvragen te importeren rij (debiteuroms) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_debiteuroms := SUBSTR (v_dummy, 1, 50);
v_errormsg :=
'Fout opvragen te importeren rij (kostensoortgroep) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_kostensoortgroep := SUBSTR (v_dummy, 1, 60);
v_errormsg :=
'Fout opvragen te importeren rij (kostensoortcode) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_kostensoortcode := SUBSTR (v_dummy, 1, 60);
v_errormsg :=
'Fout opvragen te importeren rij (kostensoortoms) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_klantkostensoort := SUBSTR (v_dummy, 1, 50);
v_errormsg := 'Fout opvragen te importeren rij (regel) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_regel := SUBSTR (v_dummy, 1, 100);
v_errormsg := 'Fout opvragen te importeren rij (v_po) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_po := SUBSTR (v_dummy, 1, 20);
v_errormsg :=
'Fout opvragen te importeren rij (ingangsdatum) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_ingangsdatum := fac.safe_to_date (v_dummy, 'dd-mm-yyyy');
IF v_ingangsdatum IS NULL
THEN
aaxx_imp_writelog (p_import_key,
'E',
'PO tabel kan niet ingelezen worden.',
'Ongeldige ingangsdatum');
v_ongeldig := 1;
END IF;
v_errormsg := 'Fout opvragen te importeren rij (einddatum) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_einddatum := fac.safe_to_date (v_dummy, 'dd-mm-yyyy');
IF v_einddatum IS NULL
THEN
aaxx_imp_writelog (p_import_key,
'E',
'PO tabel kan niet ingelezen worden.',
'Ongeldige einddatum');
v_ongeldig := 1;
END IF;
v_errormsg :=
'Fout bij toevoegen regel aan tabel '
|| v_klantcode
|| ' / '
|| v_klantoms
|| '.'
|| v_debiteurnr
|| ' - '
|| v_kostensoortgroep;
IF v_ongeldig = 0
THEN
INSERT INTO aaxx_imp_klant_po (aaxxuser,
aaxxuser_sub,
klantcode,
klantoms,
plaatscode,
debiteurnr,
debiteuroms,
kostensoortgroep,
kostensoortcode,
klantkostensoort,
regel,
po,
ingangsdatum,
einddatum,
actief)
VALUES (v_aaxxuser,
v_aaxxuser_sub,
v_klantcode,
v_klantoms,
v_plaatscode,
v_debiteurnr,
v_debiteuroms,
v_kostensoortgroep,
v_kostensoortcode,
v_klantkostensoort,
v_regel,
v_po,
v_ingangsdatum,
v_einddatum,
0);
END IF;
END IF;
END;
END LOOP;
IF v_header_is_valid = 0
THEN
aaxx_imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Toelichting: ... ');
v_ongeldig := 1;
END IF;
IF v_ongeldig = 0
THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
v_hint := v_errormsg;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_hint);
END aaxx_import_klant_po;
/
CREATE OR REPLACE PROCEDURE aaxx_update_klant_po (
p_import_key IN NUMBER)
AS
BEGIN
DELETE aaxx_imp_klant_po
WHERE actief = 1;
UPDATE aaxx_imp_klant_po
SET actief = 1;
COMMIT;
END aaxx_update_klant_po;
/
-- Rapportview voor export van de PO-tabel - Te gebruiken om mutaties in excel door te voeren en de actuele tabel weer met de importfunctie aaxx_imp_klant_po in de omgeving toe te voegen
CREATE OR REPLACE VIEW aaxx_v_imp_klant_po
(
AAXXUSER,
AAXXUSER_SUB,
KLANTCODE,
KLANTOMS,
PLAATSCODE,
DEBITEURNR,
DEBITEUROMS,
KOSTENSOORTGROEP,
KOSTENSOORTCODE,
KLANTKOSTENSOORT,
REGEL,
PO,
INGANGSDATUM,
EINDDATUM,
ACTIEF
)
AS
SELECT *
FROM aaxx_imp_klant_po ;
-----------------------------------------------
----- Verkoopinterface Maintenance-cap ----
-----------------------------------------------
-- Metodiek bij heyday waarbij tot max bedrag van 500, euro op de inkoopfactuur als FEE wordt teruggegeven
-- Basisview voor de berekening/bepaling van deze cap in de vk-interface
CREATE OR REPLACE VIEW aaxx_v_verkoopfactuur_cap
(
FIN_VERKOOPFACTUUR_MAAND,
MLD_MELDING_KEY,
MLD_OPDR_KEY,
MLD_OPDR_NR,
OPDRACHTDATUM,
MAINTENANCE_CAP_OMS,
INKOOPFACTUREN_TOTAAL_VERWERKT,
VK_REGELS_OPDRACHT,
VK_REGELS_OPDRACHT_VERWERKT,
VK_REGELS_OPDRACHT_ONVERWERKT,
VK_REGELS_OPDRACHT_CAP_VERWERKT,
VK_REGELS_OPDRACHT_CAP_ONVERWERKT,
VK_AANTAL_RUNS_VERWERKT,
VK_DATUM_EERST_RUN_VERWERKT,
FIN_VERKOOPFACTUUR_KEY,
CAP_TE_VERREKENEN_IN_RUN
)
AS
SELECT c.fin_verkoopfactuur_maand,
c.mld_melding_key,
c.mld_opdr_key,
c.mld_opdr_nr,
c.opdrachtdatum,
c.maintenance_cap_oms,
(SELECT sum(fin_factuur_totaal) inkoopfacturen_totaal FROM fin_factuur WHERE mld_opdr_key = c.mld_opdr_key AND fin_factuur_statuses_key = 7)
+ COALESCE
(
(SELECT SUM (fin_factuur_totaal) FROM aaxx_exp_factuur r, fin_factuur f WHERE r.fin_factuur_key = f.fin_factuur_key AND f.mld_opdr_key = c.mld_opdr_key)
, 0)
inkoopfacturen_totaal_verwerkt,
c.bedrag_regels_opdracht,
c.bedrag_regels_opdracht_verwerkt,
c.bedrag_regels_opdracht_onverwerkt,
c.bedrag_regels_opdracht_cap_verwerkt,
c.bedrag_regels_opdracht_cap_onverwerkt,
c.aantal_runs_verwerkt,
c.datum_eerst_run_verwerkt,
c.fin_verkoopfactuur_key,
CASE
WHEN bedrag_regels_opdracht >= 500 AND -(COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) < 500
THEN -ROUND(500 + (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)), 2) -- (deel) cap nog teruggeven/crediteren
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht + (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) > 0
THEN -ROUND(bedrag_regels_opdracht + (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0))) -- (deel) cap nog teruggeven/crediteren
WHEN bedrag_regels_opdracht < 500
AND bedrag_regels_opdracht + (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) < 0
THEN -ROUND(bedrag_regels_opdracht +(COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)),2) -- het gecrediteerde deel van de cap weer terugnemen/debiteren
ELSE 0
END
cap_te_verrekenen_in_run
FROM (
SELECT b.fin_verkoopfactuur_maand,
b.mld_melding_key,
b.mld_opdr_key,
b.mld_opdr_nr,
om.maintenance_cap_oms,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_c8 = 'CORE')
bedrag_regels_opdracht,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL AND fin_verkoopfactuur_c8 = 'CORE')
bedrag_regels_opdracht_verwerkt,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL AND fin_verkoopfactuur_c8 = 'CORE')
bedrag_regels_opdracht_onverwerkt,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')> 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL AND fin_verkoopfactuur_c8 = 'CORE')
bedrag_regels_opdracht_cap_verwerkt,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')> 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL AND fin_verkoopfactuur_c8 = 'CORE')
bedrag_regels_opdracht_cap_onverwerkt,
(SELECT count(*) FROM (SELECT fin_verkoopfactuurkop_key FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL GROUP BY fin_verkoopfactuurkop_key))
aantal_runs_verwerkt,
(SELECT min(fin_verkoopfactuur_datum) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL)
datum_eerst_run_verwerkt,
(SELECT mld_opdr_datumbegin FROM mld_opdr WHERE mld_opdr_key = b.mld_opdr_key)
opdrachtdatum,
(SELECT max(fin_verkoopfactuur_key) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_maand = b.fin_verkoopfactuur_maand AND fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL AND fin_verkoopfactuur_c8 = 'CORE')
fin_verkoopfactuur_key -- aan deze laatste openstaande verkoopregel van dat jaar (fin_verkoopfactuur_maand) zetten we CAP op (als we per verkooprun 1 CAP-regel gaan toevoegen)
FROM
(SELECT o.mld_opdr_key,
o.mld_melding_key,
o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr mld_opdr_nr,
o.mld_opdr_datumbegin,
vf.fin_verkoopfactuur_id,
vf.fin_verkoopfactuur_c6, -- ordernummer_klant
vf.fin_verkoopfactuur_bedrag,
vf.fin_verkoopfactuur_datum,
vf.fin_verkoopfactuur_maand,
CASE WHEN INSTR(prs_kostensoort_oms, 'CV CAP')> 0 THEN 'CAP-FEE' ELSE 'OPDRACHT' END soort_regel,
vf.fin_verkoopfactuurkop_key
FROM fin_verkoopfactuur vf, mld_opdr o
WHERE vf.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND vf.fin_verkoopfactuur_xmlnode = 'opdracht'
AND vf.fin_verkoopfactuur_c8 = 'CORE'
AND vf.fin_verkoopfactuur_bedrag <> 0
ORDER BY o.mld_melding_key, o.mld_opdr_key) b,
(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde, flx.getdomeinwaarde(sk.fac_kenmerkdomein_key, FLX.getflex ('OPD', km.mld_kenmerk_key, ko.mld_opdr_key)) maintenance_cap_oms
FROM mld_kenmerkopdr ko, mld_kenmerk km, mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = km.mld_kenmerk_key AND km.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'MAINTENANCE_CAP'
) om -- maintenance_cap
WHERE b.mld_opdr_key = om.mld_opdr_key
AND om.maintenance_cap_oms = 'Ja'
GROUP BY b.fin_verkoopfactuur_maand, b.mld_melding_key, b.mld_opdr_key, b.mld_opdr_nr, om.maintenance_cap_oms
) c
ORDER BY c.mld_melding_key, mld_opdr_key, c.fin_verkoopfactuur_maand ;
-------------------------------------------
-- INKOOPINTERFACE - exportfunctie - EXACT
-------------------------------------------
-- exact inkoop - automatische schedule om inkoopinterface te runnen voor DEDICATED omgevingen (zie ticket AAIT#79027)
---- In aaxx_daily_task per klant aan te zetten
---- Praktisch: inkooprun wordt dan 18:00 klaargezet (via genExportAAFM.bat) en 18:05 gedraaid voor die heyday-omgevingen
CREATE OR REPLACE PROCEDURE aaxx_export_exact_auto (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_inkooprun_auto VARCHAR(10) := '0';
v_kostenplaatsgrp_key NUMBER ;
v_exact_prefix VARCHAR(10);
CURSOR mc -- multi-client
IS
SELECT kpg.prs_kostenplaatsgrp_key,
x.export_kostenplaatsgrp_key,
x.fac_export_app_key
FROM prs_kostenplaatsgrp kpg,
(SELECT fac_export_app_key,
fac.safe_to_number (SUBSTR (fac_export_app_code, 7))
export_kostenplaatsgrp_key
FROM fac_export_app x
WHERE INSTR (fac_export_app_code, 'EXACT_') > 0
AND fac.safe_to_number (SUBSTR (fac_export_app_code, 7)) IS NOT NULL) x
WHERE kpg.prs_kostenplaatsgrp_key = x.export_kostenplaatsgrp_key
ORDER BY 1 ;
BEGIN
-- voor dedicated omgevingen
IF aaxx_get_user NOT IN ('INLO')
THEN
v_exact_prefix := NULL ;
SELECT aaxx_get_exact_setting('inkooprun',aaxx_get_user,NULL,NULL)
INTO v_inkooprun_auto
FROM dual;
-- als aan, dan de exact-export inplannen
IF v_inkooprun_auto = '1' THEN
INSERT INTO imp_schedule (imp_schedule_name) VALUES ('EXACT');
END IF;
END IF;
-- voor mutliclient omgevingen
FOR rec IN mc
LOOP
BEGIN
IF aaxx_get_user IN ('INLO')
THEN
SELECT aaxx_get_exact_setting('inkooprun',aaxx_get_user,NULL, rec.export_kostenplaatsgrp_key), '_' || TO_CHAR(rec.export_kostenplaatsgrp_key)
INTO v_inkooprun_auto, v_exact_prefix
FROM DUAL;
IF v_inkooprun_auto = '1' THEN
INSERT INTO imp_schedule (imp_schedule_name) VALUES ('EXACT' || v_exact_prefix);
END IF;
END IF;
END;
END LOOP;
END;
/
-- Inkoop: Alle facturen akkoord - Gebruikersoverzicht inkoopfacturen die wel/niet meegaan de EXACT inkooprun in
--- dit is ook de bronview voor de export EXACT (de inkoopfacturen die wel/niet meegaan naar Exact)
CREATE OR REPLACE VIEW aaxx_v_export_exact_check
(
prs_kostenplaatsgrp_nr,
fin_factuur_key,
check_in_inkooprun,
fin_factuur_totaal,
check_factuurdatum, -- facturen mogen niet ouder zijn dan 5 jaar of meer dan <20><>n jaar in de toekomst
check_dubbelefactuur, -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn met status ingevoerd, afgewezen of incompleet
check_nogtecontroleren, -- factuur staat op controle en moet nog gecontroleerd worden (vinkje controle nog niet gezet)
check_onholdgezet, -- filterstatus 1 = bolletje 'On hold - Niet meenemen in inkooprun'
check_admin_exact, -- voor inlo en aait gelden meerdere administratie met een vereiste match op SUBSTR(prs_kostenplaatsgrp_nr, 1, 3)
check_geen_kostensoort, -- facturen zonder kostensoort niet meenemen
check_geen_grootboeknr, -- facturen zonder grootboeknr ( = financiele waarde op de kostensoort = prs_kostensoort_refcode)
check_geen_leveranciernr, -- nog geen exact-leverancier-nr bekend
check_klant_project_po_marges, -- tbv projectorders controle op gevulde 'ordernummer klant' en marges voor verkoopfacturatie
check_filter_nietnaarexact, -- filterstatus 2 = inkoopfactuur gaat niet naar exact (niet in XML-output) maar wordt wel op verwerkt gezet
check_opdracht_reden_0, -- opdracht waarin expliciet is opgegeven dat er geen kosten aan verbonden zijn
check_afwijkend_kostensoort, -- op de melding (op onderliggende opdrachten) al facturen geboekt/verwerkt met afwijkende kostensoort
check_gesloten_boekdatum -- voor deze administratie is de financiele afsluiting met klant gedaan en de verplichting van deze factuur ligt voor die afsluit-datum
)
AS
SELECT CASE
WHEN f.prs_kostenplaatsgrp_key IS NOT NULL
THEN
(SELECT prs_kostenplaatsgrp_nr
|| ' - '
|| prs_kostenplaatsgrp_oms
FROM prs_kostenplaatsgrp
WHERE prs_kostenplaatsgrp_key =
f.prs_kostenplaatsgrp_key)
ELSE
NULL
END
prs_kostenplaatsgrp_nr,
f.fin_factuur_key,
CASE
WHEN f.check_factuurdatum IS NULL
AND f.check_dubbelefactuur IS NULL
AND f.check_nogtecontroleren IS NULL
AND f.check_onholdgezet IS NULL
AND kp.check_admin_exact IS NULL
AND f.check_geen_kostensoort IS NULL
AND f.check_geen_grootboeknr IS NULL
AND f.check_geen_leveranciernr IS NULL
AND f.check_klant_project_po_marges IS NULL
AND f.check_nietnaarexact IS NULL
AND f.check_opdracht_reden_0 IS NULL
AND f.check_kostensoort_afwijkend IS NULL
AND f.check_gesloten_boekdatum IS NULL
THEN
'Ja'
ELSE
'Nee'
END
inkooprun,
f.fin_factuur_totaal,
f.check_factuurdatum,
f.check_dubbelefactuur,
f.check_nogtecontroleren,
f.check_onholdgezet,
kp.check_admin_exact,
f.check_geen_kostensoort,
f.check_geen_grootboeknr,
f.check_geen_leveranciernr,
f.check_klant_project_po_marges,
f.check_nietnaarexact,
f.check_opdracht_reden_0,
f.check_kostensoort_afwijkend,
f.check_gesloten_boekdatum
FROM (SELECT f.fin_factuur_key,
fs.fin_factuur_statuses_omschr,
COALESCE (kp_cnt.prs_kostenplaatsgrp_key,
kp_opd.prs_kostenplaatsgrp_key,
kp_bes.prs_kostenplaatsgrp_key)
prs_kostenplaatsgrp_key,
CASE
WHEN f.prs_kostensoort_key IS NULL
THEN
'geen kostensoort!'
ELSE
''
END
check_geen_kostensoort,
CASE
WHEN k.prs_kostensoort_key IS NOT NULL
AND k.prs_kostensoort_refcode IS NULL
THEN
'geen grootboeknr!'
ELSE
''
END
check_geen_grootboeknr,
CASE
WHEN COALESCE(b_o.prs_leverancier_nr,b_c.prs_leverancier_nr, b_b.prs_leverancier_nr) IS NULL
THEN
'geen leverancier-nr'
ELSE
''
END
check_geen_leveranciernr,
CASE
WHEN pr.mld_opdr_key IS NOT NULL
AND (pr.po_nr = 'onbekend' OR pr.fee_proc = 'onbekend' OR pr.fee_vast = 'onbekend') -- voorwaarden voor export is dat deze alle gevuld moeten zijn
AND ( aaxx_get_user IN ('THHD', 'MENZIS', 'REMEHA') -- ('ESSENT','DSM', 'GN')
OR ( aaxx_get_user IN ('INLO')
AND pr.inlo_subaccount IN ('ALLIANDER', 'COVESTRO', 'IKEA', 'KADASTER', 'VGZ', 'MENZIS')))
THEN
'pr-melding niet volledig gevuld!'
ELSE
''
END
check_klant_project_po_marges,
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)))
prs_kostenplaats_key,
f.fin_factuur_totaal,
CASE
WHEN f.fin_factuur_datum < SYSDATE - (5 * 365)
OR f.fin_factuur_datum > SYSDATE + 365
THEN
'ongeldige factuurdatum: '
|| TO_CHAR (f.fin_factuur_datum, 'dd-mm-yyyy')
ELSE
''
END
check_factuurdatum,
( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn met status ingevoerd(2) of incompleet(3)
SELECT DECODE (COUNT (*), 0, '', 'dubbele factuur!')
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 (2, 3)
AND f.fin_factuur_statuses_key = 6)
check_dubbelefactuur,
CASE
WHEN contr.fin_factuur_controle = 1
AND fin_factuur_controle_ok IS NULL
THEN
'Controle - Nog doen'
ELSE
''
END
check_nogtecontroleren,
CASE
WHEN f.fin_factuur_flag = 1 THEN 'on hold'
ELSE ''
END
check_onholdgezet,
CASE
WHEN f.fin_factuur_flag = 2 AND aaxx_get_user IN ('INLO')
AND COALESCE (kp_cnt.prs_kostenplaatsgrp_key, kp_opd.prs_kostenplaatsgrp_key, kp_bes.prs_kostenplaatsgrp_key) IN (321) -- 1-1-2024 alleen voor INLO-Vivada van toepassing
THEN
'niet naar exact - wordt wel verwerkt'
ELSE ''
END
check_nietnaarexact,
(SELECT DECODE(ko.mld_kenmerkopdr_waarde, NULL, NULL, '0-reden in opdracht')
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_upper = 'REDEN 0 ORDER'
AND k.mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_verwijder IS NULL
AND ko.mld_kenmerkopdr_waarde IS NOT NULL
AND ko.mld_kenmerkopdr_verwijder IS NULL
AND ko.mld_opdr_key = o.mld_opdr_key
) check_opdracht_reden_0,
( -- afwijkende kosten in deze factuur t.o.v. de reeds verwerkte facturen op deze melding - voor alle accounts geldt deze regel behalve voor AAIT
SELECT DECODE (COUNT (*), 0, '', DECODE(aaxx_get_user, 'IT', '', 'afwijkende kostensoort op verwerkte mld/opdr-facturen!'))
FROM (SELECT m.mld_melding_key, opdr.mld_opdr_key, ff.fin_factuur_key, ff.prs_kostensoort_key, ff.fin_factuur_statuses_key
FROM mld_melding m,
mld_opdr opdr,
fin_factuur ff
WHERE m.mld_melding_key = opdr.mld_melding_key
AND opdr.mld_opdr_key = ff.mld_opdr_key
AND ff.prs_kostensoort_key IS NOT NULL
AND ff.fin_factuur_statuses_key IN (7)
) o_f
WHERE o_f.mld_melding_key = o.mld_melding_key
AND o_f.mld_opdr_key = o.mld_opdr_key
AND f.prs_kostensoort_key IS NOT NULL
AND o_f.prs_kostensoort_key <> f.prs_kostensoort_key
)
check_kostensoort_afwijkend,
CASE WHEN aaxx_get_user NOT IN ('INLO') AND fac.safe_to_date (aaxx_get_exact_setting('datum', aaxx_get_user, NULL, NULL), 'dd-mm-yyyy') IS NOT NULL
AND COALESCE(kp_cnt.cnt_contract_looptijd_van, kp_opd.mld_opdr_datumbegin, kp_bes.bes_bestelling_datum) < fac.safe_to_date (aaxx_get_exact_setting('datum', aaxx_get_user, NULL, NULL), 'dd-mm-yyyy')
THEN 'datum verplichting < boekjaar_klant_afgerond (' || TO_CHAR(aaxx_get_exact_setting('datum', aaxx_get_user, NULL, NULL)) || ')'
WHEN aaxx_get_user IN ('INLO') AND fac.safe_to_date (aaxx_get_exact_setting('datum', aaxx_get_user, NULL, COALESCE (kp_cnt.prs_kostenplaatsgrp_key, kp_opd.prs_kostenplaatsgrp_key,kp_bes.prs_kostenplaatsgrp_key)), 'dd-mm-yyyy') IS NOT NULL
AND COALESCE(kp_cnt.cnt_contract_looptijd_van, kp_opd.mld_opdr_datumbegin, kp_bes.bes_bestelling_datum) < fac.safe_to_date (aaxx_get_exact_setting('datum', aaxx_get_user, NULL, COALESCE (kp_cnt.prs_kostenplaatsgrp_key, kp_opd.prs_kostenplaatsgrp_key,kp_bes.prs_kostenplaatsgrp_key)), 'dd-mm-yyyy')
THEN 'datum verplichting < boekjaar_klant_afgerond (' || TO_CHAR(aaxx_get_exact_setting('datum', aaxx_get_user, NULL, COALESCE (kp_cnt.prs_kostenplaatsgrp_key, kp_opd.prs_kostenplaatsgrp_key,kp_bes.prs_kostenplaatsgrp_key))) || ')'
ELSE ''
END
check_gesloten_boekdatum
FROM fin_factuur f,
prs_kostensoort k,
fin_factuur_statuses fs,
mld_opdr o,
mld_typeopdr ot,
cnt_contract c,
bes_bestelopdr bo,
prs_bedrijf b_o,
prs_bedrijf b_c,
prs_bedrijf b_b,
aaxx_v_projectorders_bron pr,
(SELECT fin_factuur_key,
(SELECT fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur fk, fin_kenmerk k
WHERE fk.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_verwijder IS NULL
AND UPPER (fin_kenmerk_omschrijving) =
'EXTRA CONTROLE?'
AND fk.fin_factuur_key = f.fin_factuur_key)
fin_factuur_controle,
(SELECT fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur fk, fin_kenmerk k
WHERE fk.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_verwijder IS NULL
AND UPPER (fin_kenmerk_omschrijving) =
'GECONTROLEERD'
AND fk.fin_factuur_key = f.fin_factuur_key)
fin_factuur_controle_ok
FROM fin_factuur f) contr,
( SELECT fin_factuur_key,
c.prs_kostenplaats_key,
kp.prs_kostenplaats_nr,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr,
c.cnt_contract_looptijd_van
FROM fin_factuur f,
cnt_contract c,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.cnt_contract_key = c.cnt_contract_key
AND c.prs_kostenplaats_key =
kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_cnt,
( SELECT fin_factuur_key,
o.prs_kostenplaats_key,
kp.prs_kostenplaats_nr,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr,
o.mld_opdr_datumbegin
FROM fin_factuur f,
mld_opdr o,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.mld_opdr_key = o.mld_opdr_key
AND o.prs_kostenplaats_key =
kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_opd,
( SELECT DISTINCT f.fin_factuur_key,
b.prs_kostenplaats_key,
kp.prs_kostenplaats_nr,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr,
b.bes_bestelling_datum
FROM fin_factuur f,
bes_bestelling b,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.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
AND b.prs_kostenplaats_key =
kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_bes
WHERE f.fin_factuur_statuses_key =
fs.fin_factuur_statuses_key
AND f.fin_factuur_key = contr.fin_factuur_key
AND f.prs_kostensoort_key = k.prs_kostensoort_key(+)
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND f.mld_opdr_key = pr.mld_opdr_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_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 f.fin_factuur_key = kp_cnt.fin_factuur_key(+)
AND f.fin_factuur_key = kp_opd.fin_factuur_key(+)
AND f.fin_factuur_key = kp_bes.fin_factuur_key(+)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_statuses_key = 6 -- op akkoord
) f,
(SELECT kp.prs_kostenplaats_key,
CASE
WHEN aaxx_get_user IN ('INLO', 'IT')
AND SUBSTR (prs_kostenplaatsgrp_nr, 1, 3) IN
(SELECT administratie
FROM aaxx_v_administratie)
THEN
''
WHEN aaxx_get_user NOT IN ('INLO', 'IT')
THEN
''
ELSE
'kostenplaatsgrp_nr niet in interface bekend '
|| SUBSTR (kpg.prs_kostenplaatsgrp_nr, 1, 3)
END
check_admin_exact
FROM prs_kostenplaats kp, prs_kostenplaatsgrp kpg
WHERE kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)) kp,
(
SELECT fin_factuur_statuses_key,
COUNT (*),
MIN (fin_factuur_key) fin_factuur_key_min
FROM fin_factuur
WHERE fin_factuur_statuses_key = 6
GROUP BY fin_factuur_statuses_key
) fm
WHERE f.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND f.fin_factuur_key >= fm.fin_factuur_key_min;
CREATE OR REPLACE VIEW aaxx_v_aanwezigfactuur
(
FIN_FACTUUR_KEY,
FIN_FACTUUR_NR,
FIN_FACTUUR_TOTAAL,
FIN_FACTUUR_TOTAAL_BTW,
MLD_OPDR_KEY,
CNT_CONTRACT_KEY,
BES_BESTELOPDR_KEY,
PRS_PERSLID_KEY_USER,
FIN_FACTUUR_DATUM,
FIN_FACTUUR_BOEKMAAND,
FIN_FACTUUR_DEBITEUR_NR,
PRS_KOSTENSOORT_KEY,
FIN_FACTUUR_OPMERKING,
FIN_FACTUUR_STATUSES_KEY,
FIN_FACTUUR_VERWIJDER
)
AS
SELECT FIN_FACTUUR_KEY,
FIN_FACTUUR_NR,
FIN_FACTUUR_TOTAAL,
FIN_FACTUUR_TOTAAL_BTW,
MLD_OPDR_KEY,
CNT_CONTRACT_KEY,
BES_BESTELOPDR_KEY,
PRS_PERSLID_KEY_USER,
FIN_FACTUUR_DATUM,
FIN_FACTUUR_BOEKMAAND,
FIN_FACTUUR_DEBITEUR_NR,
PRS_KOSTENSOORT_KEY,
FIN_FACTUUR_OPMERKING,
FIN_FACTUUR_STATUSES_KEY,
FIN_FACTUUR_VERWIJDER
FROM fin_factuur
WHERE fin_factuur_verwijder IS NULL AND fin_factuur_statuses_key > 1;
-- fin_kenmerk_key 2 is de keuze of dit de laatste factuur van de opdracht is.
CREATE OR REPLACE VIEW aaxx_v_factuur_gegevens
(
fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
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,
laatste_factuur,
project_nummer,
project_nummer_kp,
project_naam,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_key,
prs_kostenplaats_key,
prs_kostenplaatsgrp_key,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
fin_factuur_statuses_key,
lev_kpn,
fin_factuur_controle,
fin_factuur_controle_ok,
fin_factuur_flag
)
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,
DECODE (TO_CHAR (f.fin_factuur_datum, 'yyyy'),
'2010', TO_DATE ('20110102', 'YYYYMMDD'),
'2011', TO_DATE ('20120102', 'YYYYMMDD'),
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_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,
c.cnt_contract_looptijd_van,
bo.bes_bestelopdr_datum)
opdr_datum,
COALESCE (
(SELECT fac.safe_to_number (fac_usrdata_code)
FROM fin_kenmerkfactuur fk, fac_usrdata ud
WHERE fk.fin_factuur_key = f.fin_factuur_key
AND fk.fin_kenmerk_key = 2
AND fac.safe_to_number (fin_kenmerkfactuur_waarde) =
fac_usrdata_key),
1),
pr.mld_project_nr -- Voor Projectorders en Projectorder (externe uren)
projectnummer,
CASE
WHEN aaxx_get_user = 'IT'
AND ( ot.mld_typeopdr_omschrijving = 'Workorder'
OR c.cnt_contract_key IS NOT NULL)
THEN -- Zie ticket AAIT#69225
COALESCE (
(SELECT DECODE (kpi.prs_kostenplaats_module,
'PRJ', kpi.prs_kostenplaats_nr,
NULL)
FROM prs_kostenplaats kpi
WHERE kpi.prs_kostenplaats_key =
o.prs_kostenplaats_key),
COALESCE (
(SELECT DECODE (kpi.prs_kostenplaats_module,
'PRJ', kpi.prs_kostenplaats_nr,
NULL)
FROM prs_kostenplaats kpi
WHERE kpi.prs_kostenplaats_key =
c.prs_kostenplaats_key),
(SELECT DISTINCT
DECODE (kpi.prs_kostenplaats_module,
'PRJ', kpi.prs_kostenplaats_nr,
NULL)
FROM bes_bestelling b,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
prs_kostenplaats kpi
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
AND b.prs_kostenplaats_key =
kpi.prs_kostenplaats_key)))
ELSE
NULL
END
project_nummer_kp,
pr.mld_project_omschrijving -- Voor Projectorders en Projectorder (externe uren)
projectnaam,
prs_kostensoort_oms,
DECODE (
aaxx_get_user,
'INLO', DECODE (
COALESCE (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyy'),
COALESCE (
TO_CHAR (
DECODE (
aaxx_get_cnt_gebrokenboekjaar (
c.cnt_contract_key),
'nee', c.cnt_contract_looptijd_tot,
'ja', TO_DATE (
fin_factuur_boekmaand,
'yyyy-mm'),
NULL),
'yyyy'),
TO_CHAR (bo.bes_bestelopdr_datum, 'yyyy'))),
'2025', k.prs_kostensoort_refcode,
'2026', '1350400',
DECODE (
SUBSTR (k.prs_kostensoort_upper, 1, 3),
'CF ', '1350842',
'CFE', '1350842',
'CV ', '1350843',
'CVE', '1350844',
'NC ', DECODE (
SUBSTR (k.prs_kostensoort_upper,
1,
7),
'NC PROJ', '1350845',
'1350844'),
'Onbekend')),
'IT', DECODE (
COALESCE (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyy'),
COALESCE (
TO_CHAR (
DECODE (
aaxx_get_cnt_gebrokenboekjaar (
c.cnt_contract_key),
'nee', c.cnt_contract_looptijd_tot,
'ja', TO_DATE (
fin_factuur_boekmaand,
'yyyy-mm'),
NULL),
'yyyy'),
TO_CHAR (bo.bes_bestelopdr_datum, 'yyyy'))),
'2025', k.prs_kostensoort_refcode,
'2026', '1350400',
DECODE (
SUBSTR(COALESCE(kp_cnt.prs_kostenplaatsgrp_nr, kp_opd.prs_kostenplaatsgrp_nr, kp_bes.prs_kostenplaatsgrp_nr),1,3),
'400', '1350846',
'401', '1350846',
'500', '1350847',
k.prs_kostensoort_refcode)),
--NIEUW DSM ivm gebruik L-code #56150
'DSM', DECODE (
COALESCE (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyy'),
COALESCE (
TO_CHAR (
DECODE (
aaxx_get_cnt_gebrokenboekjaar (
c.cnt_contract_key),
'nee', c.cnt_contract_looptijd_tot,
'ja', TO_DATE (
fin_factuur_boekmaand,
'yyyy-mm'),
NULL),
'yyyy'),
TO_CHAR (bo.bes_bestelopdr_datum, 'yyyy'))),
'2025', k.prs_kostensoort_refcode,
'2026', '1350400',
DECODE (
SUBSTR (k.prs_kostensoort_upper, 1, 2),
'L ', DECODE (
SUBSTR (k.prs_kostensoort_upper,
1,
5),
'L CF ', '1350842',
'L CFE', '1350842',
'L CV ', '1350843',
'L CVE', '1350844',
'L NC ', DECODE (
SUBSTR (
k.prs_kostensoort_upper,
1,
9),
'L NC PROJ', '1350845',
'1350844'),
'Onbekend'),
DECODE (
SUBSTR (k.prs_kostensoort_upper, 1, 3),
'CF ', '1350842',
'CFE', '1350842',
'CV ', '1350843',
'CVE', '1350844',
'NC ', DECODE (
SUBSTR (k.prs_kostensoort_upper,
1,
7),
'NC PROJ', '1350845',
'1350844'),
'Onbekend'))),
-- standaard keuze voor alle andere accounts.
DECODE (
COALESCE (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyy'),
COALESCE (
TO_CHAR (
DECODE (
aaxx_get_cnt_gebrokenboekjaar (
c.cnt_contract_key),
'nee', c.cnt_contract_looptijd_tot,
'ja', TO_DATE (fin_factuur_boekmaand,
'yyyy-mm'),
NULL),
'yyyy'),
TO_CHAR (bo.bes_bestelopdr_datum, 'yyyy'))),
'2025', k.prs_kostensoort_refcode,
'2026', '1350400', -- VAST balansrekening vooruit-betaald volgend boekjaar
DECODE (
SUBSTR (k.prs_kostensoort_upper, 1, 3),
'CF ', '1350842',
'CFE', '1350842',
'CV ', '1350843',
'CVE', '1350844',
'NC ', DECODE (SUBSTR (k.prs_kostensoort_upper, 1, 7),
'NC PROJ', '1350845',
'1350844'),
'Onbekend'))),
k.prs_kostensoort_key,
COALESCE(kp_cnt.prs_kostenplaats_key, kp_opd.prs_kostenplaats_key, kp_bes.prs_kostenplaats_key)
prs_kostenplaats_key,
COALESCE(kp_cnt.prs_kostenplaatsgrp_key, kp_opd.prs_kostenplaatsgrp_key, kp_bes.prs_kostenplaatsgrp_key)
prs_kostenplaatsgrp_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(2) of incompleet(3)
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 (2, 3)
AND f.fin_factuur_statuses_key = 6)
fin_factuur_statuses_key,
lk.prs_kostenplaats_nr
lev_kpn,
(SELECT fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur fk, fin_kenmerk k
WHERE fk.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_verwijder IS NULL
AND UPPER (fin_kenmerk_omschrijving) = 'EXTRA CONTROLE?'
AND fk.fin_factuur_key = f.fin_factuur_key)
fin_factuur_controle,
(SELECT fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur fk, fin_kenmerk k
WHERE fk.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_verwijder IS NULL
AND UPPER (fin_kenmerk_omschrijving) = 'GECONTROLEERD'
AND fk.fin_factuur_key = f.fin_factuur_key)
fin_factuur_controle_ok,
COALESCE (f.fin_factuur_flag, 0)
FROM fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
mld_opdr o,
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,
aaxx_v_projectorders_bron pr,
( SELECT fin_factuur_key,
c.prs_kostenplaats_key,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr
FROM fin_factuur f,
cnt_contract c,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.cnt_contract_key = c.cnt_contract_key
AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_cnt,
( SELECT fin_factuur_key,
o.prs_kostenplaats_key,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr
FROM fin_factuur f,
mld_opdr o,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.mld_opdr_key = o.mld_opdr_key
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_opd,
( SELECT DISTINCT f.fin_factuur_key,
b.prs_kostenplaats_key,
kpg.prs_kostenplaatsgrp_key,
kpg.prs_kostenplaatsgrp_nr
FROM fin_factuur f,
bes_bestelling b,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE f.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
AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
ORDER BY f.fin_factuur_key DESC) kp_bes
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.fin_factuur_key = kp_cnt.fin_factuur_key(+)
AND f.fin_factuur_key = kp_opd.fin_factuur_key(+)
AND f.fin_factuur_key = kp_bes.fin_factuur_key(+)
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND f.mld_opdr_key = pr.mld_opdr_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_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 f.prs_kostensoort_key = k.prs_kostensoort_key(+)
AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+)
AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+)
AND f.fin_factuur_verwijder IS NULL;
-- De exact export kan voor AAIT meerdere administraties bevatten. In dat geval wordt de
-- regel opgeslagen met een prefix van het administratienummer met een ##
-- Hier splitsen we deze weer naar losse velden in de view. De kolom adm_exact is de bestandsnaam
-- zoals deze in de importdefinitie bepaald is.
CREATE OR REPLACE VIEW aaxx_v_export_exact_xml (
result,
result_order,
adm_exact
)
AS
SELECT SUBSTR (fac_rapport_regel, INSTR (fac_rapport_regel, '##') + 2),
fac_rapport_volgnr,
SUBSTR (fac_rapport_regel, 1, INSTR (fac_rapport_regel, '##') - 1)
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT' AND INSTR (fac_rapport_regel, '##') <> 0
UNION ALL
SELECT fac_rapport_regel, fac_rapport_volgnr, NULL
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT' AND INSTR (fac_rapport_regel, '##') = 0;
/* nieuwe view om oude aaxx_v_export_exact_xml view op termijn te vervangen. Door gebruik te maken
van de nieuwe view hoeft er per klant geen specifieke export in de cust.sql. De prefix in de
export tabel staat dan op AAXX */
CREATE OR REPLACE VIEW aaxx_v_export_exact (
result,
result_order,
adm_exact
)
AS
SELECT result, result_order, adm_exact
FROM aaxx_v_export_exact_xml;
CREATE OR REPLACE VIEW aaxx_v_bron_export_exact_xml
(
fin_factuur_key,
oms25,
opdracht_id,
factuur_nr,
datum,
crdnr,
projectnr,
projectnr_kp,
projectnaam,
bedrag_txt,
bedrag,
bedrag_incl,
betaalref,
itemcode,
reknr,
kstplcode,
kstdrcode,
btw_code,
lev_kpn,
prs_kostenplaatsgrp_key, -- sub_accounts tbv INLO mutliclient
administratie
)
AS
SELECT fin_factuur_key,
fin_factuur_nr
|| ' - '
|| REPLACE (SUBSTR (fin_factuur_opmerking, 1, 30), ',', '')
oms25,
opdracht_id,
fin_factuur_nr,
TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
(SELECT prs_leverancier_nr
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
crdnr,
project_nummer,
project_nummer_kp,
project_naam,
REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt,
bedrag,
bedrag_incl,
fin_factuur_nr || '/' || fin_factuur_debiteur_nr betaalref,
prs_kostensoort_oms itemcode,
prs_kostensoort_refcode reknr,
DECODE (
aaxx_get_user,
'IT', DECODE (prs_kostenplaatsgrp_key, 262, '001CC001', -- ticket AAIT#77757
261, '001CC001',
281, '001CC001',
282, '001CC001',
(SELECT DECODE (INSTR(prs_kostenplaats_nr, '/'), 0, prs_kostenplaats_nr, SUBSTR(prs_kostenplaats_nr, 1, INSTR(prs_kostenplaats_nr, '/')-1))
FROM prs_kostenplaats kp
WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key)),
'GUL',
(select exact_code from aaxx_v_exact_code_gebouw_fac ecgf where ecgf.fin_factuur_key = fg.fin_factuur_key),
'INLO',
(select klantcode from aaxx_v_klantcode_gebouw_fac kcgf where kcgf.fin_factuur_key = fg.fin_factuur_key),
'ARCADIS',
DECODE (cnt_contract_key, NULL,
(select exact_code from aaxx_v_exact_code_gebouw_fac ecgf where ecgf.fin_factuur_key = fg.fin_factuur_key),
'999999'),
'DSM',
(select exact_code from aaxx_v_exact_code_district_fac ecgf where ecgf.fin_factuur_key = fg.fin_factuur_key),
'EXPO',
DECODE (
(SELECT MAX(l.alg_district_key)
FROM (SELECT l.alg_locatie_key
FROM alg_locatie l, mld_melding m, mld_opdr o
WHERE l.alg_locatie_key = m.mld_alg_locatie_key
AND m.mld_melding_key = o.mld_melding_key
AND o.mld_opdr_key = fg.mld_opdr_key
UNION
SELECT cnt_alg_plaats_key
FROM cnt_contract_plaats cp
WHERE cp.cnt_contract_key = fg.cnt_contract_key
AND cnt_alg_plaats_code = 'L'
UNION
SELECT g.alg_locatie_key
FROM cnt_contract_plaats cp, alg_gebouw g
WHERE cp.cnt_contract_key = fg.cnt_contract_key
AND cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key = g.alg_gebouw_key) lg,
alg_locatie l
WHERE l.alg_locatie_key = lg.alg_locatie_key),
61, '03701000', -- 03701000 Nationale Nederlanden
62, '03700000', -- 4001 Handel Amsterdam
'Onbekend'),
'SABIC',
DECODE (
(SELECT MAX(alg_locatie_key)
FROM (SELECT l.alg_locatie_key
FROM alg_locatie l, mld_melding m, mld_opdr o
WHERE l.alg_locatie_key = m.mld_alg_locatie_key
AND m.mld_melding_key = o.mld_melding_key
AND o.mld_opdr_key = fg.mld_opdr_key
UNION
SELECT cnt_alg_plaats_key
FROM cnt_contract_plaats cp
WHERE cp.cnt_contract_key = fg.cnt_contract_key
AND cnt_alg_plaats_code = 'L'
UNION
SELECT g.alg_locatie_key
FROM cnt_contract_plaats cp, alg_gebouw g
WHERE cp.cnt_contract_key = fg.cnt_contract_key
AND cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
UNION -- Ticket 57282 - Aanvulling interface met Bestelopdr
SELECT ma.alg_locatie_key
FROM bes_bestelopdr bo, mld_adres ma
WHERE bo.bes_bestelopdr_key = fg.bes_bestelopdr_key
AND bo.mld_adres_key_lev = ma.mld_adres_key )),
101, -- Bergen op Zoom BOZ
'00601000',
102, -- Raamsdonksveer RDV
'00601000',
121, -- Genk AASA#66258
'00602000',
'00600000'), -- AASA#51917
'999999'
) kstplcode,
DECODE (
aaxx_get_user,
'IT', (SELECT DECODE (kp.prs_kostenplaats_nr, '00100001', (SELECT exact_code FROM aaxx_v_exact_code_gebouw_fac ecgf WHERE ecgf.fin_factuur_key = fg.fin_factuur_key),
DECODE (INSTR(prs_kostenplaats_nr, '/'), 0, '99999999',
SUBSTR(prs_kostenplaats_nr, INSTR(prs_kostenplaats_nr, '/')+1)))
FROM prs_kostenplaats kp
WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key),
'KD999999') kstdrcode,
fin_btwtabelwaarde_code btw_code,
lev_kpn,
prs_kostenplaatsgrp_key,
administratie
FROM ( SELECT g.fin_factuur_key,
opdracht_id,
project_nummer,
project_nummer_kp,
project_naam,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
SUM (fin_factuurregel_totaal) bedrag,
SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incl,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
g.prs_kostenplaats_key,
lev_kpn,
k.prs_kostenplaatsgrp_key,
administratie
FROM aaxx_v_factuur_gegevens g, aaxx_exp_factuur e, prs_kostenplaats k
WHERE fin_factuur_statuses_key = 6
AND g.fin_factuur_key = e.fin_factuur_key
AND g.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
GROUP BY g.fin_factuur_key,
opdracht_id,
project_nummer,
project_nummer_kp,
project_naam,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
g.prs_kostenplaats_key,
lev_kpn,
k.prs_kostenplaatsgrp_key,
administratie) fg;
-- View om te bepalen welke administatie we moeten gebruiken. AAIT en INLO hebben diverse administraties die eem eigen output-xml moeten krijgen.
-- De andere accounts vooralsnog <20><>n
CREATE OR REPLACE VIEW aaxx_v_administratie
AS
SELECT '001' administratie
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '012'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '013'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '036'
FROM DUAL
WHERE aaxx_get_user = 'INLO'
UNION ALL
SELECT '038'
FROM DUAL
WHERE aaxx_get_user = 'INLO'
UNION ALL
SELECT '100'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '300'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '400'
FROM DUAL
WHERE (aaxx_get_user = 'IT' or aaxx_get_user = 'INLO')
UNION ALL
SELECT '401'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT '500'
FROM DUAL
WHERE aaxx_get_user = 'IT'
UNION ALL
SELECT NULL
FROM DUAL
WHERE aaxx_get_user NOT IN ('IT', 'INLO');
-- Procedure om alle facturen te exporteren naar exact.
CREATE OR REPLACE PROCEDURE aaxx_select_exact_xml (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_subaccount IN NUMBER
)
AS
CURSOR c (c_administratie VARCHAR2)
IS
SELECT crdnr, factuur_nr, MAX(datum) datum
FROM aaxx_v_bron_export_exact_xml
WHERE COALESCE(administratie, 'LEEG') = COALESCE(c_administratie, 'LEEG')
AND COALESCE(p_subaccount, COALESCE(prs_kostenplaatsgrp_key, 0)) = COALESCE(prs_kostenplaatsgrp_key, 0)
GROUP BY crdnr, factuur_nr;
CURSOR c_sub (c_administratie VARCHAR2, c_crdnr VARCHAR2, c_factuur_nr VARCHAR2)
IS
SELECT *
FROM aaxx_v_bron_export_exact_xml
WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr')
AND COALESCE(p_subaccount, COALESCE(prs_kostenplaatsgrp_key, 0)) = COALESCE(prs_kostenplaatsgrp_key, 0)
AND factuur_nr = c_factuur_nr
AND COALESCE(administratie, 'LEEG') = COALESCE(c_administratie, 'LEEG');
CURSOR c_adm
IS
SELECT * FROM aaxx_v_administratie;
v_order_count NUMBER;
v_count_fin 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;
v_prefix VARCHAR2(10);
BEGIN
v_order_count := 0;
v_amount_sum := 0;
v_amount_sum_incl := 0;
v_bestand := 'EXACT';
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;
-- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan
-- ## AAIT#36589
-- Voor INLO ivm mogelijkheid tot runnen inkooprun voor meerdere klanten tegelijkertijd wordt de boekstuknummering NIET opgeschoond + wordt de aaxx_exp_factuur-tabel nog NIET verwijderd (gebeurt alleen bij EXACT_VERWERK)
IF aaxx_get_user NOT IN ('INLO')
THEN
DELETE fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = 3
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 aaxx_exp_factuur;
END IF;
-- Hier bepalen we wat er allemaal meegaat de inkooprun in:
--- Bron voor uitsluiten facturen is de aaxx_v_export_exact_check
INSERT INTO aaxx_exp_factuur (fin_factuur_key, administratie)
( SELECT DISTINCT fg.fin_factuur_key,
DECODE (aaxx_get_user,
'INLO', SUBSTR (kpg.prs_kostenplaatsgrp_nr, 1, 3),
'IT', DECODE (fg.lev_kpn,
'00100008', '001', SUBSTR (kpg.prs_kostenplaatsgrp_nr, 1, 3)), -- Overrule voor facturen met leverende kp 00100008, altijd op adm 001 (zie ticket AAIT#69183)
NULL) administratie
FROM aaxx_v_factuur_gegevens fg, aaxx_v_export_exact_check c, prs_kostenplaats kp, prs_kostenplaatsgrp kpg
WHERE fg.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND fg.fin_factuur_key = c.fin_factuur_key AND c.check_in_inkooprun = 'Ja'
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND COALESCE(p_subaccount, COALESCE(kp.prs_kostenplaatsgrp_key, 0)) = COALESCE(kp.prs_kostenplaatsgrp_key, 0)
);
-- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar ## AAIT#36589
-- Voor INLO hanteren we boekstuknummering per administratie. Deze gaan we dus in de LOOP bepalen. AAIT#70566
IF aaxx_get_user NOT IN ('INLO')
THEN
SELECT MAX(fin_kenmerkfactuur_waarde)
INTO v_boekstuknummer
FROM fin_kenmerkfactuur
WHERE fin_kenmerk_key = 3
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') || '000000');
END IF;
END IF;
FOR rec_adm IN c_adm
LOOP
BEGIN
v_order_count := 0;
v_amount_sum := 0;
v_amount_sum_incl := 0;
IF rec_adm.administratie IS NULL
THEN
v_prefix := NULL;
ELSE
IF rec_adm.administratie IS NOT NULL AND p_subaccount IS NULL
THEN
v_prefix := rec_adm.administratie || '_' || '##';
ELSE
v_prefix := rec_adm.administratie || '_' || TO_CHAR(p_subaccount) || '_' || '##';
END IF;
END IF;
-- Voor INLO de boekstuknummering per administratie bepalen
-- De Kreek administratie 400, IKEA 038 en de overige klanten 036
IF aaxx_get_user IN ('INLO')
THEN
SELECT MAX (km.fin_kenmerkfactuur_waarde)
INTO v_boekstuknummer
FROM aaxx_v_factuur_gegevens v,
fin_kenmerkfactuur km,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE v.fin_factuur_key = km.fin_factuur_key
AND km.fin_kenmerk_key = 3
AND v.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
AND SUBSTR(km.fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY')
AND kpg.prs_kostenplaatsgrp_nr = rec_adm.administratie ;
IF v_boekstuknummer IS NULL
THEN
IF rec_adm.administratie = '400' THEN
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '200000');
ELSE IF rec_adm.administratie = '038' THEN
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '300000');
ELSE
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '000000');
END IF;
END IF;
END IF;
END IF;
-- Alleen als resultaat dan gaan we XML-genereren, anders niet (om lege xml's te vermijden bij de output)
v_count_fin := 0;
SELECT count(*)
INTO v_count_fin
FROM aaxx_exp_factuur f,
(select v.fin_factuur_key, v.prs_kostenplaats_key from aaxx_v_factuur_gegevens v group by v.fin_factuur_key, v.prs_kostenplaats_key) fg,
prs_kostenplaats kp, prs_kostenplaatsgrp kpg
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND COALESCE(f.administratie, 'LEEG') = COALESCE(rec_adm.administratie, 'LEEG')
AND fg.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND COALESCE(p_subaccount, COALESCE(kp.prs_kostenplaatsgrp_key, 0)) = COALESCE(kp.prs_kostenplaatsgrp_key, 0);
IF v_count_fin > 0
THEN
-- header
aaxx_add_xml_row_p (v_bestand, v_prefix, '<?xml version="1.0" encoding="windows-1252"?>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<eExact>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<GLEntries>');
FOR rec IN c(rec_adm.administratie)
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;
aaxx_add_xml_row_p (v_bestand, v_prefix, '<GLEntry status="E" entry="' || xml.char_to_html(v_boekstuknummer) || '">');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec.factuur_nr);
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Date', rec.datum);
aaxx_add_xml_element_p (v_bestand, v_prefix, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Journal type="I" code="42"/>');
v_sub_count := 1;
FOR rec1 IN c_sub (rec_adm.administratie, v_crdnr, v_factuur_nr)
LOOP
BEGIN
-- Eerst maar even een kenmerk voor het boestuknummer aanmaken
aaxx_set_kenmerk('FIN', 3, rec1.fin_factuur_key, v_boekstuknummer, 0);
aaxx_add_xml_row_p (v_bestand, v_prefix, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Date', rec1.datum);
aaxx_add_xml_row_p (v_bestand, v_prefix, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
-- Meldingnummer alleen vermelden voor opdrachten met type 'Projectorder'
IF (rec1.projectnr IS NOT NULL)
THEN
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.oms25);
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Project code="' || rec1.projectnr || '" type="I" status="A">');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.projectnaam);
aaxx_add_xml_row_p (v_bestand, v_prefix, '</Project>');
ELSE IF (rec1.projectnr_kp IS NOT NULL)
THEN
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.oms25);
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Project code="' || rec1.projectnr_kp || '" type="I" status="A">');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.projectnaam);
aaxx_add_xml_row_p (v_bestand, v_prefix, '</Project>');
ELSE
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.oms25);
END IF;
END IF;
IF ( aaxx_get_user = 'IT' AND COALESCE(rec1.lev_kpn, 'GEEN') = '00100008') -- Zie ticket AAIT#69183 Alle bestellingen AAIT in catalogus BIS Bestelmodule op 1 algemene kostenplaats
THEN
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Costcenter code="' || xml.char_to_html(rec1.lev_kpn) || '"/>');
ELSE
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
END IF;
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
-- AAIT#23838: kostensoort niet opnemen voor inkoopfacturen IT
IF ( NOT(aaxx_get_user = 'IT' AND COALESCE(rec1.lev_kpn, 'GEEN') <> '2000700') )
THEN
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Item code="' || xml.char_to_html(rec1.itemcode) || '"/>');
END IF;
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Amount>');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Debit', rec1.bedrag_txt);
aaxx_add_xml_row_p (v_bestand, v_prefix, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '</Amount>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<Payment>');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'Reference', rec1.betaalref);
aaxx_add_xml_element_p (v_bestand, v_prefix, 'InvoiceNumber', rec1.fin_factuur_key); -- of moet dit v_boekstuknummer worden????
aaxx_add_xml_row_p (v_bestand, v_prefix, '</Payment>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<FinReferences>');
aaxx_add_xml_element_p (v_bestand, v_prefix, 'YourRef', rec1.betaalref);
aaxx_add_xml_element_p (v_bestand, v_prefix, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
aaxx_add_xml_row_p (v_bestand, v_prefix, '</FinReferences>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<FreeFields>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<FreeTexts>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '<FreeText number="3">' || rec1.opdracht_id || '</FreeText>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '</FreeTexts>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '</FreeFields>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '</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;
aaxx_add_xml_row_p (v_bestand, v_prefix, '</GLEntry>');
v_order_count := v_order_count + 1;
END;
END LOOP;
aaxx_add_xml_row_p (v_bestand, v_prefix, '</GLEntries>');
aaxx_add_xml_row_p (v_bestand, v_prefix, '</eExact>');
fac.writelog (p_applname, 'S', 'Exact export uitgevoerd (' || rec_adm.administratie || '). Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, '');
END IF;
END;
END LOOP;
END;
/
/* nieuwe procedure om oude aaxx_select_exact_xml procedure op termijn te vervangen. Door gebruik te maken
van de nieuwe procedure hoeft er per klant geen specifieke export in de cust.sql. De prefix in de
export tabel staat dan op AAXX */
CREATE OR REPLACE PROCEDURE aaxx_select_exact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
BEGIN
aaxx_select_exact_xml (p_applname, p_applrun, NULL);
END;
/
-- Procedure om alle facturen te exporteren naar exact.
CREATE OR REPLACE PROCEDURE aaxx_export_exact (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- functionaliteit verplaatst naar aaxx_select_exact_xml procedure om er zeker van te zijn dat
-- de aaxx_exp_factuur tabel eerst gevuld wordt alvorens de XML gegenereerd wordt. AAVL#27120 en AAEN#26362
-- AAFM#40866
-- Verwerk actie direct starten na de EXPORT_EXACT
INSERT INTO imp_schedule (imp_schedule_name) VALUES ('VERWERK_EXACT');
END;
/
--------------------------------------------------------------------------
-- INKOOPINTERFACE - exportfunctie - VERWERK_EXACT
--
-- VERKOOPINTERFACE - in deze verwerk_exact zit ook vullen fin_verkoopfactuur
--------------------------------------------------------------------------
CREATE OR REPLACE VIEW aaxx_v_export_verwerk_exact (
result,
result_order
)
AS
SELECT REPLACE(REPLACE(f.fin_factuur_key
|| ';'
|| opdracht_id
|| ';'
|| fin_factuur_datum
|| ';'
|| fin_factuur_nr
|| ';'
|| prs_bedrijf_key
|| ';'
|| fin_factuurregel_totaal
|| ';'
|| fin_factuurregel_btw
|| ';'
|| fin_factuurregel_nr
|| ';'
|| fin_factuur_debiteur_nr
|| ';'
|| project_nummer
|| ';'
|| prs_kostensoort_refcode
|| ';'
|| mld_opdr_key
|| ';'
|| cnt_contract_key
,CHR (13), ''), CHR (10), '<ret>'), f.fin_factuur_key
FROM aaxx_exp_factuur f,
aaxx_v_factuur_gegevens fg
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.fin_factuur_statuses_key = 6;
-- START VERKOOPINTERFACE
-- Procedure om alle geexporteerde facturen naar status verwerkt te zetten en om waar nodig verkoopfacturen te genereren.
-- Gebruik verkoopfactuur:
-- fin_verkoopfactuur_id datum + referentie
-- fin_verkoopfactuur_xmlnode opdracht / contract / bestelopdr / opdr_uren
-- fin_verkoopfactuur_refkey key naar het record
-- fin_verkoopfactuur_aanmaak sysdate
-- prs_kostenplaats_nr kostenplaatsnr
-- prs_debiteur_naam debiteurnummer
-- prs_kostensoort_oms kostensoort (exact_artikelcode)
-- prs_kostensoort_opmerking kostensoort_opmerking wordt niet gebruikt voor verkoopfacturen
-- prs_kostensoort_refcode grootboekrekening
-- prs_kostensoortgrp_oms referentie, omschrijving van de factuur (kolom 4 vd hoofdregel) -- LET OP! Dit gaat met finance2.0. de PO-structuur worden!!!!
-- fin_verkoopfactuur_omschr omschrijving subregel
-- fin_verkoopfactuur_bedrag
-- fin_btwtabelwaarde_code
-- fin_verkoopfactuur_maand jaar in verband met boekingen op balansrekening als op vorige jaren
-- fin_verkoopfactuur_c1 Exact code - Per heyday-klantomgeving te bepalen op 1 van de volgende 3 niveau's: kenmerk van het gebouw, district of klant-keuzelijst op gebouw)
-- fin_verkoopfactuur_c2 Groepering van de kopregel van de factuur.
-- fin_verkoopfactuur_c3 Volgorde en groepering van de subregels van de factuur.
-- fin_verkoopfactuur_c4 Cust-specifieke variabele/processen: bij RABO gevuld voor EXACT_VASTVAR (vk-interface voor interne opdrachttype 'Vast/Variabel') + Bij INLO met HuurGreenportVenlo en met ReserveringKreek
-- fin_verkoopfactuur_c5 heyday-referentie (mogelijkheid voor aanvulling op kopregel, positie 3)
-- fin_verkoopfactuur_c6 PO-nr op verkoopfactuur: Voor Projecten uit projectmelding. Voor CORE uitHEYDAY import-PO-tabel
-- Dit nr is tevens hoofdgroepering van verkoopfactuur
-- fin_verkoopfactuur_c7 Voor de Exact-regelomschrijving (uit de HEYDAY import-PO-tabel - REGEL/LINE-ITEM)
-- fin_verkoopfactuur_c8 Soort Verkoopfactuur voor splitsing interface in PROJECT en CORE en RES
-- Ps. Output PROJECT is XML, de overige verkoopfacturen CSV
-- fin_verkoopfactuur_n1 locatie_key
-- fin_verkoopfactuur_n2 projectmarge vast
-- fin_verkoopfactuur_n3 projectmarge procentueel
-- fin_verkoopfactuur_n4 fin_factuur_key
-- fin_verkoopfactuur_n5 kpg.prs_kostenplaatsgrp_key -- Voor multi-clientomgeving INLO (o.a. tbv splitsen vk-interface)
-- fin_verkoopfactuur_d1 datumveld, wordt gevuld bij 'herstelactie verkoopfacturen'
-- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
-- fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c4,fin_verkoopfactuur_c5, fin_verkoopfactuur_c6
CREATE OR REPLACE PROCEDURE aaxx_export_verwerk_exact (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR c_fact
IS
SELECT DISTINCT f.fin_factuur_key
FROM aaxx_exp_factuur f
, aaxx_v_factuur_gegevens fg
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.fin_factuur_statuses_key = 6
UNION
SELECT c.fin_factuur_key -- toevoegen alle inkoopfacturen die op akkoord staan, maar met filterstatus 'niet naar exact, maar wel verwerken' - ticket AAIT#77215
FROM aaxx_v_export_exact_check c
WHERE check_filter_nietnaarexact IS NOT NULL ;
CURSOR c_opdr
IS
SELECT DISTINCT fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
FROM aaxx_exp_factuur f
, aaxx_v_factuur_gegevens fg
, mld_opdr o
, mld_melding m
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6
UNION
SELECT DISTINCT fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
FROM (SELECT c.fin_factuur_key FROM aaxx_v_export_exact_check c WHERE check_filter_nietnaarexact IS NOT NULL) f
, aaxx_v_factuur_gegevens fg
, mld_opdr o
, mld_melding m
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6 ;
CURSOR c_bes
IS
SELECT bo.*
FROM aaxx_exp_factuur f
, aaxx_v_factuur_gegevens fg
, bes_bestelopdr bo
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6
UNION
SELECT bo.*
FROM (SELECT c.fin_factuur_key FROM aaxx_v_export_exact_check c WHERE check_filter_nietnaarexact IS NOT NULL) f
, aaxx_v_factuur_gegevens fg
, bes_bestelopdr bo
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6 ;
-- pas de bedragen in het factuurschema aan als de laatste factuur ontvangen is.
CURSOR c_cnt
IS
SELECT DISTINCT fg.cnt_contract_key, fs.cnt_factuurschema_key, TO_CHAR(c.cnt_contract_kosten) cnt_contract_kosten
FROM aaxx_exp_factuur f,
aaxx_v_factuur_gegevens fg,
cnt_contract c,
cnt_factuurschema fs
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_key = fs.cnt_contract_key
AND fg.fin_factuur_boekmaand = fs.cnt_factuurschema_boekmaand
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6
UNION
SELECT DISTINCT fg.cnt_contract_key, fs.cnt_factuurschema_key, TO_CHAR(c.cnt_contract_kosten) cnt_contract_kosten
FROM (SELECT c.fin_factuur_key FROM aaxx_v_export_exact_check c WHERE check_filter_nietnaarexact IS NOT NULL) f,
aaxx_v_factuur_gegevens fg,
cnt_contract c,
cnt_factuurschema fs
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_key = fs.cnt_contract_key
AND fg.fin_factuur_boekmaand = fs.cnt_factuurschema_boekmaand
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6 ;
CURSOR c_sync_kostensoort
IS
SELECT COALESCE (kstd.prs_kostensoort_key, kvg.prs_kostensoort_key)
std_kostensoort_key,
f.prs_kostensoort_key fac_kostensoort_key,
(SELECT kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerk k, fin_kenmerkfactuur kf
WHERE k.fin_kenmerk_code = 'FIN_KOSTENSOORT_AFW_OK' AND k.fin_kenmerk_key = kf.fin_kenmerk_key AND kf.fin_factuur_key = f.fin_factuur_key)
fin_kostensoort_afw_ok,
f.fin_factuur_key
FROM fin_factuur f,
aaxx_exp_factuur ef,
mld_opdr o,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline md,
prs_kostensoort kstd,
prs_kostensoort kvg
WHERE f.fin_factuur_key = ef.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND std.prs_kostensoort_key = kstd.prs_kostensoort_key(+)
AND md.prs_kostensoort_key = kvg.prs_kostensoort_key(+)
UNION
SELECT COALESCE (kstd.prs_kostensoort_key, kvg.prs_kostensoort_key)
std_kostensoort_key,
f.prs_kostensoort_key fac_kostensoort_key,
(SELECT kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerk k, fin_kenmerkfactuur kf
WHERE k.fin_kenmerk_code = 'FIN_KOSTENSOORT_AFW_OK' AND k.fin_kenmerk_key = kf.fin_kenmerk_key AND kf.fin_factuur_key = f.fin_factuur_key)
fin_kostensoort_afw_ok,
f.fin_factuur_key
FROM fin_factuur f,
(SELECT c.fin_factuur_key FROM aaxx_v_export_exact_check c WHERE check_filter_nietnaarexact IS NOT NULL) ef,
mld_opdr o,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline md,
prs_kostensoort kstd,
prs_kostensoort kvg
WHERE f.fin_factuur_key = ef.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND std.prs_kostensoort_key = kstd.prs_kostensoort_key(+)
AND md.prs_kostensoort_key = kvg.prs_kostensoort_key(+) ;
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanvrager NUMBER;
v_bestelling_key NUMBER;
v_logdate DATE;
v_contract_kosten_init VARCHAR2 (200);
v_contract_kosten_nieuw_k VARCHAR2 (200);
v_contract_kosten_nieuw_n NUMBER;
v_projectfacturen_fee VARCHAR (200);
BEGIN
v_errormsg := 'Geen akties';
-- Facilitor user
v_aanvrager := 4;
-- AAIT#34097 aanpassen kostensoort bij factuur. Soms wordt de stdmelding aangepast terwijl
-- er al een factuur geboekt is. Door bij het verwerken van de factuur deze kostensoort nog
-- aan te passen wordt voorkomen dat hier verschillen gaan ontstaan.
---- Uit P2P-overleg (AAIT#78367)
------- Deze systematiek is uitgesloten voor AAIT
------- In bepaalde gevallen wordt kostensoort op factuur toch aangepast en mag/moet die met die afwijkende kostensoort door - men zet dan expliciet vink-veld FIN_KOSTENSOORT_AFW_OK aan
IF aaxx_get_user NOT IN ('IT')
THEN
v_errormsg := 'Aanpassen kostensoort';
FOR reck IN c_sync_kostensoort
LOOP
BEGIN
IF reck.fac_kostensoort_key <> reck.std_kostensoort_key AND reck.fin_kostensoort_afw_ok IS NULL
THEN
UPDATE fin_factuur
SET prs_kostensoort_key = reck.std_kostensoort_key
WHERE fin_factuur_key = reck.fin_factuur_key;
-- Pas de login aan
INSERT INTO fac_tracking (fac_tracking_refkey, fac_srtnotificatie_key, fac_tracking_oms)
SELECT reck.fin_factuur_key, fac_srtnotificatie_key, 'Kostensoort aangepast in factuur export'
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'FINUPD';
END IF;
END;
END LOOP;
END IF;
-- Verkoopinterface - START VULLEN FIN_VERKOOPFACTUUR
v_logdate := SYSDATE;
-- voeg opdrachten en PR-opdrachten toe aan de fin_verkoopfacturen (vh. verkoopbuffer)
INSERT INTO fin_verkoopfactuur
(
-- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1, fin_verkoopfactuur_n2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c6, fin_verkoopfactuur_c7, fin_verkoopfactuur_n3, fin_verkoopfactuur_c8, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5
)
SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr, 1,30 ) fin_verkoopfactuur_id,
'opdracht',
o.mld_opdr_key,
v_logdate,
SUBSTR (
DECODE (aaxx_get_user, 'AH', k.prs_kostenplaats_nr,
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'NC ', DECODE (ks.prs_kostensoort_upper, 'NC PROJ', aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'Onbekend')),
'EXPO', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), '913918', '03701000',
'4001', '03700000',
'Onbekend'),
'ESSENT', '99999999',
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', '99999999',
'BASTION ZUID B.V.', '99999999',
'IKEA', DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
-- = de INLO-standaard voor kostenplaats
k.prs_kostenplaats_nr
),
'NMM', 'MGB',
'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'THHD', '99999999',
k.prs_kostenplaats_nr)
, 1, 30)
prs_kostenplaats_nr, -- gevuld op regelniveau kolom AM (39)
SUBSTR (
DECODE (aaxx_get_user, 'AH', DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'NC ', DECODE (ks.prs_kostensoort_upper, 'NC PROJ', aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'Onbekend')),
'EXPO', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
'IKEA', DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
'MENZIS', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
-- = de INLO-standaard voor debiteurbepaling - kopregel kolom C
aaxx_get_top_kpn_nr (k.prs_kostenplaats_key)
),
'ESSENT', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
'NMM', DECODE(k.prs_kostenplaats_nr,
'0001', '913799', -- Heijmans
'0002', '913810', -- Vermaat
'0003', '913766', -- Defensie
'0004', '913776', -- Stichting Nationaal Militair Museum
'Onbekend'
),
'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC', (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'THHD', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
'MENZIS', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
k.prs_kostenplaats_nr)
, 1, 60)
prs_debiteur_naam, -- kolom AT (46) en in debiteurnummer kolom C (3)
b.prs_bedrijf_key,
CASE WHEN ot.mld_typeopdr_omschrijving = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' THEN 'REVENUE PROJECTS COST' || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','')
WHEN ot.mld_typeopdr_omschrijving = 'Projectorder (externe uren)' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' THEN 'PROJECTS ORGANISATIE' || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','')
ELSE ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','')
END prs_kostensoort_oms, -- exact_artikelcode - kolom AD (30)
ks.prs_kostensoort_opmerking,
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NONE COR' THEN pr.po_nr
ELSE
SUBSTR (
DECODE (aaxx_get_user,
'AH', DECODE(SUBSTR(ks.prs_kostensoort_upper,1,2), 'CV', ksg.prs_kostensoortgrp_oms || DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
sd.ins_srtdiscipline_prefix || m.mld_melding_key),
'EXPO', 'Servicekosten Core Variabel',
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'IKEA', aaxx_get_po_nr('IKEA', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum))
|| ' - ' || std_kp.prs_kostenplaats_externnr,
'ALLIANDER', COALESCE (po.ordernummer_klant, 'Servicekosten Core Variabel'), -- Afwijkende structuur: Indien ordernummer_klant gevuld op opdracht dan aparte verkoopfactuur
'BASTION ZUID B.V.', DECODE(ksg.prs_kostensoortgrp_altcode, 'CVE', 'Eigenaarslast',
'CV', 'Servicekosten',
''),
-- = de INLO-standaard voor kostensoortgr_omschr - kopregel kolom D
'Servicekosten Core Variabel'
),
'ESSENT', aaxx_get_po_nr(NULL, NULL, NULL, g.alg_gebouw_code, NULL, NULL, NULL, TRUNC(opdr_datum)) || ' ' || SUBSTR(l.alg_locatie_code,1,4),
'RABO', 'Servicekosten ' || aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC', DECODE (l.alg_locatie_code, 'BOZ', 'Core Variabel ' || to_char(sysdate, 'Month'),
'RDV', 'Core Variabel ' || to_char(sysdate, 'Month'),
ksg.prs_kostensoortgrp_oms || ' ' || aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'NMM', ksg.prs_kostensoortgrp_oms || DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
'0002', ' Vermaat',
'0003', ' Defensie',
'0004', ' NMM',' Onbekend'),
'DSM', ksg.prs_kostensoortgrp_oms || DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code || ' ' || to_char(sysdate, 'Month'),
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5) , 'L CV ', ' ' || l.alg_locatie_code || ' ' || to_char(sysdate, 'Month') )),
'THHD', DECODE(ksg.prs_kostensoortgrp_altcode, 'CVE', SUBSTR(l.alg_locatie_code,1,4) || ' PO zie bijlage',
'CV', SUBSTR(l.alg_locatie_code,1,4) || ' ' || aaxx_get_po_nr(NULL, NULL, NULL, l.alg_locatie_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
NULL),
'MENZIS', aaxx_get_po_nr(NULL, aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code), NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
ksg.prs_kostensoortgrp_oms)
, 1, 60)
END prs_kostensoortgrp_oms, -- kopregel - kolom D (4)
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN pr.mld_opdr_nr || ' ' || DECODE (ot.mld_typeopdr_omschrijving, 'Projectorder (externe uren)', 'Projecturen ' || COALESCE(pr.mld_project_opdrachtomschr, pr.mld_project_omschrijving), COALESCE(pr.mld_project_opdrachtomschr, pr.mld_project_omschrijving))
|| ' ' || (SELECT TO_CHAR(fin_btwtabelwaarde_perc) || '%' FROM fin_btwtabelwaarde WHERE fin_btwtabelwaarde_key = fg.fin_btwtabelwaarde_key) -- BTW-percentage toevoegen aan regel..
-- Voor CORE - Omschrijving subregel diverse mogelijkheden. Evt ook via PO-tabel en regelitem mogelijk te sturen...
ELSE DECODE (aaxx_get_user, -- SABIC via po-tabel en regel-items - NOG UITWERKEN/AANLEVEREN DEF. PO-tabel DSM
-- 'SABIC', aaxx_get_po_regel(NULL, NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
'SABIC', ks.prs_kostensoort_altcode || ' ' || fg.fin_btwtabelwaarde_code,
'ESSENT', ks.prs_kostensoort_altcode,
'THHD', COALESCE(ks.prs_kostensoort_altcode, ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc,
'MENZIS', COALESCE(ks.prs_kostensoort_altcode, ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', 'Variabele dienstverlening' || ' ' || fg.fin_btwtabelwaarde_perc,
'IKEA', d.ins_discipline_omschrijving || ' ' || fg.fin_btwtabelwaarde_perc,
-- = de INLO-standaard voor omschrijving sub-regel IS ALTIJD GEWEEST
-- sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr || ' ' || d.ins_discipline_omschrijving
-- MAAR MOET WORDEN: De afwijkend dienst of standaard-sen-heyday) aangevuld met btw-percentage
COALESCE(aaxx_get_sen_omschrijving(exact_k.klantcode, ks.prs_kostensoort_upper),ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc
),
-- Oorspronkelijke standaard verkoopinterface...
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr || ' ' || d.ins_discipline_omschrijving)
END fin_verkoopfactuur_omschr, -- omschrijving subregel - kolom AF (32)
CASE WHEN ot.mld_typeopdr_omschrijving = 'Projectorder (externe uren)' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN fg.bedrag * COALESCE(fac.safe_to_number(pr.fee_externe_uren), 1)
ELSE DECODE (aaxx_get_user, 'NMM', 1.1 * fg.bedrag,
fg.bedrag)
END bedrag,
fg.fin_btwtabelwaarde_code,
to_char(opdr_datum, 'YYYY')
fin_verkoopfactuur_maand,
DECODE (aaxx_get_user,
-- Op district-niveau
'SABIC', COALESCE(exact_d.exact_code,'onbekend'),
'DSM', DECODE (l.alg_district_key, 22, COALESCE(exact_g.exact_code,'onbekend'), COALESCE(exact_d.exact_code,'onbekend')), -- DSM voor Limburg (key 22) op gebouwniveau en overige op districtniveau
'NMM', COALESCE(exact_d.exact_code,'onbekend'),
'ESSENT', COALESCE(exact_d.exact_code,'onbekend'),
'THHD', COALESCE(exact_d.exact_code,'onbekend'),
-- Op klantgebouw-niveau
'INLO', COALESCE(exact_k.klantcode,'onbekend'),
-- Overig/Default op gebouw-niveau
COALESCE(exact_g.exact_code,'onbekend')) exact_code, -- C1 - kolom AU (47)
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' THEN pr.mld_project_nr || '-' || pr.po_nr
ELSE
SUBSTR (
DECODE (aaxx_get_user, 'AH', DECODE (ks.prs_kostensoort_upper, 'NC PROJ', TO_CHAR(m.mld_melding_key)),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'IKEA', std_kp.prs_kostenplaats_omschrijving,
-- = de INLO-standaard voor extra groepering kopregel factuur
NULL
),
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC',DECODE (l.alg_locatie_code, 'BOZ', to_char(sysdate, 'Month'),
'RDV', to_char(sysdate, 'Month'),
aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'THHD', ksg.prs_kostensoortgrp_altcode,
'')
, 1, 200)
END groepering, -- C2 -- kopregel
CASE WHEN ot.mld_typeopdr_omschrijving = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' THEN 'PR'
WHEN ot.mld_typeopdr_omschrijving = 'Projectorder (externe uren)' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' THEN 'PR-U'
ELSE NULL
END subregelvolgorde, -- C3
l.alg_locatie_key, -- N1
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN COALESCE(fac.safe_to_number(pr.fee_vast), 0)
ELSE NULL
END fin_verkoopfactuur_n2, -- tbv projectmarge vast - ivm project FEE
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN '' -- Ter info: Was ooit bedacht om hier voor PR-verkoopfacturen aanvulling 'deelfactuurnr ..' in op te nemen maar Exact kan in kolom C geen numerieke waarden aan...
-- Voor CORE-verkoopfacturen - de cust-aanvulling op kopregel kolom C (3)
ELSE DECODE (aaxx_get_user,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', ksg.prs_kostensoortgrp_altcode || ' ' || l.alg_locatie_code || ' ',
'IKEA', 'IKEA ' || l.alg_locatie_omschrijving || DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER', ' Beheer BV', NULL) || ' ',
-- = de INLO-standaard voor C5 waar de subaccounts uiteindelijk op kunnen terugvallen
NULL
),
'ESSENT', ksg.prs_kostensoortgrp_altcode || ' ' || SUBSTR(l.alg_locatie_code,1,4) || ' ',
NULL
)
-- de standaard aanvulling die altijd achter de cust-aanvulling komt
|| 't/m ' || to_char(SYSDATE, 'MON')
---- verbeteridee Peggy (= in geval VJ altijd t/m DEC)
---- || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), 't/m DEC', 't/m ' || to_char(SYSDATE, 'MON'))
END fin_verkoopfactuur_c5, -- heyday-referentie - standaard aanvulling op kopregel positie kolom C (3)
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN pr.po_nr
-- Voor CV-verkoopfacturen dient PO-nummer uit de HEYDAY-PO-tabel opgehaald te worden
--- Via functie aaxx_get_po(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
ELSE DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'IKEA', aaxx_get_po_nr('IKEA', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'MENZIS', aaxx_get_po_nr('MENZIS', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
NULL,
TRUNC(opdr_datum)),
-- 'HENKEL', aaxx_get_po_nr('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- 'ALLIANDER', aaxx_get_po_nr('ALLIANDER', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- = de INLO-standaard voor PO-nr (indien geen resultaat in tabel dan krijg je NULL terug)
aaxx_get_po_nr(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
),
'ESSENT', aaxx_get_po_nr(NULL, NULL, NULL, g.alg_gebouw_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
'THHD', aaxx_get_po_nr(NULL, NULL, NULL, l.alg_locatie_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
'MENZIS', aaxx_get_po_nr(NULL, aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code), NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
)
END fin_verkoopfactuur_c6, -- po-nummer klant uit PO-tabel HEYDAY
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN NULL
-- Voor CV-verkoopfacturen - Structuur/Systematiek IDEM aan fin_verkoopfactuur_c6 waarbij indien voor klantomgeving van toepassing het PO-REGEL uit de HEYDAY-PO-tabel opgehaald wordt
--- Via functie aaxx_get_po_regel(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
ELSE DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
-- 'HENKEL', aaxx_get_po_regel('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
'COVESTRO', NULL,
-- = de INLO-standaard voor PO-regel
-- aaxx_get_po_regel(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
NULL
),
'ESSENT', NULL,
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
)
END fin_verkoopfactuur_c7, -- algemene regelomschrijving uit PO-tabel
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN COALESCE(fac.safe_to_number(pr.fee_proc), 0)
ELSE NULL
END fin_verkoopfactuur_n3, -- projectmarge procentueel - ivm project FEE
CASE WHEN SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
THEN 'PROJECT'
ELSE 'CORE'
END fin_verkoopfactuur_c8, -- soort verkoopfactuur
fg.fin_factuur_key
fin_verkoopfactuur_n4,
DECODE (aaxx_get_user, 'INLO', kpg.prs_kostenplaatsgrp_key, NULL) -- Multi-clientomgeving met subaccounts op kostenplaatsgroepen. T.b.v. het separaat kunnen runnen van de verkoopinterfaces
fin_verkoopfactuur_n5
FROM mld_opdr o,
(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde, flx.getdomeinwaarde(sk.fac_kenmerkdomein_key, FLX.getflex ('OPD', km.mld_kenmerk_key, ko.mld_opdr_key)) maintenance_cap_oms
FROM mld_kenmerkopdr ko, mld_kenmerk km, mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = km.mld_kenmerk_key AND km.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'MAINTENANCE_CAP') om, -- maintenance_cap
(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde, FLX.getflex ('OPD', km.mld_kenmerk_key, ko.mld_opdr_key) ordernummer_klant
FROM mld_kenmerkopdr ko, mld_kenmerk km, mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = km.mld_kenmerk_key AND km.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_upper = 'ORDERNUMMER KLANT') po, -- ordernummer klant op opdracht
mld_typeopdr ot,
prs_bedrijf b,
prs_kostenplaats k,
prs_kostenplaatsgrp kpg,
mld_melding m,
mld_stdmelding std,
prs_kostenplaats std_kp,
ins_tab_discipline d,
ins_srtdiscipline sd,
prs_kostensoort ks,
prs_kostensoortgrp ksg,
aaxx_exp_factuur f,
alg_gebouw g,
alg_locatie l,
alg_v_onroerendgoed og,
aaxx_v_exact_code_gebouw exact_g,
aaxx_v_exact_code_district exact_d,
aaxx_v_klantcode_gebouw exact_k,
aaxx_v_projectorders_bron pr,
(SELECT fin_factuur_key,
mld_opdr_key,
SUM (fin_factuurregel_totaal) bedrag,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 1) fin_btwtabelwaarde_code,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 2) fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_key,
prs_kostenplaats_key,
prs_kostensoort_key,
prs_kostensoort_refcode,
fin_factuur_boekmaand,
opdr_datum,
fin_factuur_datum
FROM aaxx_v_factuur_gegevens
WHERE fin_factuur_statuses_key = 6
GROUP BY fin_factuur_key,
fin_btwtabelwaarde_key,
mld_opdr_key,
prs_kostenplaats_key,
prs_kostensoort_key,
fin_factuur_boekmaand,
opdr_datum,
fin_factuur_datum,
prs_kostensoort_refcode) fg
WHERE fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_opdr_key = om.mld_opdr_key (+)
AND o.mld_opdr_key = po.mld_opdr_key (+)
AND fg.mld_opdr_key = o.mld_opdr_key
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
AND og.alg_gebouw_key = g.alg_gebouw_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key =exact_d.alg_district_key (+)
AND og.alg_gebouw_key = exact_g.alg_gebouw_key(+)
AND og.alg_gebouw_key = exact_k.alg_gebouw_key(+)
AND fg.fin_factuur_key = f.fin_factuur_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_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
AND o.mld_opdr_key = pr.mld_opdr_key(+)
AND std.prs_kostenplaats_key = std_kp.prs_kostenplaats_key (+)
AND ( ( aaxx_get_user = 'GN'
AND (
sd.ins_srtdiscipline_prefix = 'SA'
OR
(SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' )
)
)
OR ( aaxx_get_user = 'AH'
AND ( ks.prs_kostensoort_upper LIKE 'CV %')
)
OR ( aaxx_get_user = 'DSM'
AND ( ( ( SUBSTR (ks.prs_kostensoort_upper, 1, 3) =
'CV '
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) =
'L CV ')
AND g.alg_gebouw_code NOT IN ('122-170',
'122-200',
'122-094',
'122-092')
AND l.alg_locatie_key NOT IN ('23', '41')) -- Waalwijk en de Beitel
OR SUBSTR (ks.prs_kostensoort_upper, 1, 3) = 'CVE'
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) = 'L CVE'
OR ( SUBSTR (ot.mld_typeopdr_omschrijving, 1, 12) =
'Projectorder'
AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' ))
)
OR ( aaxx_get_user = 'ESSENT'
AND (
ks.prs_kostensoort_upper LIKE 'CV %'
AND upper(aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)) NOT IN ('X') -- Voor alle gebouwen met gebouw-debiteur X gaan we GEEN verkoopfactuur aanmaken
)
)
OR ( aaxx_get_user = 'EXPO'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %')
)
OR ( aaxx_get_user = 'INLO'
AND ( (
-- de subaccounts die de CV-verkoopinterface aan hebben staan, zijn:
---- BASTION ZUID(541), MENZIS(481), IKEA-BEHEER(461), KADASTER(441), LANDMARK HUURDERS(301), IKEA(281), COVESTRO(261), LANDMARK(241), TRINSEO(121), ALLIANDER(81), VGZ(41), HENKEL(23), VEH(21)
---- COVESTRO DERDEN (341) - WEL/NIET PEGGY?
kpg.prs_kostenplaatsgrp_key IN (541, 481, 461, 441, 301, 281, 261, 241, 121, 81, 41, 23, 21, 341) -- hier de keys van de bijbehorende kostenplaatsgroep vullen
AND (ks.prs_kostensoort_upper LIKE 'CV %' OR ks.prs_kostensoort_upper LIKE 'CVE %')
)
-- PR-INTERFACE VANAF 1-6-2025 WEER AAN
OR
(
-- de subaccounts die de PR-verkoopinterface aan hebben staan, zijn:
---- ALLIANDER(81), (COVESTRO(261), IKEA(281), IKEA-BEHEER(461), IKEA INTERN(181), KADASTER(441), MENZIS(481), VGZ(41)
kpg.prs_kostenplaatsgrp_key IN (81, 261, 281, 461, 181, 441, 481, 41) -- hier de keys van de bijbehorende kostenplaatsgroepen vullen
AND SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder'
AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE'
)
)
AND NOT EXISTS ( SELECT 1 FROM DUAL WHERE aaxx_get_user_sub('INLO', exact_k.klantcode) IN ('COVESTRO') AND l.alg_locatie_code = 'GLN' AND INSTR(UPPER(g.alg_gebouw_naam), 'CHEMELOT CAMPUS')>0) -- uitsluiten COVESTRO-Campus Chemelot GELEEN
)
OR ( aaxx_get_user = 'NMM'
AND ks.prs_kostensoort_upper LIKE 'CVE%'
)
OR ( aaxx_get_user = 'RABO'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
AND ks.prs_kostensoort_upper <> 'CV DOC POST'
AND ot.mld_typeopdr_omschrijving = 'Workorder')
)
OR ( aaxx_get_user = 'SABIC'
AND ( ( o.mld_opdr_datumbegin < to_date ('20180101', 'yyyymmdd') -- Voor sabic geldt in 2018 een ander mechanisme (AASA#28673)
AND ks.prs_kostensoort_upper LIKE 'CV %'
AND ks.prs_kostensoort_upper <> 'CV CHIP'
AND ( o.mld_opdr_datumbegin > to_date ('20150101', 'yyyymmdd') -- Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
OR ( ks.prs_kostensoort_upper <> 'CV CONS REST'
AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
AND ks.prs_kostensoort_upper <> 'CV DOC POST'
AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
)
)
AND ( ks.prs_kostensoort_upper <> 'CV EIG BOUW PL' OR ot.mld_typeopdr_omschrijving = 'Workorder')
)
OR ( o.mld_opdr_datumbegin > to_date ('20180101', 'yyyymmdd') -- Voor sabic geldt voor 2018 een ander mechanisme (AASA#28673)
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE%')
)
)
)
OR ( aaxx_get_user = 'IT'
AND ( SUBSTR(kpg.prs_kostenplaatsgrp_nr,1,6) IN ('400-VK', '500-VK') -- VK is verkoopfacturen (zie AAIT#69225)
)
)
OR ( aaxx_get_user = 'REMEHA'
AND (
ks.prs_kostensoort_upper LIKE 'CV %'
OR
(SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' )
)
)
OR ( aaxx_get_user = 'THHD'
AND (
ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %'
OR
(SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' )
)
)
OR ( aaxx_get_user = 'MENZIS'
AND(
ks.prs_kostensoort_upper LIKE 'CV %'
OR
(SUBSTR(ot.mld_typeopdr_omschrijving, 1, 12) = 'Projectorder' AND UPPER(ksg.prs_kostensoortgrp_oms) = 'NON CORE' )
)
)
);
-- Voeg contracten toe aan de verkoopinterface
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1, fin_verkoopfactuur_n2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c6, fin_verkoopfactuur_c7, fin_verkoopfactuur_n3, fin_verkoopfactuur_c8, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5
)
SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie), 1,30 ) fin_verkoopfactuur_id,
'contract',
c.cnt_contract_key,
v_logdate,
SUBSTR (
DECODE (aaxx_get_user,
'AH', k.prs_kostenplaats_nr,
'EXPO', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), '913918', '03701000',
'4001', '03700000',
'Onbekend'),
'ESSENT', '99999999',
'NMM', COALESCE(exact_d.exact_code,'onbekend'),
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', '99999999',
'BASTION ZUID B.V.', '99999999',
'MERCEDES', '99999999',
'IKEA', DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
-- = de INLO-standaard voor kostenplaats
k.prs_kostenplaats_nr
),
'IT', k.prs_kostenplaats_nr,
'RABO', COALESCE(exact_g.exact_code,'onbekend'),
'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'THHD', '99999999',
k.prs_kostenplaats_nr)
, 1, 30)
prs_kostenplaats_nr, -- gevuld op regelniveau kolom AM (39)
SUBSTR (
DECODE (aaxx_get_user,
'AH', DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'EXPO', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'NMM', DECODE(k.prs_kostenplaats_nr,
'0001', '913799', -- Heijmans
'0002', '913810', -- Vermaat
'0003', '913766', -- Defensie
'0004', '913776', -- Stichting Nationaal Militair Museum
'Onbekend'
),
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
'IKEA', DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
'MENZIS', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
-- = de INLO-standaard voor debiteurbepaling - kopregel kolom C
aaxx_get_top_kpn_nr (k.prs_kostenplaats_key)),
'ESSENT', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC', (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'IT', k.prs_kostenplaats_nr,
'THHD', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
'MENZIS', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
k.prs_kostenplaats_nr)
, 1, 60)
prs_debiteur_naam, -- kolom AT (46) en in debiteurnummer kolom C (3)
b.prs_bedrijf_key,
ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','')
prs_kostensoort_oms, -- exact_artikelcode - kolom AD (30)
ks.prs_kostensoort_opmerking,
SUBSTR (
DECODE (aaxx_get_user,
'AH', ksg.prs_kostensoortgrp_oms || DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'EXPO', 'Servicekosten Core Variabel',
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'IKEA', aaxx_get_po_nr('IKEA', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum))
|| ' - ' || k.prs_kostenplaats_externnr,
'BASTION ZUID B.V.', DECODE(ksg.prs_kostensoortgrp_altcode, 'CVE', 'Eigenaarslast',
'CV', 'Servicekosten',
''),
'MERCEDES', aaxx_get_po_nr('MERCEDES', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- = de INLO-standaard voor kostensoortgr_omschr - kopregel kolom D
'Servicekosten Core Variabel'),
'ESSENT', aaxx_get_po_nr(NULL, NULL, NULL, g.alg_gebouw_code, NULL, NULL, NULL, TRUNC(opdr_datum)) || ' ' || SUBSTR(l.alg_locatie_code,1,4),
'RABO', 'Servicekosten ' || aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC', DECODE (l.alg_locatie_code, 'BOZ', 'Core Variabel ' || to_char(sysdate, 'Month'),
'RDV', 'Core Variabel ' || to_char(sysdate, 'Month'),
ksg.prs_kostensoortgrp_oms || ' ' || aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'NMM', ksg.prs_kostensoortgrp_oms || DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
'0002', ' Vermaat',
'0003', ' Defensie',
'0004', ' NMM',' Onbekend'),
'DSM', ksg.prs_kostensoortgrp_oms || DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5) , 'L CV ', ' ' || l.alg_locatie_code)),
'THHD', DECODE(ksg.prs_kostensoortgrp_altcode, 'CVE', SUBSTR(l.alg_locatie_code,1,4) || ' PO zie bijlage',
'CV', SUBSTR(l.alg_locatie_code,1,4) || ' ' || aaxx_get_po_nr(NULL, NULL, NULL, l.alg_locatie_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
NULL),
'MENZIS', aaxx_get_po_nr(NULL, aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code), NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
ksg.prs_kostensoortgrp_oms)
, 1, 60)
prs_kostensoortgrp_oms, -- kopregel - kolom D (4)
DECODE(aaxx_get_user, 'SABIC', ks.prs_kostensoort_altcode || ' ' || fg.fin_btwtabelwaarde_code,
'ESSENT', ks.prs_kostensoort_altcode,
'THHD', COALESCE(ks.prs_kostensoort_altcode, ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc,
'MENZIS', COALESCE(ks.prs_kostensoort_altcode, ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', 'Variabele dienstverlening' || ' ' || fg.fin_btwtabelwaarde_perc,
'IKEA' , c.cnt_contract_omschrijving || ' ' || fg.fin_btwtabelwaarde_perc,
'MERCEDES', 'Vervangingsuren Receptie',
-- = de INLO-standaard voor omschrijving sub-regel
-- 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie)
-- MAAR MOET WORDEN: De afwijkend dienst of standaard-sen-heyday) aangevuld met btw-percentage
COALESCE(aaxx_get_sen_omschrijving(exact_k.klantcode, ks.prs_kostensoort_upper),ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc
),
-- Oorspronkelijke standaard verkoopinterface...
'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie))
fin_verkoopfactuur_omschr, -- omschrijving subregel - kolom AF (32)
DECODE (aaxx_get_user,
'NMM', ROUND (fg.bedrag * 1.1,2),
fg.bedrag)
bedrag,
fg.fin_btwtabelwaarde_code,
to_char(opdr_datum, 'YYYY')
fin_verkoopfactuur_maand,
DECODE (aaxx_get_user,
-- Op district-niveau
'SABIC', COALESCE(exact_d.exact_code,'onbekend'),
'DSM', DECODE (l.alg_district_key, 22, COALESCE(exact_g.exact_code,'onbekend'), COALESCE(exact_d.exact_code,'onbekend')), -- DSM voor Limburg (key 22) op gebouwniveau en overige op districtniveau
'NMM', COALESCE(exact_d.exact_code,'onbekend'),
'ESSENT', COALESCE(exact_d.exact_code,'onbekend'),
'THHD', COALESCE(exact_d.exact_code,'onbekend'),
-- Op klantgebouw-niveau
'INLO', COALESCE(exact_k.klantcode,'onbekend'),
-- Overig/Default op gebouw-niveau
COALESCE(exact_g.exact_code,'onbekend')) exact_code, -- C1 - kolom AU (47)
SUBSTR (
DECODE (aaxx_get_user, 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'IKEA', k.prs_kostenplaats_omschrijving,
-- = de INLO-standaard voor extra groepering kopregel factuur
NULL
),
'EXPO', l.alg_locatie_code,
'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
'SABIC',DECODE (l.alg_locatie_code, 'BOZ', to_char(sysdate, 'Month'),
'RDV', to_char(sysdate, 'Month'),
aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'THHD', ksg.prs_kostensoortgrp_altcode,
'')
, 1, 200) groepering, -- C2 -- kopregel
NULL subregelvolgorde, -- C3
l.alg_locatie_key, -- N1
NULL fin_verkoopfactuur_n2,
-- Voor CORE-verkoopfacturen
--- de cust-aanvulling op kopregel kolom C (3)
DECODE (aaxx_get_user,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', ksg.prs_kostensoortgrp_altcode || ' ' || l.alg_locatie_code || ' ',
'IKEA', 'IKEA ' || l.alg_locatie_omschrijving || DECODE (kpg.prs_kostenplaatsgrp_oms, 'IKEA - BEHEER', ' Beheer BV', NULL) || ' ',
-- = de INLO-standaard voor C5 waar de subaccounts uiteindelijk op kunnen terugvallen
NULL
),
'ESSENT', ksg.prs_kostensoortgrp_altcode || ' ' || SUBSTR(l.alg_locatie_code,1,4) || ' ',
NULL
)
--- de standaard aanvulling die altijd achter de cust-aanvulling komt
|| 't/m ' || to_char(SYSDATE, 'MON')
---- verbeteridee Peggy (= in geval VJ altijd t/m DEC)
---- || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), 't/m DEC', 't/m ' || to_char(SYSDATE, 'MON'))
fin_verkoopfactuur_c5, -- heyday-referentie - standaard aanvulling op kopregel positie kolom C (3)
-- Voor CV-verkoopfacturen dient PO-nummer uit de HEYDAY-PO-tabel opgehaald te worden
--- Via functie aaxx_get_po(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'IKEA', aaxx_get_po_nr('IKEA', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'MENZIS', aaxx_get_po_nr('MENZIS', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
NULL,
TRUNC(opdr_datum)),
'MERCEDES', aaxx_get_po_nr('MERCEDES', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- 'HENKEL', aaxx_get_po_nr('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- 'ALLIANDER', aaxx_get_po_nr('ALLIANDER', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- = de INLO-standaard voor PO-nr (indien geen resultaat in tabel dan krijg je NULL terug)
aaxx_get_po_nr(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
),
'ESSENT', aaxx_get_po_nr(NULL, NULL, NULL, g.alg_gebouw_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
'THHD', aaxx_get_po_nr(NULL, NULL, NULL, l.alg_locatie_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
'MENZIS', aaxx_get_po_nr(NULL, aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code), NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
) fin_verkoopfactuur_c6, -- po-nummer klant uit PO-tabel HEYDAY
-- Voor CV-verkoopfacturen - Structuur/Systematiek IDEM aan fin_verkoopfactuur_c6 waarbij indien voor klantomgeving van toepassing het PO-REGEL uit de HEYDAY-PO-tabel opgehaald wordt
--- Via functie aaxx_get_po_regel(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
-- 'HENKEL', aaxx_get_po_regel('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
'COVESTRO', NULL,
-- = de INLO-standaard voor PO-regel
-- aaxx_get_po_regel(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
NULL
),
'ESSENT', NULL,
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
) fin_verkoopfactuur_c7, -- algemene regelomschrijving uit PO-tabel
NULL fin_verkoopfactuur_n3,
'CORE' fin_verkoopfactuur_c8, -- soort verkoopfactuur
fg.fin_factuur_key
fin_verkoopfactuur_n4,
DECODE (aaxx_get_user, 'INLO', kpg.prs_kostenplaatsgrp_key, NULL) -- Multi-clientomgeving met subaccounts op kostenplaatsgroepen. T.b.v. het separaat kunnen runnen van de verkoopinterfaces
fin_verkoopfactuur_n5
FROM cnt_contract c,
prs_bedrijf b,
prs_kostenplaats k,
prs_kostenplaatsgrp kpg,
ins_tab_discipline d,
prs_kostensoort ks,
prs_kostensoortgrp ksg,
aaxx_exp_factuur f,
alg_locatie l,
(SELECT cnt_contract_key, ag.alg_gebouw_code, ag.alg_gebouw_key, ag.alg_gebouw_naam, ag.alg_locatie_key
FROM
(SELECT cnt_contract_key, MIN (cp.cnt_alg_plaats_key) cnt_alg_plaats_key
FROM cnt_contract_plaats cp
WHERE cp.cnt_contract_plaats_verwijder IS NULL
AND cp.cnt_alg_plaats_code = 'G'
GROUP BY cnt_contract_key) cp,
alg_gebouw ag
WHERE cp.cnt_alg_plaats_key = ag.alg_gebouw_key) g,
aaxx_v_exact_code_district exact_d,
aaxx_v_exact_code_gebouw exact_g,
aaxx_v_klantcode_gebouw exact_k,
(SELECT fin_factuur_key,
cnt_contract_key,
SUM (fin_factuurregel_totaal) bedrag,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 1) fin_btwtabelwaarde_code,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 2) fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_key,
prs_kostenplaats_key,
prs_kostensoort_key,
prs_kostensoort_refcode,
fin_factuur_boekmaand,
DECODE (aaxx_get_cnt_gebrokenboekjaar (cnt_contract_key),
'nee', opdr_datum,
'ja', TO_DATE (fin_factuur_boekmaand,'yyyy-mm'),
NULL)
opdr_datum,
fin_factuur_datum
FROM aaxx_v_factuur_gegevens
WHERE fin_factuur_statuses_key = 6
GROUP BY fin_factuur_key,
cnt_contract_key,
prs_kostenplaats_key,
prs_kostensoort_key,
prs_kostensoort_refcode,
fin_factuur_boekmaand,
opdr_datum,
fin_factuur_datum,
fin_btwtabelwaarde_key) fg
WHERE fg.prs_kostenplaats_key = k.prs_kostenplaats_key
AND fg.cnt_contract_key = c.cnt_contract_key
AND fg.fin_factuur_key = f.fin_factuur_key
AND g.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key =exact_d.alg_district_key(+)
AND g.alg_gebouw_key = exact_g.alg_gebouw_key(+)
AND g.alg_gebouw_key = exact_k.alg_gebouw_key(+)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.ins_discipline_key = d.ins_discipline_key
AND c.cnt_contract_key = g.cnt_contract_key(+)
AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND ( ( aaxx_get_user = 'AH'
AND ks.prs_kostensoort_upper LIKE 'CV %'
)
OR ( aaxx_get_user = 'DSM'
AND ( ( ( SUBSTR (ks.prs_kostensoort_upper, 1, 3) =
'CV '
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) =
'L CV ')
AND g.alg_gebouw_code NOT IN ('122-170',
'122-200',
'122-094',
'122-092')
AND l.alg_locatie_key NOT IN ('23', '41')) -- Waalwijk en de Beitel
OR SUBSTR (ks.prs_kostensoort_upper, 1, 3) = 'CVE'
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) = 'L CVE'))
OR
( aaxx_get_user = 'EXPO'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %'
OR ks.prs_kostensoort_upper = 'NC PROJ')
)
OR
( aaxx_get_user = 'ESSENT'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
AND upper(aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)) NOT IN ('X') -- Voor alle gebouwen met gebouw-debiteur X gaan we GEEN verkoopfactuur aanmaken
)
)
OR
( aaxx_get_user = 'INLO'
AND (
-- de subaccounts die de CV-verkoopinterface aan hebben staan, zijn:
---- MERCEDES(61), BASTION ZUID(541), MENZIS(481), IKEA-BEHEER(461), KADASTER(441), LANDMARK HUURDERS(301), IKEA(281), COVESTRO(261), LANDMARK(241), TRINSEO(121), ALLIANDER(81), VGZ(41), HENKEL(23), VEH(21)
---- COVESTRO DERDEN (341) - WEL/NIET PEGGY?
(
kpg.prs_kostenplaatsgrp_key IN (541, 481, 461, 441, 301, 281, 261, 241, 121, 81, 41, 23, 21, 341) -- hier de keys van de bijbehorende kostenplaatsgroep vullen
AND (ks.prs_kostensoort_upper LIKE 'CV %' OR ks.prs_kostensoort_upper LIKE 'CVE %')
) -- alleen CV - geen CVE
OR
(
kpg.prs_kostenplaatsgrp_key IN (61) -- hier de keys van de bijbehorende kostenplaatsgroep vullen
AND ks.prs_kostensoort_upper LIKE 'CV %'
)
)
AND NOT EXISTS ( SELECT 1 FROM DUAL WHERE aaxx_get_user_sub('INLO', exact_k.klantcode) IN ('COVESTRO') AND l.alg_locatie_code = 'GLN' AND INSTR(UPPER(g.alg_gebouw_naam), 'CHEMELOT CAMPUS')>0) -- uitsluiten COVESTRO-Campus Chemelot GELEEN
)
OR
( aaxx_get_user = 'NMM'
AND ks.prs_kostensoort_upper LIKE 'CV%'
)
OR
( aaxx_get_user = 'RABO'
AND ks.prs_kostensoort_upper LIKE 'CV %'
AND ks.prs_kostensoort_upper <> 'CV DOC POST'
)
OR
( aaxx_get_user = 'SABIC'
AND ( ( c.cnt_contract_looptijd_van < to_date ('20180101', 'yyyymmdd') -- Voor sabic geldt in 2018 een ander mechanisme (AASA#28673)
AND ks.prs_kostensoort_upper LIKE 'CV %'
AND ks.prs_kostensoort_upper <> 'CV CHIP'
AND ( c.cnt_contract_looptijd_van > to_date ('20150101', 'yyyymmdd') -- Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
OR ( ks.prs_kostensoort_upper <> 'CV CONS REST'
AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
AND ks.prs_kostensoort_upper <> 'CV DOC POST'
AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
)
)
)
OR (
(c.cnt_contract_looptijd_van >= to_date ('20180101', 'yyyymmdd') AND c.cnt_contract_looptijd_van < to_date ('20190101', 'yyyymmdd') ) -- Voor Sabic geldt voor 2018 een ander mechanisme (AASA#28673)
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE%')
)
OR (c.cnt_contract_looptijd_van >= to_date ('20190101', 'yyyymmdd') -- Voor Sabic IP geldt voor 2019 mechanisme gelijk aan 2018 (AASA#56477)
AND l.alg_locatie_code in ('BOZ','RDV')
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE%')
)
OR (
c.cnt_contract_looptijd_van >= to_date ('20190101', 'yyyymmdd') -- Voor Sabic Geleen geldt voor 2019 een ander mechanisme (AASA#56477)
AND l.alg_locatie_code not in ('BOZ','RDV')
AND ( ks.prs_kostensoort_upper LIKE 'CV TRA'
OR ks.prs_kostensoort_upper LIKE 'CVE%')
)
)
)
OR ( aaxx_get_user = 'IT'
AND ( SUBSTR(kpg.prs_kostenplaatsgrp_nr,1,6) IN ('400-VK', '500-VK') -- VK is verkoopfacturen (zie AAIT#69225)
)
)
OR ( aaxx_get_user = 'REMEHA'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %'
)
)
OR ( aaxx_get_user = 'THHD'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %')
)
OR ( aaxx_get_user = 'MENZIS'
AND ks.prs_kostensoort_upper LIKE 'CV %'
)
);
-- voeg bestelorders toe aan de verkoopbuffer
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1, fin_verkoopfactuur_n2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c6, fin_verkoopfactuur_c7, fin_verkoopfactuur_n3, fin_verkoopfactuur_c8, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5
)
SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || bestel.bes_bestelopdr_id, 1,30 ) fin_verkoopfactuur_id,
'bestelopdr',
bestel.bes_bestelopdr_key,
v_logdate,
SUBSTR(
DECODE (aaxx_get_user,
'AH', k.prs_kostenplaats_nr,
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'EXPO', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), '913918', '03701000',
'4001', '03700000',
'Onbekend'),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', '99999999',
-- = de INLO-standaard voor kostenplaats (gevuld op regelniveau kolom AM (39)
k.prs_kostenplaats_nr
),
'SABIC', aaxx_get_top_dep_code (k.prs_kostenplaats_nr),
prs_kostenplaats_nr)
, 1, 30)
prs_kostenplaats_nr, -- gevuld op regelniveau kolom AM (39)
SUBSTR (
DECODE (aaxx_get_user,
'AH', DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520'),
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'EXPO', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)),
'MENZIS', aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code),
-- = de INLO-standaard voor debiteurbepaling - kopregel kolom C
aaxx_get_top_kpn_nr (k.prs_kostenplaats_key)
),
'SABIC', (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
prs_kostenplaats_nr)
, 1, 60)
prs_debiteur_naam, -- kolom AT (46) en in debiteurnummer kolom C (3)
bestel.prs_bedrijf_key,
ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','')
prs_kostensoort_oms, -- exact_artikelcode - kolom AD (30)
ks.prs_kostensoort_opmerking,
SUBSTR (
DECODE (aaxx_get_user, 'AH', ksg.prs_kostensoortgrp_oms || DECODE(aaxx_get_top_bedrijf_key(k.prs_kostenplaats_nr), 13383, k.prs_kostenplaats_nr, aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'DSM', ksg.prs_kostensoortgrp_oms || DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5) , 'L CV ', ' ' || l.alg_locatie_code)),
'EXPO', 'Servicekosten Core Variabel',
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
-- = de INLO-standaard voor kostensoortgr_omschr - kopregel kolom D
'Servicekosten Core Variabel'
),
'SABIC', DECODE (l.alg_locatie_code, 'BOZ', 'Core Variabel ' || to_char(sysdate, 'Month'),
'RDV', 'Core Variabel ' || to_char(sysdate, 'Month'),
ksg.prs_kostensoortgrp_oms || ' ' || aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
ksg.prs_kostensoortgrp_oms)
, 1, 60)
prs_kostensoortgrp_oms, -- kopregel - kolom D (4)
DECODE (aaxx_get_user, 'SABIC', ks.prs_kostensoort_altcode || ' ' || fg.fin_btwtabelwaarde_code,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', 'Variabele dienstverlening' || ' ' || fg.fin_btwtabelwaarde_perc,
-- = de INLO-standaard voor omschrijving sub-regel
-- bestel.bes_bestelopdr_id || ' ' || d.ins_discipline_omschrijving
-- MAAR MOET WORDEN: De afwijkend dienst of standaard-sen-heyday) aangevuld met btw-percentage
COALESCE(aaxx_get_sen_omschrijving(exact_k.klantcode, ks.prs_kostensoort_upper),ks.prs_kostensoort_opmerking) || ' ' || fg.fin_btwtabelwaarde_perc
),
bestel.bes_bestelopdr_id || ' ' || d.ins_discipline_omschrijving)
fin_verkoopfactuur_omschr, -- omschrijving subregel - kolom AF (32)
fg.fin_factuurregel_totaal,
fg.fin_btwtabelwaarde_code,
TO_CHAR (opdr_datum, 'YYYY')
fin_verkoopfactuur_maand,
DECODE (aaxx_get_user,
-- Op district-niveau
'SABIC', COALESCE(exact_d.exact_code,'onbekend'),
'DSM', DECODE (l.alg_district_key, 22, COALESCE(exact_g.exact_code,'onbekend'), COALESCE(exact_d.exact_code,'onbekend')), -- DSM voor Limburg (key 22) op gebouwniveau en overige op districtniveau
'NMM', COALESCE(exact_d.exact_code,'onbekend'),
-- Op klantgebouw-niveau
'INLO', COALESCE(exact_k.klantcode,'onbekend'),
-- Overig/Default op gebouw-niveau
COALESCE(exact_g.exact_code,'onbekend')) exact_code, -- C1 - kolom AU (47)
SUBSTR (
DECODE (aaxx_get_user,
'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'L C', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,5), 'L CV ', DECODE (l.alg_locatie_code, 'ZWO', '913848',
'EMM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'DLF', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
'520') || l.alg_locatie_code,
'L CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
'EXPO', alg_locatie_code,
'SABIC',DECODE (l.alg_locatie_code, 'BOZ', to_char(sysdate, 'Month'),
'RDV', to_char(sysdate, 'Month'),
aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
'')
, 1, 200) groepering, -- C2 -- kopregel
NULL subregelvolgorde, -- C3
l.alg_locatie_key, -- N1
NULL fin_verkoopfactuur_n2,
-- Voor CORE-verkoopfacturen
--- de cust-aanvulling op kopregel kolom C (3)
DECODE (aaxx_get_user,
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', ksg.prs_kostensoortgrp_altcode || ' ' || l.alg_locatie_code || ' ',
-- = de INLO-standaard voor C5 waar de subaccounts uiteindelijk op kunnen terugvallen
-- ksg.prs_kostensoortgrp_altcode
NULL
),
'ESSENT', ksg.prs_kostensoortgrp_altcode || ' ' || l.alg_locatie_code || ' ',
NULL
)
--- de standaard aanvulling die altijd achter de cust-aanvulling komt
|| 't/m ' || to_char(SYSDATE, 'MON')
---- verbeteridee Peggy (= in geval VJ altijd t/m DEC)
---- || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), 't/m DEC', 't/m ' || to_char(SYSDATE, 'MON'))
fin_verkoopfactuur_c5, -- heyday-referentie - standaard aanvulling op kopregel positie kolom C (3)
-- Voor CV-verkoopfacturen dient PO-nummer uit de HEYDAY-PO-tabel opgehaald te worden
--- Via functie aaxx_get_po(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
'COVESTRO', aaxx_get_po_nr('COVESTRO', NULL, NULL, l.alg_locatie_code,
DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3), 'CVE' , aaxx_get_top_kpn_nr (k.prs_kostenplaats_key), aaxx_get_debiteur_gebouw(l.alg_locatie_code, g.alg_gebouw_code)), -- debiteurnr
NULL,
ks.prs_kostensoort_upper, -- kostensoort_code
TRUNC(opdr_datum)),
'MENZIS', aaxx_get_po_nr('MENZIS', NULL, NULL, g.alg_gebouw_code,
NULL,
NULL,
NULL,
TRUNC(opdr_datum)),
-- 'HENKEL', aaxx_get_po_nr('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- 'ALLIANDER', aaxx_get_po_nr('ALLIANDER', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- = de INLO-standaard voor PO-nr (indien geen resultaat in tabel dan krijg je NULL terug)
aaxx_get_po_nr(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
),
'ESSENT', aaxx_get_po_nr(NULL, NULL, NULL, g.alg_gebouw_code, NULL, NULL, NULL, TRUNC(opdr_datum)),
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
) fin_verkoopfactuur_c6, -- po-nummer klant uit PO-tabel HEYDAY
-- Voor CV-verkoopfacturen - Structuur/Systematiek IDEM aan fin_verkoopfactuur_c6 waarbij indien voor klantomgeving van toepassing het PO-REGEL uit de HEYDAY-PO-tabel opgehaald wordt
--- Via functie aaxx_get_po_regel(p_aaxxuser_sub, p_klantcode, p_klantoms, p_plaatscode, p_debiteurnr, p_kostensoortgroep, p_kostensoortcode, p_datum)
DECODE (aaxx_get_user, 'SABIC', NULL, -- Later nog uitwerken
'RABO', NULL, -- Later nog uitwerken
'DSM', NULL, -- Later nog uitwerken
'INLO', DECODE (aaxx_get_user_sub('INLO', exact_k.klantcode),
-- 'HENKEL', aaxx_get_po_regel('HENKEL', NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum)),
'COVESTRO', NULL,
-- = de INLO-standaard voor PO-regel
-- aaxx_get_po_regel(aaxx_get_user_sub('INLO', exact_k.klantcode), NULL, NULL, NULL, NULL, NULL, NULL, TRUNC(opdr_datum))
NULL
),
'ESSENT', NULL,
-- De standaard: Kostengroepsrt-alternatieve code + periode
NULL
) fin_verkoopfactuur_c7, -- algemene regelomschrijving uit PO-tabel
NULL fin_verkoopfactuur_n3,
'CORE' fin_verkoopfactuur_c8, -- soort verkoopfactuur
fg.fin_factuur_key
fin_verkoopfactuur_n4,
DECODE (aaxx_get_user, 'INLO', kpg.prs_kostenplaatsgrp_key, NULL) -- Multi-clientomgeving met subaccounts op kostenplaatsgroepen. T.b.v. het separaat kunnen runnen van de verkoopinterfaces
fin_verkoopfactuur_n5
FROM ( SELECT *
FROM aaxx_v_bestelgegevens
GROUP BY bes_bestelopdr_key,
bes_bestelopdr_id,
ins_discipline_key,
mld_adres_key_lev,
bes_bestelling_leverdatum,
prs_bedrijf_key) bestel,
mld_adres ad,
prs_kostenplaats k,
prs_kostenplaatsgrp kpg,
ins_tab_discipline d,
prs_kostensoort ks,
prs_kostensoortgrp ksg,
aaxx_exp_factuur f,
alg_gebouw g,
alg_locatie l,
aaxx_v_exact_code_district exact_d,
aaxx_v_exact_code_gebouw exact_g,
aaxx_v_klantcode_gebouw exact_k,
( SELECT fin_factuur_key,
bes_bestelopdr_key,
prs_kostenplaats_key,
prs_kostensoort_key,
fin_factuur_boekmaand,
opdr_datum,
fin_factuur_datum,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 1) fin_btwtabelwaarde_code,
aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key, 2) fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_key,
sum(fin_factuurregel_totaal) fin_factuurregel_totaal
FROM aaxx_v_factuur_gegevens
WHERE fin_factuur_statuses_key = 6
AND bes_bestelopdr_key IS NOT NULL
GROUP BY fin_factuur_key,
bes_bestelopdr_key,
prs_kostenplaats_key,
prs_kostensoort_key,
fin_factuur_boekmaand,
fin_btwtabelwaarde_key,
opdr_datum,
fin_factuur_datum) fg
WHERE fg.bes_bestelopdr_key = bestel.bes_bestelopdr_key
AND fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND bestel.ins_discipline_key = d.ins_discipline_key
AND bestel.mld_adres_key_lev = ad.mld_adres_key(+)
AND ad.mld_adres_gebouw_ruimte = g.alg_gebouw_code(+)
AND l.alg_district_key =exact_d.alg_district_key(+)
AND g.alg_gebouw_key = exact_g.alg_gebouw_key(+)
AND g.alg_gebouw_key = exact_k.alg_gebouw_key(+)
AND l.alg_district_key =exact_d.alg_district_key(+)
AND g.alg_locatie_key = l.alg_locatie_key
AND fg.fin_factuur_key = f.fin_factuur_key
AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
AND ( ( aaxx_get_user = 'AH'
AND ks.prs_kostensoort_upper LIKE 'CV %'
)
OR
( aaxx_get_user = 'DSM'
AND ( ( ( SUBSTR (ks.prs_kostensoort_upper, 1, 3) =
'CV '
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) =
'L CV ')
AND g.alg_gebouw_code NOT IN ('122-170',
'122-200',
'122-094',
'122-092')
AND l.alg_locatie_key NOT IN ('23', '41')) -- Waalwijk en de Beitel
OR SUBSTR (ks.prs_kostensoort_upper, 1, 3) = 'CVE'
OR SUBSTR (ks.prs_kostensoort_upper, 1, 5) = 'L CVE')
)
OR
( aaxx_get_user = 'EXPO'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %'
OR ks.prs_kostensoort_upper = 'NC PROJ')
)
OR
( aaxx_get_user = 'INLO'
AND (
-- de subaccounts die de CV-verkoopinterface aan hebben staan, zijn:
---- MENZIS(481), KADASTER(441), LANDMARK HUURDERS(301), COVESTRO(261), LANDMARK(241), TRINSEO(121), ALLIANDER(81), VGZ(41), HENKEL(23), VEH(21)
---- COVESTRO DERDEN (341) - WEL/NIET PEGGY?
kpg.prs_kostenplaatsgrp_key IN (481, 441, 301, 261, 241, 121, 81, 41, 23, 21, 341) -- hier de keys van de bijbehorende kostenplaatsgroep vullen
AND (ks.prs_kostensoort_upper LIKE 'CV %' OR ks.prs_kostensoort_upper LIKE 'CVE %')
)
AND NOT EXISTS ( SELECT 1 FROM DUAL WHERE aaxx_get_user_sub('INLO', exact_k.klantcode) IN ('COVESTRO') AND l.alg_locatie_code = 'GLN' AND INSTR(UPPER(g.alg_gebouw_naam), 'CHEMELOT CAMPUS')>0) -- uitsluiten COVESTRO-Campus Chemelot GELEEN
)
OR
( aaxx_get_user = 'SABIC'
AND ( ks.prs_kostensoort_upper LIKE 'CV %'
OR ks.prs_kostensoort_upper LIKE 'CVE %')
)
);
-- bereken per klant de FEE over de omzet.
-- Fee over Projecten - zie ticket AAIT#72344
-- Generiek: voor meerdere/alle klantomgevingen zelfde structuur
-- De fee is op basis van de op het project opgegeven Projectmarges VAST en/of PROCENTUEEL, met de tekst <20>Projectfee<65>.
-- Per verkoopfactuur 1 regel, met exact_artikelcode 'REVENUE PROJECTS FEE'
-- We gaan eerst kijken of er PR-verkoopfacturen in deze run zijn aangemaakt waar FEE over belast moet worden
BEGIN
v_errormsg := 'Projectfee bepalen';
SELECT MAX(fin_verkoopfactuur_c8)
INTO v_projectfacturen_fee
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND fin_verkoopfactuur_xmlnode = 'opdracht'
AND fin_verkoopfactuur_c8 = 'PROJECT'
AND (fin_verkoopfactuur_n2 <> 0 OR fin_verkoopfactuur_n3 <> 0) ;
END;
IF v_projectfacturen_fee IS NOT NULL THEN
-- als projectmarge PROCENTUEEL is gevuld (= fin_verkoopfactuur_n3) dan berekenen we over verkoopfactuur nog een FEE
---- Ps. Ik maak per inkoopfactuurnr ook 1 fee_proc-regel aan. Deze komen dan op detail-verslag en bij genereren van de exact-vk-project-factuur worden deze naar exact wel getotaliseerd tot 1 fee-regel
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n3, fin_verkoopfactuur_n5, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'REVENUE PROJECTS FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', prs_kostensoortgrp_oms, 'Projectfee' , SUM(ROUND(fin_verkoopfactuur_bedrag * (fin_verkoopfactuur_n3-1), 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n3, fin_verkoopfactuur_n5, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND fin_verkoopfactuur_c8 = 'PROJECT'
AND INSTR(prs_kostensoort_oms, 'REVENUE PROJECTS COST') > 0 -- ook VJ's meenemen 'REVENUE PROJECTS COST VJ'
AND fin_verkoopfactuur_n3 <> 0 -- projectmarge procentueel gevuld
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n3, fin_verkoopfactuur_n5, fin_verkoopfactuur_n4;
-- als projectmarge VAST is gevuld (= fin_verkoopfactuur_n2) dan moet er eenmalig een VAST bedrag als PROJECTFEE VAST opgenomen worden
---- Ps. Ik maak 1 fee_vast-regel aan en vul fin_verkoopfactuur_n4 met laagste inkoopfactuurnr uit de run
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n2, fin_verkoopfactuur_n5, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'REVENUE PROJECTS FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', prs_kostensoortgrp_oms, 'Projectfee vast' , fin_verkoopfactuur_n2, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n2, fin_verkoopfactuur_n5, MIN(fin_verkoopfactuur_n4)
FROM fin_verkoopfactuur v, aaxx_v_projectorders_bron pr
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND fin_verkoopfactuur_c8 = 'PROJECT'
AND INSTR(prs_kostensoort_oms, 'REVENUE PROJECTS COST') > 0 -- ook VJ's meenemen 'REVENUE PROJECTS COST VJ'
AND fin_verkoopfactuur_n2 <> 0 -- projectmarge vast gevuld
AND v.fin_verkoopfactuur_refkey = pr.mld_opdr_key AND pr.aantal_regels_fee_vast IS NULL -- mag nog geen fee-regel vast als verkoopregel toegevoegd zijn
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n2, fin_verkoopfactuur_n5;
END IF;
IF aaxx_get_user = 'IT' THEN
-- Fee: 3% bij de facturen die vallen onder kostenplaatsgroep 400-VK en FEE en 500-VK en FEE
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, k.prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE', '', prs_kostensoortgrp_oms, 'BASE FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * 0.03, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v, prs_kostenplaats k, prs_kostenplaatsgrp kpg
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND v.prs_kostenplaats_nr = k.prs_kostenplaats_nr AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
AND INSTR(UPPER(kpg.prs_kostenplaatsgrp_nr),'FEE')>0
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, k.prs_kostenplaats_nr, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
END IF;
IF aaxx_get_user = 'DSM' THEN
-- CVE
-- Fee: De fee over dit CVE gedeelte wordt apart doorbelast aan de klant en moet in een separate factuur worden gezet.
-- Deze factuur moet standaard naar debiteurencode 520.
-- Per factuur dient een fee berekend te worden van 0% of 3%.
-- Hierbij geldt als uitgangspunt dat voor alle MA contracten 0% geldt, en voor alle CP 3%.
-- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
-- Extra verzoek hierover is om wel per locatie <20><>n regel te maken (dus Sittard, Urmond, Campus,etc).
-- Misschien dat we dit kunnen doen door artikelcode FEE te gebruiken, maar omschrijving Fee Sittard, Fee Urmond, etc?
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', DECODE (l.alg_locatie_code, 'EMM', prs_debiteur_naam, 'ZWO', prs_debiteur_naam, 'WAA', prs_debiteur_naam, 'DLF', prs_debiteur_naam, '520'), 'CVE FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', prs_kostensoortgrp_oms, 'FEE ' || l.alg_locatie_code, SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'FEE' || fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v, prs_relatietype r, alg_locatie l, prs_bedrijf b
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND v.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_relatietype_key = r.prs_relatietype_key
AND r.prs_relatietype_omschrijving = 'Contracting party'
AND v.fin_verkoopfactuur_n1 = l.alg_locatie_key
AND prs_kostensoort_oms LIKE 'CVE%'
AND fin_verkoopfactuur_c8 = 'CORE'
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, l.alg_locatie_code, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
-- CV
-- Fee: Er wordt een fee van 0% of 3% berekend over deze factuur.
-- Het percentage is afhankelijk van het contracttype van de leverancier.
-- Bij alle Managing Agent (MA) geldt 0%, voor alle Contracting Party (CP) geldt 3%.
-- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', DECODE (l.alg_locatie_code, 'EMM', prs_debiteur_naam, 'DLF', prs_debiteur_naam, '520'), 'CV FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', prs_kostensoortgrp_oms, 'FEE' , SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v, prs_relatietype r, prs_bedrijf b, alg_locatie l
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND v.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_relatietype_key = r.prs_relatietype_key
AND r.prs_relatietype_omschrijving = 'Contracting party'
AND v.fin_verkoopfactuur_n1 = l.alg_locatie_key
AND prs_kostensoort_oms LIKE 'CV %'
AND fin_verkoopfactuur_c8 = 'CORE'
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, l.alg_locatie_code, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
END IF;
IF aaxx_get_user = 'ESSENT' THEN
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE' || DECODE (INSTR(v.prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', prs_kostensoortgrp_oms, 'BASE FEE 1.5%', ROUND(SUM(fin_verkoopfactuur_bedrag) * 0.015, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_aanmaak = v_logdate
AND fin_verkoopfactuur_c8 = 'CORE'
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, instr(v.prs_kostensoort_oms, ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
END IF;
-- INLO CORE
-- Voor IKEA - op basis van de maintenance cap bij opdracht.
--- Geldt voor alleen voor waarde opdrachtkenmerk 'maintenance cap op JA'
--- Is MAX 500 euro, over alle inkoopfacturen op die opdracht
--- Bij Credits op die opdracht bedrag debet in rekening brengen
------- Om goede berekening te houden, is er een hulpview aaxx_v_verkoopfactuur_cap.
------- Per inkooprun wordt dan op de hoogste verkoopfactuur_key in die run de CAP-bepaald en op die verkoopfactuur toegevoegd.
IF aaxx_get_user = 'INLO' THEN
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5
)
SELECT v.fin_verkoopfactuur_id, v.fin_verkoopfactuur_xmlnode, v.fin_verkoopfactuur_refkey, v.fin_verkoopfactuur_aanmaak, v.prs_debiteur_naam, v.prs_debiteur_naam, 'CV CAP' || DECODE (INSTR(v.prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), 'Maintenance cap', v.prs_kostensoortgrp_oms, v.fin_verkoopfactuur_omschr,
c.cap_te_verrekenen_in_run,
v.fin_btwtabelwaarde_code, v.fin_verkoopfactuur_maand, v.fin_verkoopfactuur_c1, v.fin_verkoopfactuur_c2, 'X', v.fin_verkoopfactuur_c5, v.fin_verkoopfactuur_c8, v.fin_verkoopfactuur_c6, v.fin_verkoopfactuur_n4, v.fin_verkoopfactuur_n5
FROM fin_verkoopfactuur v,
aaxx_v_verkoopfactuur_cap c
WHERE c.fin_verkoopfactuur_key = v.fin_verkoopfactuur_key
AND ROUND(c.inkoopfacturen_totaal_verwerkt, 2) = ROUND(c.vk_regels_opdracht, 2) -- Bij overgang naar nieuwe vk-interface IKEA2.0. wil alleen maar de juiste CAP-berekening in de verkoopfactuur als ook daadwerkelijke alle inkoopfacturen in de verkoopinterface zitten
AND c.cap_te_verrekenen_in_run <> 0
AND v.fin_verkoopfactuur_n5 IN (281, 461) -- IKEA en IKEA-BEHEER
AND v.fin_verkoopfactuur_aanmaak = v_logdate
AND v.fin_verkoopfactuur_c8 = 'CORE' ;
END IF;
-- NMM
-- Pas het bedrag van de bewaking aan. Opdrachten aan stdmelding 1121 moeten een bedrag krijgen van het aantal uren uit de opdracht maal het uurtarief dat
-- In een eigentabel opgeslagen wordt. De entries in de eigen tabel kunnen verschillende tarieven met een vervaldatum bevatten.
-- stdmelding 1248 bevat meldingen schoonmaak die ook voorzien moeten worden van een uurtarief. Maar dan wel uit een andere eigen tabel.
IF aaxx_get_user = 'NMM' THEN
UPDATE fin_verkoopfactuur vk
SET fin_verkoopfactuur_bedrag = (SELECT o.mld_opdr_uren * ud.fac_usrdata_prijs
FROM mld_opdr o, mld_melding m, fac_usrdata ud
WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
AND ud.fac_usrtab_key = DECODE(m.mld_stdmelding_key, 1121, DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 141, 7, 141, 122) -- Uurtarief bewaking (141 tabel weekend, 122 tabel weekdagen)
, 1248, DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 162, 7, 162, 161) -- Uurtarief bewaking (162 tabel weekend, 161 tabel weekdagen)
)
AND ud.fac_usrdata_verwijder IS NULL
AND o.mld_opdr_datumbegin < COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
AND NOT EXISTS (SELECT ud2.fac_usrdata_key
FROM fac_usrdata ud2
WHERE ud2.fac_usrtab_key = ud.fac_usrtab_key
AND o.mld_opdr_datumbegin < COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE)
AND ud2.fac_usrdata_verwijder IS NULL
AND COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE) <
COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
)
)
WHERE EXISTS (SELECT mld_opdr_key
FROM mld_opdr o, mld_melding m
WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key IN (1121, 1248) -- Aanvraag beveiligingsdienst(en) tbv evenementen / Aanvraag extra schoonmaak tbv evenementen
)
AND fin_verkoopfactuur_aanmaak = v_logdate;
-- Voor de overige meldingen gaan we een uplift van 10% hanteren
UPDATE fin_verkoopfactuur vk
SET fin_verkoopfactuur_bedrag = ROUND(fin_verkoopfactuur_bedrag * 1.1,2)
WHERE EXISTS (SELECT mld_opdr_key
FROM mld_opdr o, mld_melding m
WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key NOT IN (1121, 1248) -- Aanvraag beveiligingsdienst(en) tbv evenementen / Aanvraag extra schoonmaak tbv evenementen
)
AND fin_verkoopfactuur_aanmaak = v_logdate;
END IF;
IF aaxx_get_user = 'RABO' THEN -- RABO#37283 RABO#39639 RABO#56840 RABO#57776
INSERT INTO fin_verkoopfactuur -- Voor kostenplaatsen standaard 5,5% fee (m.u.v. Optitrade en Eigen Steen)
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, DECODE (prs_kostensoort_oms, 'NC PROJ', 'FEE', 'Fee Core Variabel') || DECODE (INSTR (prs_kostensoort_oms, ' VJ'), 0, '', ' VJ'), '', prs_kostensoortgrp_oms, 'FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * 5.5 / 100, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v,
mld_opdr o,
mld_melding m,
mld_stdmelding std
WHERE v.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND fin_verkoopfactuur_aanmaak = v_logdate
AND v.prs_kostenplaats_nr not in ('0000003','0000004')
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoortgrp_oms, std.prs_kostensoort_key, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
INSERT INTO fin_verkoopfactuur -- Voor kostenplaatsen Optitrade en Eigen Steen 15% fee.
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
)
SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, DECODE (prs_kostensoort_oms, 'NC PROJ', 'FEE', 'Fee Core Variabel') || DECODE (INSTR (prs_kostensoort_oms, ' VJ'), 0, '', ' VJ'), '', prs_kostensoortgrp_oms, 'FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * 15.0 / 100, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4
FROM fin_verkoopfactuur v,
mld_opdr o,
mld_melding m,
mld_stdmelding std
WHERE v.fin_verkoopfactuur_refkey = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND fin_verkoopfactuur_aanmaak = v_logdate
AND v.prs_kostenplaats_nr in ('0000003','0000004')
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoortgrp_oms, std.prs_kostensoort_key, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, 'X', fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4;
END IF;
FOR rec1 IN c_bes
LOOP
BEGIN
-- indien nog niet afgemeld, dan maar even afmelden.
IF rec1.bes_bestelopdr_status = 3 THEN -- in behandeling
UPDATE bes_bestelopdr
SET bes_bestelopdr_status = 4
WHERE bes_bestelopdr_key= rec1.bes_bestelopdr_key
AND bes_bestelopdr_status = 3;
END IF;
IF rec1.bes_bestelopdr_status = 5 -- bevestigd
OR rec1.bes_bestelopdr_status = 4 -- in bestelling
OR rec1.bes_bestelopdr_status = 3 THEN
UPDATE bes_bestelopdr_item B
SET bes_bestelopdr_item_aantalontv = COALESCE(bes_bestelopdr_item_aantal, 0),
bes_bestelopdr_item_ontvangen = SYSDATE
WHERE b.bes_bestelopdr_key = rec1.bes_bestelopdr_key;
UPDATE bes_bestelling_item bi
SET bes_bestelling_item_aantalontv = COALESCE(bes_bestelling_item_aantal, 0)
WHERE EXISTS (SELECT bes_bestelopdr_key
FROM bes_bestelopdr_item boi
WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes_bestelopdr_key = rec1.bes_bestelopdr_key);
SELECT distinct bes_bestelling_key
INTO v_bestelling_key
FROM bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes_bestelopdr_key = rec1.bes_bestelopdr_key;
bes.updatebestelopdrstatus(rec1.bes_bestelopdr_key, v_aanvrager);
bes.updatebestellingstatus(v_bestelling_key, v_aanvrager);
END IF;
END;
END LOOP;
-- set de status van de opdracht en neem de kosten over van de factuur.
FOR rec1 IN c_opdr
LOOP
BEGIN
-- indien nog niet afgemeld, dan maar even afmelden.
IF rec1.mld_statusopdr_key <> 6 AND rec1.mld_statusopdr_key <> 7 AND rec1.mld_statusopdr_key <> 9 THEN
mld.setopdrachtstatus (rec1.mld_opdr_key, 6, v_aanvrager);
mld.setopdrachtstatus (rec1.mld_opdr_key, 9, v_aanvrager);
END IF;
UPDATE mld_opdr o
SET mld_opdr_kosten =
(SELECT SUM (fin_factuurregel_totaal)
FROM aaxx_v_aanwezigfactuur f
, fin_factuurregel fr
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND f.fin_factuur_statuses_key >= 6)
WHERE o.mld_opdr_key = rec1.mld_opdr_key
AND rec1.mld_melding_status IN (4, 5, 7); -- anders faalt de trigger sowieso
-- update meldingstatus
mld.updatemeldingstatusAV (rec1.mld_melding_key, 0, v_aanvrager, 0);
-- zet de status naar verwerkt (user is facilitor)
mld.setopdrachtstatus (rec1.mld_opdr_key, 7, v_aanvrager);
END;
END LOOP;
-- Neem de kosten van de factuur over in het termijnbedrag en totaalbedrag contract
FOR rec1 IN c_cnt
LOOP
BEGIN
v_contract_kosten_init := rec1.cnt_contract_kosten ;
UPDATE cnt_factuurschema fs
SET (cnt_factuurschema_opmerking,
cnt_factuurschema_bedrag) =
(SELECT SUBSTR(DECODE(cnt_factuurschema_opmerking, NULL, '', cnt_factuurschema_opmerking || CHR(10)) || 'Bedrag na verwerken facturen ' || TO_CHAR(SYSDATE, 'DD-MM-YYYY') || ' aangepast van ' || cnt_factuurschema_bedrag || ' naar ' || SUM (fin_factuurregel_totaal),1,320) opmerking,
SUM (fin_factuurregel_totaal) totaal
FROM aaxx_v_aanwezigfactuur f
, fin_factuurregel fr
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.cnt_contract_key = fs.cnt_contract_key
AND f.fin_factuur_boekmaand = fs.cnt_factuurschema_boekmaand
AND f.fin_factuur_statuses_key >= 6)
WHERE fs.cnt_factuurschema_key = rec1.cnt_factuurschema_key;
-- Nieuwe contract_kosten
SELECT SUM(fs.cnt_factuurschema_bedrag), TO_CHAR(SUM(fs.cnt_factuurschema_bedrag))
INTO v_contract_kosten_nieuw_n, v_contract_kosten_nieuw_k
FROM cnt_factuurschema fs
WHERE fs.cnt_contract_key = rec1.cnt_contract_key ;
UPDATE cnt_contract c
SET c.cnt_contract_kosten = v_contract_kosten_nieuw_n
WHERE c.cnt_contract_key = rec1.cnt_contract_key;
BEGIN fac.trackaction('CNTUPD', rec1.cnt_contract_key, v_aanvrager, NULL, 'Contract gewijzigd (na inkooprun)' || CHR(10)
|| 'Totaalbedrag: ' || v_contract_kosten_init
|| ' --> ' || v_contract_kosten_nieuw_k) ;
END;
END;
END LOOP;
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);
END;
END LOOP;
-- verwijder de enties uit de tijdelijke tabel. (AAEY#29465)
DELETE aaxx_exp_factuur;
END;
/
---------------------------------------------------
-- VERKOOPINTERFACE - exportfunctie - EXACT_VERKOOP
---------------------------------------------------
-- verkoopinterface CSV (voor CORE, PROJECT en RES)
-- Uitleg van de kolommen zoals ze naar Exact gaan:
-- 01 Regelnummer Vaste waarde 0
-- 02 Factuurcode Vaste waarde 3
-- 03 Debiteurnummer Kostenplaatsnummer - Inclusief aanvulling heyday_referentie (voorwaarde voor EXACT is dat deze aanvulling geen cijfers mag bevatten) (c5)
-- 04 Referentie Kostensoortgroep en/of PO-nummer
-- 05 Referentie 1 Leeg (THHD - Locatiecode)
-- 06 Referentie 2 Leeg (THHD - maand export-run)
-- 07 Referentie 3 Leeg
-- 08 Ordernummer Leeg
-- 09 Orderdatum Datum van de export.
-- 10 Magazijn 1
-- 11 Extra artikel omschrijving Leeg
-- 12 Vertegenwoordigers Leeg
-- 13 Kostenplaats Leeg
-- 14 Selectiecode Leeg
-- 15 Bedrag in vreemde valuta Leeg
-- 16 Netto prijs Leeg
-- 17 Valutacode EUR
-- 18 Wisselkoers Leeg
-- 19 Betalingsconditie Leeg
-- 20 Leveringswijze 1
-- 21 Vrachtkosten Leeg
-- 22 Orderkosten Leeg
-- 23 Faktuurkorting Leeg
-- 24 Totaal bedrag Leeg
-- 25 Colli 0
-- 26 Bruto gewicht 0
-- 27 Netto gewicht 0
-- 28 Afleverdatum Leeg
-- 29 - Leeg
-- 30 - Leeg
-- 31 Bruto/Netto Leeg
-- 32 - Leeg
-- 33 - Leeg
-- 34 - Leeg
-- 35 - Leeg
-- 36 - Leeg
-- 37 - Leeg
-- 38 - Leeg
-- 39 - Leeg
-- 40 - Leeg
-- 41 - Leeg
-- 42 Faktuursoort V
-- 43 Orderdebiteur is faktuurdebiteur Leeg
-- 44 Debiteur type Leeg
-- 45 Gefiatteerd N
-- 46 Faktuurdebiteur Kostenplaatsnummer
-- 47 - Leeg
-- 48 Facktuurnummer Leeg
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW aaxx_v_export_exact_verkoop_t (
result,
opdr_jaar,
soort, -- CORE of PROJECT of RES
subaccount, -- Voor MULTICLIENT INLO
result_order
)
AS
SELECT '0'
|| ','
|| DECODE(aaxx_get_user, 'RABO', '2',
'THHD', '00',
'3')
|| ','
|| prs_debiteur_naam
|| DECODE(fin_verkoopfactuur_c8, 'PROJECT', '',
'RES', ' t/m ' || to_char(SYSDATE, 'MON'),
'CORE', ' ' || fin_verkoopfactuur_c5)
|| ','
|| replace(prs_kostensoortgrp_oms, ',', '')
|| ','
|| DECODE(aaxx_get_user, 'THHD', TRIM(SUBSTR(prs_kostensoortgrp_oms,1,4)),
'')
|| ','
|| DECODE(aaxx_get_user, 'THHD', TO_CHAR (SYSDATE, 'MON'),
'')
|| ','
|| ''
|| ','
|| ''
|| ','
|| TO_CHAR (SYSDATE, 'ddmmyyyy')
|| ','
|| '1'
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| 'EUR'
|| ','
|| ''
|| ','
|| ''
|| ','
|| '1'
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| TO_CHAR (0)
|| ','
|| TO_CHAR (0)
|| ','
|| TO_CHAR (0)
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| 'V'
|| ','
|| ''
|| ','
|| ''
|| ','
|| 'N'
|| ','
|| prs_debiteur_naam
|| ','
|| ''
|| ','
|| ''
result,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c8,
fin_verkoopfactuur_n5,
fin_verkoopfactuur_maand || prs_debiteur_naam || fin_verkoopfactuur_c2 || fin_verkoopfactuur_c6 || replace(prs_kostensoortgrp_oms, ',', '') || DECODE(aaxx_get_user, 'NMM', '', 'DSM', '', 'RABO', '', 'EXPO', '', 'INLO', '', prs_kostenplaats_nr) || fin_verkoopfactuur_c5 || '-0-'
result_order
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL AND COALESCE(fin_verkoopfactuur_c8, 'CORE') IN ('CORE', 'RES', 'PROJECT')
GROUP BY fin_verkoopfactuur_maand, prs_debiteur_naam, fin_verkoopfactuur_c2, fin_verkoopfactuur_c6, replace(prs_kostensoortgrp_oms, ',', ''), TRIM(SUBSTR(prs_kostensoortgrp_oms,1,4)), DECODE(aaxx_get_user, 'NMM', '', 'DSM', '', 'RABO', '', 'EXPO', '', 'INLO', '', prs_kostenplaats_nr), fin_verkoopfactuur_c8, fin_verkoopfactuur_c5, fin_verkoopfactuur_n5
UNION ALL
-- Uitleg subregel:
-- 01 Regelnummer Vaste waarde 1
-- 02 - Vaste waarde 2 of 3
-- 03 - Leeg
-- 04 - Leeg
-- 05 - Leeg
-- 06 - Leeg
-- 07 - Leeg
-- 08 - Leeg
-- 09 - Leeg
-- 10 Magazijn 1
-- 11 - Leeg
-- 12 - Leeg
-- 13 - Leeg
-- 14 - Leeg
-- 15 - Leeg
-- 16 - Leeg
-- 17 - Leeg
-- 18 - Leeg
-- 19 - Leeg
-- 20 - Leeg
-- 21 - Leeg
-- 22 - Leeg
-- 23 - Leeg
-- 24 - Leeg
-- 25 - Leeg
-- 26 - Leeg
-- 27 - Leeg
-- 28 Afleverdatum Leeg
-- 29 Afleverweek Leeg
-- 30 Artikelcode Kostensoortcode
-- 31 Artikelsoort V
-- 32 Omschrijving Detailomschrijving verkoopfactuur-regel
-- 33 Hoeveelheid 1
-- 34 BTW code Verkoop-btw-code exact die hoort bij inkoopcode (conform eigen tabel in facilitor-omgeving)
-- 35 Prijslijst Leeg
-- 36 Korting 0
-- 37 Prijs Bedrag
-- 38 Nettoprijs Leeg
-- 39 Kostenplaats Kostenplaats
-- 40 Tekst voor tekstregels Leeg
-- 41 Omzetrekening Leeg (bij het inlezen in Exact wordt deze code erbij gezocht op basis van de artikelcode (kostensoort)
-- 42 - Leeg
-- 43 - Leeg
-- 44 - Leeg
-- 45 - Leeg
-- 46 - Leeg
-- 47 Kostenplaats Exact_code van het gebouw (bij contractorders wordt het eerste gebouw uit het contract geselecteerd) .
-- 48 - Leeg
SELECT '1'
|| ','
|| DECODE(aaxx_get_user, 'RABO', '2',
'THHD', '00',
'3')
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| '1'
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ' '
|| prs_kostensoort_oms
|| ','
|| 'V'
|| ','
|| replace(fin_verkoopfactuur_omschr, ',', '')
|| ','
|| '1'
|| ','
|| fin_btwtabelwaarde_code
|| ','
|| ''
|| ','
|| '0'
|| ','
|| REPLACE (TO_CHAR (sum(fin_verkoopfactuur_bedrag)), ',', '.')
|| ','
|| ''
|| ','
|| prs_kostenplaats_nr
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| ''
|| ','
|| fin_verkoopfactuur_c1 -- exact code gebouw
|| ','
|| ''
result,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c8,
fin_verkoopfactuur_n5,
fin_verkoopfactuur_maand || prs_debiteur_naam || fin_verkoopfactuur_c2 || fin_verkoopfactuur_c6 || replace(prs_kostensoortgrp_oms, ',', '') || DECODE(aaxx_get_user, 'NMM', '', 'DSM', '', 'RABO', '', 'EXPO', '', 'INLO', '', prs_kostenplaats_nr) || fin_verkoopfactuur_c5 || '-1-' || fin_verkoopfactuur_c3 || replace(fin_verkoopfactuur_omschr, ',', '') || prs_kostensoort_oms
result_order
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL AND COALESCE(fin_verkoopfactuur_c8, 'CORE') IN ('CORE', 'RES', 'PROJECT')
GROUP BY fin_verkoopfactuur_c3, replace(prs_kostensoortgrp_oms, ',', ''), fin_verkoopfactuur_omschr, replace(fin_verkoopfactuur_omschr, ',', ''), prs_kostenplaats_nr, prs_debiteur_naam, fin_verkoopfactuur_c2, fin_verkoopfactuur_c6, fin_verkoopfactuur_c1, prs_kostensoort_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c8, fin_verkoopfactuur_c5, fin_verkoopfactuur_n5 ;
CREATE OR REPLACE VIEW aaxx_v_export_exact_verkoop (
result,
result_order
)
AS
SELECT result,
result_order
FROM aaxx_exp_exact_verkoop;
-- preprocessing ten behoeve van:
---- VJ's voor juiste verwerking van kosten voor balans
---- IKEA en alle verkoopfacturen op 1 boekingsperiode
CREATE OR REPLACE PROCEDURE aaxx_exact_verkoop_preproces_1 (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_soort IN VARCHAR2,
p_subaccount IN NUMBER DEFAULT NULL
)
AS
CURSOR c_vj
IS
SELECT fin_verkoopfactuur_key,
fin_verkoopfactuur_maand,
prs_kostensoort_oms
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c8 = p_soort
AND COALESCE(TO_CHAR(fin_verkoopfactuur_n5), 'LEEG') = COALESCE(TO_CHAR(p_subaccount), 'LEEG')
AND fin_verkoopfactuur_maand = TO_CHAR(sysdate,'yyyy')-1 AND INSTR(prs_kostensoort_oms,' VJ')=0 ;
CURSOR c_ikea
IS
SELECT fin_verkoopfactuur_key,
fin_verkoopfactuur_maand,
prs_kostensoort_oms
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c8 = p_soort
AND fin_verkoopfactuur_n5 = COALESCE(p_subaccount, -1)
AND fin_verkoopfactuur_n5 IN (461, 281) --IKEA interfaces - ikea of ikea-beheer
AND fin_verkoopfactuur_maand = TO_CHAR(sysdate,'yyyy')-1 ;
BEGIN
-- aanvullen prs_kostensoort_oms met ' VJ' zodat deze netjes in exact naar de balansrekeningen gaan
FOR rec IN c_vj
LOOP
UPDATE fin_verkoopfactuur
SET prs_kostensoort_oms = prs_kostensoort_oms || ' VJ'
WHERE fin_verkoopfactuur_key = rec.fin_verkoopfactuur_key ;
END LOOP;
-- alle ikea-facturen op 1 VK-factuur krijgen door ze op huidig boekjaar te zetten
FOR rec IN c_ikea
LOOP
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_maand = TO_CHAR(sysdate,'yyyy')
WHERE fin_verkoopfactuur_key = rec.fin_verkoopfactuur_key ;
END LOOP;
END;
/
-- preprocessing: separate min-verkoopfacturen genereren - WAS VOOR DSM... NOG NODIG?
CREATE OR REPLACE PROCEDURE aaxx_exact_verkoop_preproces_2 (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_opdr_jaar IN VARCHAR2
)
AS
CURSOR c_group
IS
SELECT fin_verkoopfactuur_maand,
prs_kostensoort_oms,
SUM (fin_verkoopfactuur_bedrag) bedrag_totaal,
REPLACE (prs_kostensoortgrp_oms, ',', '')
|| ' - '
|| prs_debiteur_naam
|| ' - '
|| fin_verkoopfactuur_c5
|| ' - '
|| DECODE (aaxx_get_user,
'NMM', '',
'DSM', '',
'RABO', '',
'EXPO', '',
'INLO', '',
prs_kostenplaats_nr)
|| ' - '
|| fin_verkoopfactuur_c2
|| ' - '
|| DECODE (aaxx_get_user, 'AH', '')
|| ' - '
|| fin_verkoopfactuur_maand
group_header
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL AND fin_verkoopfactuur_maand = p_opdr_jaar
GROUP BY fin_verkoopfactuur_maand,
prs_kostensoort_oms,
REPLACE (prs_kostensoortgrp_oms, ',', ''),
prs_debiteur_naam,
fin_verkoopfactuur_c5,
DECODE (aaxx_get_user,
'NMM', '',
'DSM', '',
'RABO', '',
'EXPO', '',
'INLO', '',
prs_kostenplaats_nr),
fin_verkoopfactuur_c2,
DECODE (aaxx_get_user, 'AH', ''),
fin_verkoopfactuur_maand;
CURSOR c_factuur (
p_opdr_jaar VARCHAR2,
p_kostensoort_oms VARCHAR2,
p_group_header VARCHAR2
)
IS
SELECT v.fin_verkoopfactuur_key
FROM (SELECT vf.fin_verkoopfactuur_key,
prs_kostensoort_oms,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c2,
(SELECT fin_verkoopfactuur_c2
|| REPLACE (prs_kostensoortgrp_oms, ',', '')
|| DECODE (aaxx_get_user,
'DSM', '',
prs_kostenplaats_nr)
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_maand = p_opdr_jaar
AND v.fin_verkoopfactuur_key =
vf.fin_verkoopfactuur_key)
groep_result,
(SELECT replace(prs_kostensoortgrp_oms, ',', '') || ' - ' || prs_debiteur_naam || ' - ' || fin_verkoopfactuur_c5 || ' - ' || DECODE(aaxx_get_user, 'NMM', '', 'DSM', '', 'RABO', '', 'EXPO', '', 'INLO', '', prs_kostenplaats_nr) || ' - ' || fin_verkoopfactuur_c2 || ' - ' || DECODE(aaxx_get_user, 'AH', '') || ' - ' || fin_verkoopfactuur_maand
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_maand = p_opdr_jaar
AND v.fin_verkoopfactuur_key =
vf.fin_verkoopfactuur_key)
groep_by
FROM fin_verkoopfactuur vf
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_maand = p_opdr_jaar) v
WHERE prs_kostensoort_oms = p_kostensoort_oms
AND groep_by = p_group_header
ORDER BY v.groep_result, v.prs_kostensoort_oms;
BEGIN
-- separate min-verkoopfacturen genereren
FOR rec IN c_group
LOOP
-- Voor MIN de verkoopfactuur_key(s) ophalen - Vooralsnog alleen voor DSM
IF rec.bedrag_totaal < 0
THEN
BEGIN
FOR rec2 IN c_factuur (rec.fin_verkoopfactuur_maand, rec.prs_kostensoort_oms, rec.group_header)
LOOP
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_c2 = fin_verkoopfactuur_c2 || '-MIN-'
WHERE fin_verkoopfactuur_key = rec2.fin_verkoopfactuur_key ;
END LOOP;
END;
END IF;
END LOOP;
END;
/
-- Voordat de verkoopfacturen naar Exact geexporteerd wordt moet de volgorde van de subregels gecorrigeerd worden
CREATE OR REPLACE PROCEDURE aaxx_select_exact_verkoop (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_opdr_jaar IN VARCHAR2,
p_soort IN VARCHAR2,
p_subaccount IN NUMBER DEFAULT NULL
)
AS
CURSOR c1 IS
SELECT result, result_order
FROM aaxx_v_export_exact_verkoop_t
WHERE opdr_jaar = p_opdr_jaar AND soort = p_soort
AND COALESCE(TO_CHAR(subaccount), 'LEEG') = COALESCE(TO_CHAR(p_subaccount), 'LEEG')
ORDER BY result_order;
v_first NUMBER;
v_count NUMBER;
BEGIN
v_count := 0;
-- preprocessing uitvoeren
-- 1. Voor CORE de VJ ivm balansrekeningen exact nog goed zetten + IKEA alles op 1 verkoopfactuur krijgen
IF p_soort IN ('CORE', 'PROJECT') THEN
BEGIN aaxx_exact_verkoop_preproces_1(p_applname, p_applrun, p_soort, p_subaccount); END;
END IF;
-- 2. Min-factuur bepalen DSM
--- voorlopig alleen voor DSM
--- ACTIE-ACTIE: Pas bij uitrol DSM-verkoopinterface dit aanzetten ALS NOG NOIDIG?!?!
-- IF aaxx_get_user IN ('DSM') THEN
-- BEGIN aaxx_exact_verkoop_preproces_2(p_applname, p_applrun,p_opdr_jaar); END;
-- END IF;
DELETE aaxx_exp_exact_verkoop;
FOR rec IN c1
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;
INSERT INTO aaxx_exp_exact_verkoop (
result,
result_order)
VALUES (
v_count || substr (rec.result, 2),
rec.result_order|| TO_CHAR(v_count, 'FM0000')); -- voorkom dat de sortering door beinvloed wordt door de 1000.
-- TO_CHAR(1000+v_count)); -- forceer sortering bij count > 9
END;
END LOOP;
END;
/
-- Na dat de verkoopfacturen naar Exact geexporteerd zijn wordt de timestamp gezet.
CREATE OR REPLACE PROCEDURE aaxx_export_exact_verkoop (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2,
p_opdr_jaar IN VARCHAR2,
p_soort IN VARCHAR2,
p_subaccount IN NUMBER DEFAULT NULL
)
AS
v_timestamp DATE;
v_verkoopfactuurkop_key NUMBER (10);
BEGIN
v_timestamp := SYSDATE;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
VALUES( p_opdr_jaar
|| '-'
|| TO_CHAR (v_timestamp, 'yyyy-mm-dd hh24:mi:ss')
|| DECODE (p_subaccount, NULL, '', '_' || TO_CHAR(p_subaccount))
)
RETURNING fin_verkoopfactuurkop_key
INTO v_verkoopfactuurkop_key;
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_datum = v_timestamp,
fin_verkoopfactuurkop_key = v_verkoopfactuurkop_key
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_maand = p_opdr_jaar
AND fin_verkoopfactuur_c8 = p_soort
AND COALESCE(TO_CHAR(fin_verkoopfactuur_n5), 'LEEG') = COALESCE(TO_CHAR(p_subaccount), 'LEEG') ;
IF p_soort = 'RES'
THEN
INSERT INTO imp_schedule (imp_schedule_name)
VALUES ('EXACT_VERKOOP_VJ_R');
ELSE
IF p_soort = 'PROJECT'
THEN
INSERT INTO imp_schedule (imp_schedule_name)
VALUES (DECODE (p_subaccount, NULL, 'EXACT_VERKOOP_VJ_P', 'EXACT_VK_VJ_P_' || TO_CHAR(p_subaccount)) );
ELSE
INSERT INTO imp_schedule (imp_schedule_name)
VALUES (DECODE (p_subaccount, NULL, 'EXACT_VERKOOP_VJ', 'EXACT_VK_VJ_' || TO_CHAR(p_subaccount)) );
END IF;
END IF;
END;
/
-------------------------------------------
-- RAPPORTAGES - Inkoop en Verkoop
-------------------------------------------
-- Verkoop:
-- Detailrapport van de verkooprun. Wordt als factuurbijlage van de exact-verkoopfactuur meegestuurd naar klant
--- opgebouwd uit 2 views: detail_0 (basis) en detail_1 (klantrapport)
CREATE OR REPLACE VIEW aaxx_v_fin_verkooprun_detail_0
(
fin_verkoopfactuurkop_key,
verkooprun,
verkooprun_datum,
soort,
subaccount,
--hoofdfactuur_groepering
vk_hoofdgroep,
vk_detailgroep,
-- relevante gegevens uit financieel-inkoopfacturen
inkoopfactuur_nr,
inkoopfactuur_nr_cred,
fin_factuur_datum,
-- relevante gegevens uit verkoopfactuur - header
prs_debiteur_naam,
verkoopfactuur_ref, -- debiteurnaam + c5
verkoopfactuur_po, -- c6
prs_kostensoortgrp_oms,
fin_verkoopfactuur_maand,
-- relevante gegevens uit verkoopfactuur - details
verkoopfactuur_id,
verplichting_type,
prs_kostensoort_oms,
fin_verkoopfactuur_omschr,
fin_btwtabelwaarde_code,
fin_verkoopfactuur_bedrag,
prs_kostenplaats_nr,
fin_verkoopfactuur_c1, -- exactcode
verplichting_referentie,
-- overige verplichtings-gegevens
opdracht_begindatum,
opdracht_einddatum,
opdracht_omschrijving,
bron_omschrijving, -- std_melding_oms - contractoms
leverancier,
line_item, --fin_verkoopfactuur_c7
district,
locatie,
gebouw_code,
kostensoort_oms,
kostensoort_opmerking,
prs_kostenplaats_nr_v, -- kp van verplichting
prs_kostenplaats_omschrijving,
prs_perslid_naam_full, -- requestor
relatie_type,
btw_percentage,
ordernummer_klant_opdr
)
AS
SELECT vf.fin_verkoopfactuurkop_key,
CASE WHEN vf.fin_verkoopfactuurkop_key IS NULL THEN 'openstaand - nog te runnen'
ELSE TO_CHAR (vf.fin_verkoopfactuur_datum, 'yyyy-mm-dd hh24;mi')
|| ' - '
|| TO_CHAR (vf.fin_verkoopfactuurkop_key)
END
verkooprun,
vf.fin_verkoopfactuur_datum,
fin_verkoopfactuur_c8
soort,
CASE WHEN f.prs_kostenplaatsgrp_key IS NOT NULL THEN (SELECT kpg.prs_kostenplaatsgrp_oms FROM prs_kostenplaatsgrp kpg WHERE kpg.prs_kostenplaatsgrp_key = f.prs_kostenplaatsgrp_key) ELSE '' END
subaccount,
-- hoofdfactuur_groepering - GELIJK AAN GROEPERING IN aaxx_v_export_exact_verkoop_t
fin_verkoopfactuur_maand
|| prs_debiteur_naam
|| fin_verkoopfactuur_c2
|| fin_verkoopfactuur_c6
|| REPLACE (prs_kostensoortgrp_oms, ',', '')
|| DECODE (aaxx_get_user,
'NMM', '',
'DSM', '',
'RABO', '',
'EXPO', '',
'INLO', '',
vf.prs_kostenplaats_nr)
|| fin_verkoopfactuur_c5
|| '-0-'
vk_hoofdgroep,
-- detailfactuur_groepering - GELIJK AAN GROEPERING IN aaxx_v_export_exact_verkoop_t
fin_verkoopfactuur_maand
|| prs_debiteur_naam
|| fin_verkoopfactuur_c2
|| fin_verkoopfactuur_c6
|| REPLACE (prs_kostensoortgrp_oms, ',', '')
|| DECODE (aaxx_get_user,
'NMM', '',
'DSM', '',
'RABO', '',
'EXPO', '',
'INLO', '',
vf.prs_kostenplaats_nr)
|| fin_verkoopfactuur_c5
|| '-1-'
|| fin_verkoopfactuur_c3
|| REPLACE (fin_verkoopfactuur_omschr, ',', '')
|| prs_kostensoort_oms
vk_detailgroep,
-- relevante gegevens uit financieel-inkoopfacturen
vf.fin_verkoopfactuur_n4, -- inkoopfactuur_nr
f.fin_factuur_nr, -- inkoopfactuur_nr_cred
f.fin_factuur_datum,
-- relevante gegevens uit verkoopfactuur - header
vf.prs_debiteur_naam,
vf.prs_debiteur_naam
|| DECODE (
vf.fin_verkoopfactuur_c8,
'PROJECT', '',
DECODE (fin_verkoopfactuur_c5,
NULL, NULL,
' ' || fin_verkoopfactuur_c5))
verkoopfactuur_ref,
vf.fin_verkoopfactuur_c6
verkoopfactuur_po,
vf.prs_kostensoortgrp_oms,
vf.fin_verkoopfactuur_maand,
-- relevante gegevens uit verkoopfactuur - details
vf.fin_verkoopfactuur_id,
vf.fin_verkoopfactuur_xmlnode
verplichting_type,
vf.prs_kostensoort_oms,
vf.fin_verkoopfactuur_omschr,
vf.fin_btwtabelwaarde_code,
vf.fin_verkoopfactuur_bedrag,
vf.prs_kostenplaats_nr,
vf.fin_verkoopfactuur_c1,
f.opdracht_id
verplichting_ref,
-- overige verplichtings-gegevens
DECODE (vf.fin_verkoopfactuur_xmlnode,
'opdracht', o.mld_opdr_datumbegin,
'contract', c.cnt_contract_looptijd_van,
'bestelopdr', b.bes_bestelopdr_datum,
NULL)
opdracht_begindatum,
DECODE (vf.fin_verkoopfactuur_xmlnode,
'opdracht', o.mld_opdr_einddatum,
'contract', c.cnt_contract_looptijd_tot,
'bestelopdr', b.bes_bestelopdr_leverdatum,
NULL)
opdracht_einddatum,
DECODE (vf.fin_verkoopfactuur_xmlnode,
'opdracht', o.mld_opdr_omschrijving,
'contract', DECODE (c.cnt_contract_document, NULL, c.cnt_contract_omschrijving, c.cnt_contract_omschrijving || CHR(13) || c.cnt_contract_document) ,
'bestelopdr', 'levering',
NULL)
opdracht_omschrijving,
DECODE (vf.fin_verkoopfactuur_xmlnode,
'opdracht', mp.mld_stdmelding_omschrijving,
'contract', c.cnt_contract_omschrijving,
'bestelopdr', 'levering',
NULL)
bron_omschrijving,
COALESCE (cb.prs_bedrijf_naam,
ob.prs_bedrijf_naam,
bb.prs_bedrijf_naam,
'onbekend')
leverancier,
COALESCE (vf.fin_verkoopfactuur_c7, '001')
line_item, -- line-item uit po-tabel
COALESCE (cp.alg_district_omschrijving,
mp.alg_district_omschrijving,
bp.alg_district_omschrijving,
'onbekend')
district,
COALESCE (cp.alg_locatie_omschrijving,
mp.alg_locatie_omschrijving,
bp.alg_locatie_omschrijving,
'onbekend')
locatie,
COALESCE (cp.alg_gebouw_code,
mp.alg_gebouw_code,
bp.alg_gebouw_code,
NULL)
gebouw_code,
vf.prs_kostensoort_oms,
vf.prs_kostensoort_opmerking,
f.prs_kostenplaats_nr
prs_kostenplaats_nr_v,
f.prs_kostenplaats_omschrijving,
COALESCE (cp.prs_perslid_naam_full,
mp.prs_perslid_naam_full,
bp.prs_perslid_naam_full,
NULL)
prs_perslid_naam_full,
COALESCE (cb.prs_relatietype,
ob.prs_relatietype,
bb.prs_relatietype,
'onbekend')
relatie_type,
aaxx_get_verkoop_btw_perc(vf.fin_btwtabelwaarde_code)
btw_percentage,
TO_CHAR (
(SELECT DISTINCT COALESCE (mld_kenmerkopdr_waarde, '')
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND k.mld_kenmerk_key = ko.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND ko.mld_kenmerkopdr_verwijder IS NULL
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_omschrijving =
'Ordernummer klant'))
ordernummer_klant_opdr
FROM fin_verkoopfactuur vf,
( SELECT fin_factuur_key,
opdracht_id,
fin_factuur_nr,
fin_factuur_datum,
kp.prs_kostenplaats_nr,
kp.prs_kostenplaats_omschrijving,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
v.prs_kostenplaatsgrp_key
FROM aaxx_v_factuur_gegevens v, prs_kostenplaats kp
WHERE v.prs_kostenplaats_key = kp.prs_kostenplaats_key
GROUP BY fin_factuur_key,
opdracht_id,
fin_factuur_nr,
fin_factuur_datum,
kp.prs_kostenplaats_nr,
kp.prs_kostenplaats_omschrijving,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
v.prs_kostenplaatsgrp_key) f,
mld_opdr o,
cnt_contract c,
bes_bestelopdr b,
(SELECT m.mld_melding_key,
(SELECT v.alg_gebouw_code
FROM alg_v_allonrgoed_gegevens v
WHERE v.alg_onroerendgoed_keys =
m.mld_alg_onroerendgoed_keys)
alg_gebouw_code,
l.alg_locatie_omschrijving,
d.alg_district_omschrijving,
prs_perslid_naam_full,
sm.mld_stdmelding_omschrijving
FROM mld_melding m,
mld_stdmelding sm,
alg_locatie l,
alg_district d,
prs_v_perslid_fullnames v --, aaxx_v_dwh_prs_bedrijf vb
WHERE m.mld_alg_locatie_key = l.alg_locatie_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND l.alg_district_key = d.alg_district_key
AND m.prs_perslid_key = v.prs_perslid_key) mp,
(SELECT cnt_contract_key,
ag.alg_gebouw_code,
ag.alg_gebouw_key,
ag.alg_gebouw_naam,
ag.alg_locatie_key,
l.alg_locatie_omschrijving,
d.alg_district_omschrijving,
'Heyday' prs_perslid_naam_full -- keuze om altijd met heyday te vullen
FROM ( SELECT cnt_contract_key,
MIN (cp.cnt_alg_plaats_key) cnt_alg_plaats_key
FROM cnt_contract_plaats cp
WHERE cp.cnt_contract_plaats_verwijder IS NULL
AND cp.cnt_alg_plaats_code = 'G'
GROUP BY cnt_contract_key) cp,
alg_gebouw ag,
alg_locatie l,
alg_district d
WHERE cp.cnt_alg_plaats_key = ag.alg_gebouw_key
AND ag.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key) cp,
( SELECT v.bes_bestelopdr_key,
v.mld_adres_key_lev,
l.alg_locatie_omschrijving,
NULL alg_gebouw_code,
d.alg_district_omschrijving,
prs_perslid_naam_full
FROM aaxx_v_bestelgegevens v,
bes_bestelopdr bo,
prs_v_perslid_fullnames v,
mld_adres ad,
alg_locatie l,
alg_district d
WHERE v.mld_adres_key_lev = ad.mld_adres_key
AND ad.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND v.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bo.prs_perslid_key = v.prs_perslid_key
GROUP BY v.bes_bestelopdr_key,
v.mld_adres_key_lev,
l.alg_locatie_omschrijving,
d.alg_district_omschrijving,
prs_perslid_naam_full) bp,
(SELECT c.cnt_contract_key, v.prs_bedrijf_naam, v.prs_relatietype
FROM cnt_contract c, aaxx_v_dwh_prs_bedrijf v
WHERE c.cnt_prs_bedrijf_key = v.prs_bedrijf_key) cb,
(SELECT o.mld_opdr_key,
v.prs_bedrijf_naam,
COALESCE (pr.mld_project_voorwaarden, v.prs_relatietype) -- Voor PR-meldingen is kenmerkveld leading voor contracttype
prs_relatietype
FROM mld_opdr o,
aaxx_v_dwh_prs_bedrijf v,
aaxx_v_projectorders_bron pr
WHERE o.mld_uitvoerende_keys = v.prs_bedrijf_key
AND o.mld_opdr_key = pr.mld_opdr_key(+)) ob,
(SELECT b.bes_bestelopdr_key,
v.prs_bedrijf_naam,
v.prs_relatietype
FROM bes_bestelopdr b, aaxx_v_dwh_prs_bedrijf v
WHERE b.prs_bedrijf_key = v.prs_bedrijf_key) bb
WHERE vf.fin_verkoopfactuur_n4 = f.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.mld_melding_key = mp.mld_melding_key(+)
AND o.mld_opdr_key = ob.mld_opdr_key(+)
AND f.cnt_contract_key = c.cnt_contract_key(+)
AND c.cnt_contract_key = cp.cnt_contract_key(+)
AND c.cnt_contract_key = cb.cnt_contract_key(+)
AND f.bes_bestelopdr_key = b.bes_bestelopdr_key(+)
AND b.bes_bestelopdr_key = bp.bes_bestelopdr_key(+)
AND b.bes_bestelopdr_key = bb.bes_bestelopdr_key(+) ;
CREATE OR REPLACE VIEW aaxx_v_fin_verkooprun_detail_1
(
verkooprun,
soort,
subaccount,
verkooprun_datum,
groepering,
positie,
debiteur,
kolom_1,
kolom_2,
kolom_3,
kolom_4,
kolom_5,
kolom_6, -- bedragen (ex btw)
kolom_7, -- detail inkoopfactuurnr
kolom_8, -- detail inkoopfactuurnr_lev,
kolom_9, -- detail leverancier
kolom_10, -- factuurdatum
kolom_11, -- line-item
kolom_12, -- district
kolom_13, -- locatie en gebouw_code
kolom_14, -- bron_omschrijving (std-melding, contract)
kolom_15, -- kostensoort_opm (dienst)
kolom_16, -- kostenplaats_nr (= costcenter uit verplichting)
kolom_17, -- kostenplaats_omschrijving (= department)
kolom_18, -- reguestor (aanvrager full_naam)
kolom_19, -- relatie_type
kolom_20, -- btw_code
kolom_21, -- bedrag (incl. btw)
kolom_22 -- ordernummer klant (bij opdrachten)
)
AS
SELECT *
FROM ( -- HOOFD-GEGEVENS (kopregel verkoopfactuur)
SELECT verkooprun,
soort,
DECODE(aaxx_get_user, 'INLO', subaccount, NULL),
verkooprun_datum,
vk_hoofdgroep,
'1',
prs_debiteur_naam debiteur_naam_filter,
prs_debiteur_naam,
verkoopfactuur_ref, -- debiteurnaam + c5
verkoopfactuur_po, -- c6
prs_kostensoortgrp_oms,
fin_verkoopfactuur_maand,
SUM (fin_verkoopfactuur_bedrag) bedrag_totaal,
NULL kolom_7,
NULL kolom_8,
NULL kolom_9,
NULL kolom_10,
NULL kolom_11,
NULL kolom_12,
NULL kolom_13,
NULL kolom_14,
NULL kolom_15,
NULL kolom_16,
NULL kolom_17,
NULL kolom_18,
NULL kolom_19,
NULL kolom_20,
NULL kolom_21,
NULL kolom_22
FROM aaxx_v_fin_verkooprun_detail_0
GROUP BY verkooprun,
soort,
DECODE(aaxx_get_user, 'INLO', subaccount, NULL),
verkooprun_datum,
vk_hoofdgroep,
prs_debiteur_naam,
verkoopfactuur_ref,
verkoopfactuur_po,
prs_kostensoortgrp_oms,
fin_verkoopfactuur_maand
UNION ALL
-- ONDERLIGGENDE DETAILGEGEVENS
SELECT verkooprun,
soort,
subaccount,
verkooprun_datum,
vk_detailgroep,
'2',
prs_debiteur_naam
debiteur_naam_filter,
'',
verplichting_referentie,
opdracht_omschrijving,
prs_kostensoort_oms,
TO_CHAR (opdracht_begindatum, 'dd-mm-yyyy'),
fin_verkoopfactuur_bedrag,
inkoopfactuur_nr, -- kolom 7
inkoopfactuur_nr_cred, -- 8
leverancier, -- 9
fin_factuur_datum, -- 10
line_item,
district,
locatie || ' ' || gebouw_code,
bron_omschrijving,
-- kostensoort_oms || ' ' || kostensoort_opmerking, -- fin_client
kostensoort_opmerking, -- dienst
prs_kostenplaats_nr_v,
prs_kostenplaats_omschrijving,
prs_perslid_naam_full,
relatie_type,
btw_percentage || '%',
ROUND (
(fin_verkoopfactuur_bedrag * (100 + btw_percentage))
/ 100,
2)
bedrag_incl_btw,
ordernummer_klant_opdr
FROM aaxx_v_fin_verkooprun_detail_0) v
ORDER BY 1, 4, 5;
-------------------------------------------------------------------------------
-- EXPORTFUNCTIES DATAWAREHOUSE
-------------------------------------------------------------------------------
-- Overzicht/inzicht in de KWALITEIT van de MAREON-factuurverwerking
--- 1. Verhouding XML-PDF
--- 2. Uitval op <geen referentie herkenning> en <categroie D-facturen>
--- 3. Doorlooptijd verwerking en inzicht in de administratieve controles die lopen
-- View maakt onderdeel uit van DWH-HEYDAY. Op basis van deze view zijn in hun powerBI-tool de dashboards opgesteld voor Finance
--- Bij veranderingen in de mareon-factuurverwerking (bijv nieuwe controles) deze dwh-view ook aanpassen
CREATE OR REPLACE VIEW aaxx_v_dwh_mareon_facturatie
(
omgeving,
omgeving_subaccount, -- inlo multiclients - kpg-groepen
fin_factuur_key,
fin_factuur_datum,
referentie_soort,
referentie_ordernummer,
referentie_key,
leverancier,
controle_fina14, -- geen_referentie
controle_fina15, -- d_categorie
controle_fina21, -- factuurregel(s) niet aangemaakt
controle_fina01,
controle_fina02,
controle_fina03,
controle_fina05,
controle_fina06,
controle_fina08,
controle_fina09,
controle_fina11,
controle_fina12,
controle_fina13,
controle_fina16,
controle_fina17,
controle_fina18,
controle_fina19,
controle_fina20,
fin_factuur_aanmaak,
fin_factuur_aanmaak_week,
fin_factuur_aanmaak_maand,
fin_factuur_aanmaak_kwartaal,
fin_factuur_datum_export,
fin_factuur_verwijder,
fin_factuur_status,
fin_factuur_kwaliteit,
fin_factuur_doorlooptijd,
fin_factuur_bron_mareon_type,
fin_factuur_referentie_init,
fin_factuur_intern_bedrijf -- zie ticket AAIT#84789
)
AS
SELECT aaxx_get_user
omgeving,
CASE WHEN aaxx_get_user IN ('INLO') AND r.prs_kostenplaatsgrp_oms IS NULL
THEN aaxx_get_user || ' - subaccount onbekend'
WHEN aaxx_get_user IN ('INLO') AND r.prs_kostenplaatsgrp_oms IS NOT NULL
THEN r.prs_kostenplaatsgrp_nr || ' - ' || r.prs_kostenplaatsgrp_oms
ELSE ''
END
omgeving_subaccount,
r.fin_factuur_key,
r.fin_factuur_datum,
r.referentie_soort,
r.referentie_ordernummer,
r.referentie_key,
CASE WHEN r.referentie_soort = 'opdracht' THEN (SELECT prs_bedrijf_naam FROM mld_opdr o, prs_bedrijf b WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_opdr_key = r.referentie_key )
WHEN r.referentie_soort = 'contract' THEN (SELECT prs_bedrijf_naam FROM cnt_contract c, prs_bedrijf b WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_key = r.referentie_key )
WHEN r.referentie_soort = 'bestelling' THEN (SELECT prs_bedrijf_naam FROM bes_bestelopdr bo, prs_bedrijf b WHERE bo.prs_bedrijf_key = b.prs_bedrijf_key AND bo.bes_bestelopdr_key = r.referentie_key )
ELSE ''
END
leverancier,
rc.controle_FINA14,
rc.controle_FINA15,
rc.controle_FINA21,
rc.controle_FINA01,
rc.controle_FINA02,
rc.controle_FINA03,
rc.controle_FINA05,
rc.controle_FINA06,
rc.controle_FINA08,
rc.controle_FINA09,
rc.controle_FINA11,
rc.controle_FINA12,
rc.controle_FINA13,
rc.controle_FINA16,
rc.controle_FINA17,
rc.controle_FINA18,
rc.controle_FINA19,
rc.controle_FINA20,
r.fin_factuur_aanmaak,
CASE WHEN LENGTH(TO_CHAR (r.fin_factuur_aanmaak, 'ww')) = 1 THEN TO_CHAR(TO_NUMBER (TO_CHAR (r.fin_factuur_aanmaak, 'yyyy'))) || '-0' || TO_CHAR (r.fin_factuur_aanmaak, 'ww')
ELSE TO_CHAR(TO_NUMBER (TO_CHAR (r.fin_factuur_aanmaak, 'yyyy'))) || '-' || TO_CHAR (r.fin_factuur_aanmaak, 'ww')
END
periode_week,
CASE WHEN LENGTH(TO_CHAR (r.fin_factuur_aanmaak, 'mm')) = 1 THEN TO_CHAR(TO_NUMBER (TO_CHAR (r.fin_factuur_aanmaak, 'yyyy'))) || '-0' || TO_CHAR (r.fin_factuur_aanmaak, 'mm')
ELSE TO_CHAR(TO_NUMBER (TO_CHAR (r.fin_factuur_aanmaak, 'yyyy'))) || '-' || TO_CHAR (r.fin_factuur_aanmaak, 'mm')
END
periode_maand,
TO_CHAR (ADD_MONTHS (r.fin_factuur_aanmaak, 1), 'yyyy')
|| '-' || TRUNC( (TO_NUMBER (TO_CHAR (ADD_MONTHS (r.fin_factuur_aanmaak, 1), 'mm'))
+ 2)
/ 3)
periode_kwartaal,
r.fin_factuur_datum_export,
CASE WHEN r.fin_factuur_verwijder IS NULL THEN '0' ELSE '1' END
fin_factuur_verwijder,
r.fin_factuur_status,
CASE WHEN rc.controle_FINA14 = 'ja' OR rc.controle_FINA15 = 'ja' OR rc.controle_FINA21 = 'ja'
THEN '0 - incompleet'
WHEN rc.controle_FINA14 = 'nee' AND rc.controle_FINA15 = 'nee' AND rc.controle_FINA21 = 'nee' AND
(
rc.controle_FINA01 = 'ja' OR rc.controle_FINA02 = 'ja' OR rc.controle_FINA03 = 'ja' OR rc.controle_FINA05 = 'ja' OR rc.controle_FINA06 = 'ja'
OR rc.controle_FINA08 = 'ja' OR rc.controle_FINA09 = 'ja' OR rc.controle_FINA11 = 'ja' OR rc.controle_FINA12 = 'ja' OR rc.controle_FINA13 = 'ja'
OR rc.controle_FINA16 = 'ja' OR rc.controle_FINA17 = 'ja' OR rc.controle_FINA18 = 'ja' OR rc.controle_FINA19 = 'ja' OR rc.controle_FINA20 = 'ja'
)
THEN '1 - ok, met admin-controle(s)'
WHEN rc.controle_FINA14 = 'nee' AND rc.controle_FINA15 = 'nee' AND rc.controle_FINA21 = 'nee'
AND rc.controle_FINA01 = 'nee' AND rc.controle_FINA02 = 'nee' AND rc.controle_FINA03 = 'nee' AND rc.controle_FINA05 = 'nee' AND rc.controle_FINA06 = 'nee'
AND rc.controle_FINA08 = 'nee' AND rc.controle_FINA09 = 'nee' AND rc.controle_FINA11 = 'nee' AND rc.controle_FINA12 = 'nee' AND rc.controle_FINA13 = 'nee'
AND rc.controle_FINA16 = 'nee' AND rc.controle_FINA17 = 'nee' AND rc.controle_FINA18 = 'nee' AND rc.controle_FINA19 = 'nee' AND rc.controle_FINA20 = 'nee'
THEN '2 - ok, zonder admin-controle(s)'
END
fin_factuur_kwaliteit,
CASE WHEN r.fin_factuur_datum_export IS NOT NULL THEN ROUND(r.fin_factuur_datum_export-r.fin_factuur_aanmaak,2) ELSE NULL END
fin_factuur_doorlooptijd,
r.mareon_bron,
r.fin_factuur_referentie_init,
r.fin_factuur_intern_bedrijf
FROM (SELECT f.fin_factuur_key,
f.fin_factuur_datum,
ff.prs_kostenplaatsgrp_nr,
ff.prs_kostenplaatsgrp_oms,
CASE WHEN f.opdr_id IS NOT NULL THEN 'opdracht'
WHEN f.contract_id IS NOT NULL THEN 'contract'
WHEN f.bestel_id IS NOT NULL THEN 'bestelling'
ELSE ''
END
referentie_soort,
CASE WHEN f.opdr_id IS NOT NULL THEN (SELECT mld_opdr_key FROM fin_factuur WHERE fin_factuur_key = f.fin_factuur_key)
WHEN f.contract_id IS NOT NULL THEN (SELECT cnt_contract_key FROM fin_factuur WHERE fin_factuur_key = f.fin_factuur_key)
WHEN f.bestel_id IS NOT NULL THEN (SELECT bes_bestelopdr_key FROM fin_factuur WHERE fin_factuur_key = f.fin_factuur_key)
ELSE NULL
END
referentie_key,
COALESCE (f.opdr_id, f.contract_id, f.bestel_id)
referentie_ordernummer,
f.fin_factuur_aanmaak,
f.fin_factuur_datum_export,
f.fin_factuur_verwijder,
f.fin_factuur_status,
kw.mareon_bron,
f.fin_factuur_opmerking,
CASE WHEN INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden (none)')>0 OR INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden') = 0
THEN 'geen referentie uit mareon gekregen'
WHEN INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden (none)')=0 OR INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden') > 0
THEN TRIM(SUBSTR(f.fin_factuur_opmerking, INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden')+LENGTH('Referentienr: is niet gevonden')+2,
INSTR(SUBSTR(f.fin_factuur_opmerking, INSTR(f.fin_factuur_opmerking, 'Referentienr: is niet gevonden') + LENGTH('Referentienr: is niet gevonden')+2), ')')-1 -- lengte tot waar tekst getoond moet worden
)
)
ELSE ''
END
fin_factuur_referentie_init, -- Wordt meegegeven vanuit mareon in het opmerkingsveld
f.fin_factuur_intern_bedrijf
FROM aaxx_v_dwh_fin_factuur f,
( SELECT ff.fin_factuur_key,
kpg.prs_kostenplaatsgrp_nr,
kpg.prs_kostenplaatsgrp_oms
FROM aaxx_v_factuur_gegevens ff,
prs_kostenplaatsgrp kpg
WHERE ff.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key (+)
GROUP BY ff.fin_factuur_key,
kpg.prs_kostenplaatsgrp_nr,
kpg.prs_kostenplaatsgrp_oms) ff,
(SELECT km.fin_factuur_key,
km.fin_kenmerkfactuur_waarde mareon_bron
FROM fin_kenmerkfactuur km, fin_kenmerk k
WHERE km.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'MAREON_BRON') kw
WHERE f.fin_factuur_key = ff.fin_factuur_key(+)
AND f.fin_factuur_bron_mareon = 'mareon'
AND f.fin_factuur_key = kw.fin_factuur_key(+)
GROUP BY f.fin_factuur_key, f.fin_factuur_datum, ff.prs_kostenplaatsgrp_nr, ff.prs_kostenplaatsgrp_oms, f.opdr_id, f.contract_id, f.bestel_id, f.fin_factuur_aanmaak, f.fin_factuur_datum_export, f.fin_factuur_verwijder, f.fin_factuur_status, kw.mareon_bron, f.fin_factuur_opmerking, f.fin_factuur_intern_bedrijf
) r, -- resultaat mareon-facturen
(SELECT f.fin_factuur_key,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Factuur incompleet i.v.m. ontbrekende orderreferentie (vanuit scanning)' -- FINA14
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA14,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Betreft D-categorie factuur!' -- FINA15
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA15,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Factuurregels niet (allemaal) aangemaakt' -- FINA21
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA21,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Deze factuur is ingeboekt terwijl de Opdracht al op VERWERKT staat' -- FINA01
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA01,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Hetzelfde factuur-nummer is al eerder geregistreerd op deze Opdracht' -- FINA02
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA02,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Bedrag van gekoppelde verplichting is 0,- euro'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA03,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Credit geboekt op Opdracht/Bestelling'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA05,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Credit geboekt op Contract in voorgaande periode'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA06,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Betreft factuur op Contract uit vorig boekjaar'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA08,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Contract is op factuur zonder versie-nummer weergegeven; hoogste versienr is gekoppeld'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA09,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Dit betreft een verzamelfactuur'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA11,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - PDF opslaan voor SABIC GENK'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA12,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Contract CF en 90% al gefactureerd in voorgaande periode'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA13,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Leveranciersnummer ontbreekt op leverancierskaart'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA16,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Contract met gebroken boekjaar (check verdeelperiode)'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA17,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - PDF factuur doorzetten naar klant'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA18,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Factuur op opdracht met 0-reden'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA19,
CASE WHEN (SELECT ft.fac_tracking_key
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_tracking_oms = 'CONTROLE - Factuur op contract met onjuiste scoping'
AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINUPD'
AND ft.fac_tracking_refkey = f.fin_factuur_key) IS NULL
THEN 'nee'
ELSE 'ja'
END
controle_FINA20
FROM fin_factuur f
) rc -- resultaat controles
WHERE r.fin_factuur_key = rc.fin_factuur_key ;
-------------------------------------------------------------------------------
-- GRANTS naar AAFM database.
-------------------------------------------------------------------------------
GRANT SELECT ON aaxx_v_dwh_mareon_facturatie TO aafm;
------ 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