Files
Customer/VBXX/vbxx.sql
Arthur Egberink be4223e938 YASK#91270 Aanpassing proforma rapportage
YAXX#88771 Exact koppeling

svn path=/Customer/trunk/; revision=71036
2025-11-24 10:37:41 +00:00

7614 lines
337 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for all Vebego customers
DEFINE thisfile = 'VBXX.SQL'
DEFINE dbuser = 'VBXX'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE VBXX
AS
FUNCTION get_user RETURN VARCHAR2;
FUNCTION get_kenmerk_key (p_module IN VARCHAR2,
p_refkey IN NUMBER,
p_kenmerk_code IN VARCHAR2,
p_niveau IN VARCHAR2 DEFAULT NULL) RETURN NUMBER;
PROCEDURE set_opslag_perc (p_opdr_key IN NUMBER);
PROCEDURE set_opslag_perc_cat (p_rsv_artikel_key IN NUMBER);
FUNCTION get_opslag_perc (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2;
FUNCTION bepaal_fin_district (p_fin_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_fin_regio (p_fin_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_opdr_district (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_opdr_regio (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_fin_gebouw (p_fin_key IN NUMBER)
RETURN NUMBER;
PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER);
PROCEDURE update_verkoopprijs;
PROCEDURE fin_set_approver (p_factuur_key IN NUMBER);
PROCEDURE set_mandaatbedrag (p_opdr_key IN NUMBER);
FUNCTION vk_bepaal_maandbedrag (p_startdienstverlening IN DATE,
p_startverrekening IN DATE,
p_offset IN NUMBER,
p_maand IN NUMBER,
p_bedrag IN NUMBER)
RETURN NUMBER;
PROCEDURE add_xml_row (p_bestand IN VARCHAR2,
p_regel IN VARCHAR2);
PROCEDURE add_xml_element (p_bestand IN VARCHAR2,
p_tag IN VARCHAR2,
p_value IN VARCHAR2);
FUNCTION matchfactuur (pfactuur_key IN NUMBER)
RETURN NUMBER;
PROCEDURE checkopdracht (p_opdr_key IN NUMBER);
FUNCTION get_fin_exact_signature (p_factuurregel_key IN NUMBER, p_prefix IN VARCHAR2)
RETURN VARCHAR2;
PROCEDURE set_fin_exact_signature (p_factuurregel_key IN NUMBER, p_prefix IN VARCHAR2);
FUNCTION check_fin_exact_signature (p_crdnr IN VARCHAR2,
p_factuur_nr IN VARCHAR2,
p_n_fact_regels IN NUMBER)
RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY VBXX
AS
FUNCTION get_user RETURN VARCHAR2
AS
BEGIN
RETURN SUBSTR (USER, 1, 4);
END;
FUNCTION get_kenmerk_key (p_module IN VARCHAR2,
p_refkey IN NUMBER,
p_kenmerk_code IN VARCHAR2,
p_niveau IN VARCHAR2 DEFAULT NULL) RETURN NUMBER
AS
kkey NUMBER(10);
BEGIN
CASE
WHEN p_module = 'OPD'
THEN
SELECT MAX(mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k, mld_opdr o
WHERE k.mld_kenmerk_code LIKE p_kenmerk_code
AND o.mld_typeopdr_key = k.mld_typeopdr_key
AND o.mld_opdr_key = p_refkey;
IF kkey IS NULL
THEN
SELECT MAX(mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code LIKE p_kenmerk_code
AND o.mld_typeopdr_key = k.mld_typeopdr_key
AND o.mld_opdr_key = p_refkey;
END IF;
WHEN p_module = 'MLD'
THEN
-- T type vakgroep
-- D vakgroep
-- S stdmelding
-- A alle
SELECT MAX(mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k, mld_melding m, mld_stdmelding std, mld_discipline d
WHERE m.mld_melding_key = p_refkey
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND k.mld_kenmerk_code LIKE p_kenmerk_code
AND ( k.mld_kenmerk_niveau = 'A'
OR (k.mld_kenmerk_niveau = 'T' AND k.mld_stdmelding_key = d.ins_srtdiscipline_key)
OR (k.mld_kenmerk_niveau = 'D' AND k.mld_stdmelding_key = d.ins_discipline_key)
OR (k.mld_kenmerk_niveau = 'S' AND k.mld_stdmelding_key = std.mld_stdmelding_key)
);
IF kkey IS NOT NULL
THEN
RETURN kkey;
END IF;
SELECT MAX(mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_melding m, mld_stdmelding std, mld_discipline d
WHERE m.mld_melding_key = p_refkey
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code LIKE p_kenmerk_code
AND ( k.mld_kenmerk_niveau = 'A'
OR (k.mld_kenmerk_niveau = 'T' AND k.mld_stdmelding_key = d.ins_srtdiscipline_key)
OR (k.mld_kenmerk_niveau = 'D' AND k.mld_stdmelding_key = d.ins_discipline_key)
OR (k.mld_kenmerk_niveau = 'S' AND k.mld_stdmelding_key = std.mld_stdmelding_key)
);
WHEN p_module = 'ALG'
THEN
SELECT alg_kenmerk_key
INTO kkey
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = p_kenmerk_code;
WHEN p_module = 'FIN'
THEN
SELECT fin_kenmerk_key
INTO kkey
FROM fin_kenmerk k
WHERE k.fin_kenmerk_code = p_kenmerk_code;
ELSE
kkey := NULL;
END CASE;
RETURN kkey;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN NULL;
END;
PROCEDURE set_opslag_perc (p_opdr_key IN NUMBER)
AS
v_geen_opslag NUMBER;
v_opslag NUMBER;
v_opdr_mat NUMBER;
v_locatie_key ALG_LOCATIE.ALG_LOCATIE_KEY%TYPE;
v_district_key ALG_DISTRICT.ALG_DISTRICT_KEY%TYPE;
v_regio_key ALG_REGIO.ALG_REGIO_KEY%TYPE;
v_srtdiscipline_key INS_SRTDISCIPLINE.INS_SRTDISCIPLINE_KEY%TYPE;
v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE;
v_kostensoort_key PRS_KOSTENSOORT.PRS_KOSTENSOORT_KEY%TYPE;
v_bedrijf_key MLD_OPDR.MLD_UITVOERENDE_KEYS%TYPE;
v_melding_datum MLD_MELDING.MLD_MELDING_DATUM%TYPE;
v_opslag_kenmerk_key MLD_KENMERK.MLD_KENMERK_KEY%TYPE;
v_kenmerkopdr_key MLD_KENMERKOPDR.MLD_KENMERKOPDR_KEY%TYPE;
BEGIN
-- Bepaal de key van het kenmerk opslagpercentage
SELECT mld_kenmerk_key
INTO v_opslag_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'OPSLAGPERC'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
IF v_opslag_kenmerk_key IS NULL
THEN
-- Dit opdrachttype kent geen opslagpercentage.
RETURN;
END IF;
-- Als het verkooppercentage al is ingevuld gaan we dit niet meer aanpassen.
SELECT MAX(mld_kenmerkopdr_key)
INTO v_kenmerkopdr_key
FROM mld_kenmerkopdr ko
WHERE ko.mld_kenmerk_key = v_opslag_kenmerk_key
AND ko.mld_opdr_key = p_opdr_key;
IF v_kenmerkopdr_key IS NOT NULL
THEN
-- percentage is al eerder bepaald. Dan kan het ook door de behandelaar aangepast zijn.
-- Dan gaan we het niet meer aanpassen.
RETURN;
END IF;
-- In het geval er materiaal regels aan de opdracht zitten rekenen we geen opslag.
-- De materiaal regels bevatten namelijk een prijs incl opslag.
-- Als de kostensoort bij de opdracht ingevuld is dan is dit de waarde die we gebruiken.
SELECT count(*)
INTO v_opdr_mat
FROM mld_opdr_materiaal om
WHERE om.mld_opdr_key = p_opdr_key;
IF v_opdr_mat > 0
THEN
RETURN;
END IF;
SELECT di.alg_regio_key,
di.alg_district_key,
m.mld_alg_locatie_key,
sd.ins_srtdiscipline_key,
d.ins_discipline_key,
COALESCE(o.prs_kostensoort_key, std.prs_kostensoort_key),
mld_melding_datum,
mld_uitvoerende_keys
INTO v_regio_key, v_district_key, v_locatie_key, v_srtdiscipline_key, v_discipline_key, v_kostensoort_key, v_melding_datum, v_bedrijf_key
FROM mld_melding m,
mld_opdr o,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
alg_locatie l,
alg_district di
WHERE 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_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = di.alg_district_key
AND o.mld_opdr_key = p_opdr_key;
-- Controleer of het leveranciersnummer is ingevuld in de opslag tabel. Dan
-- gelden deze als eerste.
-- Controleer of de NEN code en bedrijf is ingevuld in de opslag tabel. Dan
-- geldt deze altijd.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key = v_bedrijf_key
AND prs_kostensoort_key = v_kostensoort_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- Controleer of de vakgroep icm vakgroeptype en bedrijf is ingevuld in de opslag tabel.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key = v_bedrijf_key
AND ins_discipline_key = v_discipline_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- alleen het bedrijf is ingevuld.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key = v_bedrijf_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- bedrijf is niet gevuld
-- Controleer of de NEN code is ingevuld in de opslag tabel. Dan
-- geldt deze altijd.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key IS NULL
AND prs_kostensoort_key = v_kostensoort_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- Controleer of de vakgroep icm vakgroeptype is ingevuld in de opslag tabel.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key IS NULL
AND ins_discipline_key = v_discipline_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- Controleer of de vakgroeptype is ingevuld in de opslag tabel.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key IS NULL
AND ins_srtdiscipline_key = v_srtdiscipline_key
AND ins_discipline_key IS NULL
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
-- Dan houden we nog <20><>n optie over en dat is een lege regel.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND prs_bedrijf_key IS NULL
AND ins_srtdiscipline_key IS NULL
AND ins_discipline_key IS NULL
AND prs_kostensoort_key IS NULL
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag);
RETURN;
END IF;
RETURN;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN;
END;
PROCEDURE set_opslag_perc_cat (p_rsv_artikel_key IN NUMBER)
AS
v_geen_opslag NUMBER;
v_opslag NUMBER;
v_regio_key ALG_REGIO.ALG_REGIO_KEY%TYPE;
v_district_key ALG_DISTRICT.ALG_DISTRICT_KEY%TYPE;
v_locatie_key ALG_LOCATIE.ALG_LOCATIE_KEY%TYPE;
v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE;
v_rsv_ruimte_van RES_RSV_RUIMTE.RES_RSV_RUIMTE_VAN%TYPE;
v_opslag_kenmerk_key RES_KENMERK.RES_KENMERK_KEY%TYPE;
PROCEDURE upsertkenmerk (p_kenmerk_key IN NUMBER, p_opslag IN NUMBER)
AS
v_kenmerkartikel_key RES_KENMERKARTIKEL.RES_KENMERKARTIKEL_KEY%TYPE;
BEGIN
SELECT res_kenmerkartikel_key
INTO v_kenmerkartikel_key
FROM res_kenmerkartikel
WHERE res_kenmerkartikel_verwijder IS NULL
AND res_kenmerk_key = p_kenmerk_key
AND res_rsv_artikel_key = p_rsv_artikel_key;
UPDATE res_kenmerkartikel
SET res_kenmerkartikel_waarde = TO_CHAR(p_opslag)
WHERE res_kenmerkartikel_key = v_kenmerkartikel_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO res_kenmerkartikel (res_rsv_artikel_key, res_kenmerk_key, res_kenmerkartikel_waarde)
VALUES (p_rsv_artikel_key, p_kenmerk_key, TO_CHAR(p_opslag));
END;
BEGIN
-- Bepaal de locatie en de catalogus
SELECT ab.alg_regio_key, ab.alg_district_key, ab.alg_locatie_key, ra.res_discipline_key, rrr.res_rsv_ruimte_van
INTO v_regio_key, v_district_key, v_locatie_key, v_discipline_key, v_rsv_ruimte_van
FROM res_rsv_artikel rra,
res_artikel ra,
res_rsv_ruimte rrr,
res_v_rsv_ruimte_2_alg_ruimte r2a,
alg_v_onrgoed_boom ab
WHERE rra.res_artikel_key = ra.res_artikel_key
AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
AND ab.alg_ruimte_key = COALESCE(rrr.alg_ruimte_key, r2a.alg_ruimte_key)
AND rra.res_rsv_artikel_key = p_rsv_artikel_key;
BEGIN
SELECT res_kenmerk_key
INTO v_opslag_kenmerk_key
FROM res_kenmerk
WHERE res_discipline_key = v_discipline_key
AND res_kenmerk_niveau = 'D'
AND res_kenmerk_code = 'OPSLAGPERC';
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_opslag_kenmerk_key := NULL;
END;
-- Controleer of het locatienummer en de catalogus is ingevuld in de opslag tabel. Dan
-- geldt deze als eerste.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE (alg_locatie_key = v_locatie_key
OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key)
OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key)
)
AND ins_discipline_key = v_discipline_key
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_rsv_ruimte_van >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van < einddatum+1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = (1 + v_opslag / 100) * res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key;
upsertkenmerk (v_opslag_kenmerk_key, v_opslag);
RETURN;
END IF;
-- Controleer of de catalogus is ingevuld in de opslag tabel.
SELECT MAX(opslag)
INTO v_opslag
FROM vbxx_imp_opslag
WHERE ins_discipline_key = v_discipline_key
AND alg_locatie_key IS NULL
AND ( (ingangsdatum IS NULL AND einddatum IS NULL)
OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_rsv_ruimte_van >= ingangsdatum)
OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van < einddatum+1)
OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van BETWEEN ingangsdatum AND einddatum+1)
)
AND imp_opslag_verwijder IS NULL;
IF v_opslag IS NOT NULL
THEN
UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = (1 + v_opslag / 100) * res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key;
upsertkenmerk (v_opslag_kenmerk_key, v_opslag);
RETURN;
END IF;
RETURN;
EXCEPTION WHEN NO_DATA_FOUND
THEN
UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key;
RETURN;
END;
FUNCTION get_opslag_perc (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_opslag_kenmerk_key NUMBER;
v_opslag NUMBER(5,2);
BEGIN
SELECT mld_kenmerk_key
INTO v_opslag_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'OPSLAGPERC'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
v_opslag := COALESCE(flx.getflex ('OPD', v_opslag_kenmerk_key, p_opdr_key),0);
RETURN v_opslag;
END;
-- Gaan we deze nog gebruiken?
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2
AS
v_geen_opslag NUMBER;
v_srtopslag ALG_KENMERK.ALG_KENMERK_OMSCHRIJVING%TYPE;
v_locatie_key ALG_LOCATIE.ALG_LOCATIE_KEY%TYPE;
v_srtdiscipline_key INS_SRTDISCIPLINE.INS_SRTDISCIPLINE_KEY%TYPE;
v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE;
v_kostensoort_key PRS_KOSTENSOORT.PRS_KOSTENSOORT_KEY%TYPE;
BEGIN
SELECT alg_kenmerk_omschrijving
INTO v_srtopslag
FROM alg_onrgoedkenmerk aogk,
alg_kenmerk ak,
mld_melding m,
mld_opdr o,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE 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 aogk.alg_kenmerk_key = ak.alg_kenmerk_key
AND aogk.alg_kenmerk_key =
DECODE (sd.ins_srtdiscipline_omschrijving, 'Projecten', 1002,
DECODE (d.ins_discipline_omschrijving, 'Schoonmaak', 1003, 1000))
AND aogk.alg_onrgoed_key = m.mld_alg_locatie_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_opdr_key = p_opdr_key;
RETURN v_srtopslag;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN NULL;
END;
-- deze functie bepaald aan de hand van de factuur_key het district en daarmee de administratie
-- waaronder deze factuur geboekt gaat worden.
FUNCTION bepaal_fin_district (p_fin_key IN NUMBER)
RETURN NUMBER
AS
v_district_key NUMBER;
BEGIN
SELECT MIN(l.alg_district_key)
INTO v_district_key
FROM fin_factuur f, mld_opdr o, mld_melding m, alg_locatie l
WHERE f.fin_factuur_key = p_fin_key
AND f.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
IF v_district_key IS NOT NULL
THEN
RETURN v_district_key;
END IF;
SELECT MIN (alg_district_key)
INTO v_district_key
FROM fin_factuur f,
cnt_contract_plaats cp,
alg_locatie l
WHERE f.fin_factuur_key = p_fin_key
AND f.cnt_contract_key = cp.cnt_contract_key
AND ( cp.cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key IN (SELECT alg_gebouw_key
FROM alg_gebouw g
WHERE g.alg_locatie_key = l.alg_locatie_key)
OR (cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = l.alg_locatie_key));
RETURN v_district_key;
END;
-- deze functie bepaald aan de hand van de factuur_key de regio en daarmee de administratie
-- waaronder deze factuur geboekt gaat worden.
FUNCTION bepaal_fin_regio (p_fin_key IN NUMBER)
RETURN NUMBER
AS
v_regio_key NUMBER;
BEGIN
SELECT MIN(alg_regio_key)
INTO v_regio_key
FROM alg_district
WHERE alg_district_key = bepaal_fin_district(p_fin_key);
RETURN v_regio_key;
END;
-- deze functie bepaald aan de hand van de opdracht het district
FUNCTION bepaal_opdr_district (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_district_key NUMBER;
BEGIN
SELECT alg_district_key
INTO v_district_key
FROM mld_opdr o, mld_melding m, alg_locatie l
WHERE o.mld_opdr_key = p_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
RETURN v_district_key;
END;
-- deze functie bepaald aan de hand van de opdracht de regio
FUNCTION bepaal_opdr_regio (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_regio_key NUMBER;
BEGIN
SELECT alg_regio_key
INTO v_regio_key
FROM mld_opdr o, mld_melding m, alg_locatie l, alg_district d
WHERE o.mld_opdr_key = p_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key;
RETURN v_regio_key;
END;
-- deze functie bepaald aan de hand van de factuur_key het gebouw.
FUNCTION bepaal_fin_gebouw (p_fin_key IN NUMBER)
RETURN NUMBER
AS
v_gebouw_key NUMBER;
BEGIN
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM fin_factuur f, mld_opdr o, mld_melding m, alg_v_onroerendgoed aog
WHERE f.fin_factuur_key = p_fin_key
AND f.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys;
RETURN v_gebouw_key;
END;
-- Vul het kenmerk verkoopprijs (key 201) bij de opdracht
PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER)
AS
v_opdr_kosten NUMBER;
v_verkoopprijs NUMBER;
v_opslag NUMBER;
v_typeopdr_key NUMBER;
v_opslag_kenmerk_key NUMBER;
v_verkoop_kenmerk_key NUMBER;
BEGIN
-- Bepaal de key van het kenmerk opslagpercentage
SELECT mld_kenmerk_key
INTO v_opslag_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'OPSLAGPERC'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
-- Bepaal de key van het kenmerk verkoopprijs
SELECT mld_kenmerk_key
INTO v_verkoop_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'VERKOOPPRIJS'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
SELECT mld_opdr_kosten, mld_typeopdr_key
INTO v_opdr_kosten, v_typeopdr_key
FROM mld_opdr o
WHERE mld_opdr_key = p_opdr_key;
v_opslag := COALESCE(flx.getflex ('OPD', v_opslag_kenmerk_key, p_opdr_key),0);
v_verkoopprijs := v_opdr_kosten * ((100 + v_opslag) /100);
MLD.upsertopdrachtkenmerk (v_verkoop_kenmerk_key, p_opdr_key, v_verkoopprijs);
EXCEPTION WHEN NO_DATA_FOUND
THEN
-- waarschijnlijk een opdrachttype zonder verkoopprijs en/of opslagpercentage
RETURN;
END;
-- Als een opdracht de ter (her)fiattering ligt wordt afgewezen, zal de verkoopprijs al aangepast zijn. Deze
-- procedure controleert 's-nachts of er afkeuringen geweest zijn en past dan de verkoopprijs aan.
PROCEDURE update_verkoopprijs
AS
CURSOR c IS
SELECT *
FROM fac_tracking
WHERE fac_srtnotificatie_key = 99 -- ORDGNO opdracht goedkeuring is afgekeurd.
AND fac_tracking_datum > SYSDATE - 1;
BEGIN
FOR rec IN c
LOOP
BEGIN
vbxx.set_verkoopprijs (rec.fac_tracking_refkey);
END;
END LOOP;
END;
FUNCTION get_first_aut_user (p_locatie_key IN NUMBER, p_functie_code IN VARCHAR2)
RETURN number
AS
v_perslid_key NUMBER(10);
BEGIN
SELECT DISTINCT MAX(g.prs_perslid_key)
INTO v_perslid_key
FROM fac_v_webgebruiker g,
fac_functie f,
prs_perslid p,
prs_v_afdeling d
WHERE EXISTS ( SELECT 1
FROM fac_v_webgebruiker g1, fac_functie f1
WHERE g1.prs_perslid_key = p.prs_perslid_key
AND g1.fac_functie_key = f1.fac_functie_key
AND f1.fac_functie_code = 'WEB_FINGOE')
AND g.fac_functie_key = f.fac_functie_key
AND g.prs_perslid_key = p.prs_perslid_key
AND ( g.fac_gebruiker_alg_level_write = -1
OR ( g.fac_gebruiker_alg_level_write < 9
AND p_locatie_key IN (SELECT alg_locatie_key
FROM fac_v_my_locations
WHERE prs_perslid_key = p.prs_perslid_key
AND niveau = fac_gebruiker_alg_level_write)))
AND fac_functie_code = p_functie_code;
RETURN v_perslid_key;
END;
PROCEDURE fin_set_approver (p_factuur_key IN NUMBER)
AS
v_count NUMBER;
v_perslid_key_goedkeur fin_factuur.prs_perslid_key_goedkeur%TYPE;
v_factuur_statuses_key fin_factuur.fin_factuur_statuses_key%TYPE;
v_factuur_totaal fin_factuur.fin_factuur_totaal%TYPE;
v_perslid_naam_goedkeur VARCHAR2 (100);
v_locatie_key alg_locatie.alg_locatie_key%TYPE;
v_regio_key alg_regio.alg_regio_key%TYPE;
v_funccodegk_kenmerk_key fin_kenmerk.fin_kenmerk_key%TYPE;
v_kenmerk_fg alg_onrgoedkenmerk.alg_onrgoedkenmerk_waarde%TYPE;
v_factmatchmode mld_disc_params.mld_disc_params_factmatchmode%TYPE;
v_factuurappr mld_disc_params.mld_disc_params_factuurappr%TYPE;
v_geleverd NUMBER(1);
v_contract_mngr_key NUMBER(10);
v_factuur_match NUMBER(10);
v_funccodegk VARCHAR2(10);
v_new_funccodegk VARCHAR2(10);
v_ggk_bedrag NUMBER(12,2);
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_opdr_key NUMBER(10);
v_bestelopdr_key NUMBER(10);
v_contract_key NUMBER(10);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Om foutmeldingen te voorkomen controleren we eerst of er wel een verplichting gekoppeld is.
SELECT mld_opdr_key, cnt_contract_key, bes_bestelopdr_key
INTO v_opdr_key, v_contract_key, v_bestelopdr_key
FROM fin_factuur f
WHERE f.fin_factuur_key = p_factuur_key;
IF v_opdr_key IS NULL AND v_contract_key IS NULL AND v_bestelopdr_key IS NULL
THEN
RETURN;
END IF;
-- Nu bepalen we de locatie van de factuur. Adh daarvan kunnen we bepalen wie hier rechten op heeft.
-- xxx_disc_params_factuurappr = 1 factuur automatisch fiatteren als binnen
-- xxx_disc_params_factmatchmode = 2 of 3 weg matching. Contracten kent deze optie niet dus altijd 2 weg.
IF v_contract_key IS NOT NULL
THEN
v_errorhint := 'Zoek contractgegevens. Scope moet wel op gebouw staan!';
SELECT l.alg_locatie_key, d.alg_regio_key, cnt_disc_params_factuurappr, 2 cnt_disc_params_factmatchmode, 1 geleverd
INTO v_locatie_key, v_regio_key, v_factuurappr, v_factmatchmode, v_geleverd
FROM (
SELECT fc.fin_factuur_key, MIN (cs.cnt_alg_plaats_key) alg_gebouw_key, MIN(dp.cnt_disc_params_factuurappr) cnt_disc_params_factuurappr
FROM fin_factuur fc, cnt_contract_plaats cs, cnt_contract c, cnt_disc_params dp
WHERE fc.cnt_contract_key = cs.cnt_contract_key
AND fc.cnt_contract_key = c.cnt_contract_key
AND c.ins_discipline_key = dp.cnt_ins_discipline_key
AND cnt_alg_plaats_code = 'G'
AND cnt_contract_plaats_verwijder IS NULL
GROUP BY fc.fin_factuur_key
) fg,
alg_gebouw g,
alg_locatie l,
alg_district d
WHERE fg.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND fg.fin_factuur_key = p_factuur_key;
END IF;
IF v_bestelopdr_key IS NOT NULL
THEN
v_errorhint := 'Zoek bestelopdrachtgegevens.';
SELECT l.alg_locatie_key, d.alg_regio_key, bes_disc_params_factuurappr, bes_disc_params_factmatchmode, DECODE(bes_bestelopdr_status, 6, 1, 7, 1, 0) geleverd -- 6 Geleverd, 7 verwerkt
INTO v_locatie_key, v_regio_key, v_factuurappr, v_factmatchmode, v_geleverd
FROM (
SELECT fb.fin_factuur_key, MIN (g1.alg_gebouw_key) alg_gebouw_key, MIN(dp.bes_disc_params_factuurappr) bes_disc_params_factuurappr, bes_disc_params_factmatchmode, bes_bestelopdr_status
FROM fin_factuur fb,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_bestelling b,
bes_bestelopdr bo,
bes_srtdeel sd,
bes_srtgroep sg,
bes_disc_params dp,
alg_gebouw g1
WHERE fb.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND fb.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = b.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = dp.bes_ins_discipline_key
AND b.mld_adres_key_lev = g1.mld_adres_key
GROUP BY fb.fin_factuur_key, bo.bes_bestelopdr_status
) fg,
alg_gebouw g,
alg_locatie l,
alg_district d
WHERE fg.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND fg.fin_factuur_key = p_factuur_key;
END IF;
IF v_opdr_key IS NOT NULL
THEN
v_errorhint := 'Zoek opdrachtgegevens.';
SELECT l.alg_locatie_key, d.alg_regio_key, mld_disc_params_factuurappr, mld_disc_params_factmatchmode, DECODE(mld_statusopdr_key, 6, 1, 7, 1, 8, 1, 0) -- 6 afgemeld, 7 verwerkt, 8 afgerond
INTO v_locatie_key, v_regio_key, v_factuurappr, v_factmatchmode, v_geleverd
FROM (
SELECT fo.fin_factuur_key, og.alg_gebouw_key, mld_disc_params_factuurappr, mld_disc_params_factmatchmode, o1.mld_statusopdr_key
FROM fin_factuur fo,
mld_opdr o1,
mld_melding m1,
mld_stdmelding std,
mld_disc_params dp,
alg_v_allonroerendgoed og
WHERE fo.mld_opdr_key = o1.mld_opdr_key
AND o1.mld_melding_key = m1.mld_melding_key
AND m1.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
AND m1.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = dp.mld_ins_discipline_key
) fg,
alg_gebouw g,
alg_locatie l,
alg_district d
WHERE fg.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND fg.fin_factuur_key = p_factuur_key;
END IF;
v_errorhint := 'Bepaal de instelling of we gaan goedkeuren op deze locatie.';
BEGIN
SELECT FLX.getflex ('ALG',
k.alg_kenmerk_key,
v_regio_key,
'E',1)
INTO v_kenmerk_fg
FROM alg_kenmerk k
WHERE alg_kenmerk_code = 'FACT_AUTO_GOEDKEUREN';
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_kenmerk_fg := 0;
END;
v_errorhint := 'Bepaal factuurbedrag en goedkeurder.';
-- De goedkeurder gebruiken we later om te kijken of deze de factuur al heeft goedgekeurd
SELECT f.fin_factuur_statuses_key, f.fin_factuur_totaal, f.prs_perslid_key_goedkeur, f.cnt_contract_key, c.prs_perslid_key_eig
INTO v_factuur_statuses_key, v_factuur_totaal, v_perslid_key_goedkeur, v_contract_key, v_contract_mngr_key
FROM fin_factuur f, cnt_contract c
WHERE f.cnt_contract_key = c.cnt_contract_key(+)
AND fin_factuur_key = p_factuur_key;
v_factuur_match := vbxx.matchfactuur(p_factuur_key);
fac.writelog ('VBXX.fin_set_approver', 'I', 'Fact: ' || p_factuur_key || ' v_factuurappr: ' || v_factuurappr || ' v_factmatchmode: ' || v_factmatchmode || ' v_geleverd: ' || v_geleverd, NULL);
-- geen goedkeuring nodig
IF v_contract_key IS NULL AND v_kenmerk_fg = 1 AND v_factuur_match <> -1 -- Als de factuur matched en 'Facturen zonder afwijking automatisch goedkeuren' staat aan bij de regio. Contracten moeten altijd goedgekeurd worden.
THEN
IF v_factuurappr = 1 AND (v_factmatchmode = 2 OR (v_factmatchmode = 3 AND v_geleverd = 1))
THEN
-- geen goedkeuring nodig
UPDATE fin_factuur
SET fin_factuur_statuses_key = 6
WHERE fin_factuur_key = p_factuur_key;
-- Voeg tracking toe dat de factuur automatisch is goedgekeurd.
fac.trackaction('FINGOE', p_factuur_key, NULL, NULL, NULL);
RETURN;
ELSE
IF v_factuur_statuses_key = 5 -- Ter goedkeuring
THEN
-- factuur is gefiatteerd en er is geen goedkeuring nodig
UPDATE fin_factuur
SET fin_factuur_statuses_key = 6 -- Akkoord
WHERE fin_factuur_key = p_factuur_key;
-- Voeg tracking toe dat de factuur automatisch is goedgekeurd.
fac.trackaction('FINGOE', p_factuur_key, NULL, NULL, NULL);
RETURN;
ELSIF v_factuur_statuses_key = 6 -- Akkoord
THEN
-- als de status van de factuur al akkoord is dan hoeven we niets meer te doen aangezien we bij
-- de regio al bepaald hebben dat er geen goedkeuring hoeft plaats te vinden.
RETURN;
END IF;
END IF;
END IF;
-- Bij contracten gaat deze eerst langs de contract eigenaar.
-- Nu kijken we of deze wel rechten op FINGOE heeft. Anders kan deze niet de goedkeurder worden.
-- Dan volgen we maar het normale pad en moet de Facility manager goedkeuren.
IF v_contract_mngr_key IS NOT NULL
THEN
SELECT count(*)
INTO v_count
FROM fac_v_webgebruiker g, fac_functie f
WHERE g.prs_perslid_key = v_contract_mngr_key
AND g.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_FINGOE';
IF v_count = 0
THEN
v_contract_mngr_key := NULL;
END IF;
END IF;
-- Als de factuurstatus incompleet of ingevoerd is hoeven we nog niets te doen. De factuur moet eerst gefiatteerd worden door iemand
-- met FINBOF rechten.
-- Dat geldt echter niet voor contracten die goedgekeurd moeten worden. Deze worden automatisch naar status ter goedkeuring gezet
-- en de contracteigenaar moet dan als eerste goedkeuren.
IF v_factuur_statuses_key = 3 OR (v_factuur_statuses_key = 2 AND v_contract_mngr_key IS NULL) -- incompleet of ingevoerd
THEN
RETURN;
END IF;
-- Controleer of deze functionaris de factuur ook daadwerkelijk heeft goedgekeurd
v_errorhint := 'Bepaal of de factuur al goedgekeurd is.';
SELECT COUNT (*)
INTO v_count
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINGOE'
AND t.prs_perslid_key = v_perslid_key_goedkeur
AND t.fac_tracking_refkey = p_factuur_key;
v_errorhint := 'Bepaal kenmerk_key van FUNCCODEGK.';
SELECT k.fin_kenmerk_key
INTO v_funccodegk_kenmerk_key
FROM fin_kenmerk k
WHERE k.fin_kenmerk_code = 'FUNCCODEGK'
AND k.fin_kenmerk_verwijder IS NULL;
v_funccodegk := FLX.getflex ('FIN', v_funccodegk_kenmerk_key, p_factuur_key);
dbms_output.put_line ('v_funccodegk:' || v_funccodegk);
-- De contracteigenaar moet altijd als eerste de factuur goedkeuren ongeacht het bedrag. Hier gebruiken we WEB_FINGOE voor
CASE WHEN v_funccodegk IS NULL AND v_contract_mngr_key IS NOT NULL THEN v_ggk_bedrag := -10000000; v_new_funccodegk := 'WEB_FINGOE';
WHEN v_funccodegk IS NULL OR v_funccodegk = 'WEB_FINGOE' THEN v_ggk_bedrag := 15000; v_new_funccodegk := 'WEB_USER61';
WHEN v_funccodegk = 'WEB_USER61' THEN v_ggk_bedrag := 50000; v_new_funccodegk := 'WEB_USER62';
WHEN v_funccodegk = 'WEB_USER62' THEN v_ggk_bedrag := 100000; v_new_funccodegk := 'WEB_USER63';
WHEN v_funccodegk = 'WEB_USER63' THEN v_ggk_bedrag := 300000; v_new_funccodegk := 'WEB_USER64';
WHEN v_funccodegk = 'WEB_USER64' THEN v_ggk_bedrag := 10000000; v_new_funccodegk := NULL;
END CASE;
dbms_output.put_line ('v_ggk_bedrag: ' || v_ggk_bedrag);
dbms_output.put_line ('v_new_funccodegk: ' || v_new_funccodegk);
IF v_count > 0 OR v_funccodegk IS NULL
THEN
IF v_factuur_totaal > v_ggk_bedrag
THEN
-- Als het om de eerste goedkeuring op een contract gaat dan moet deze eerst naar de contracteigenaar
IF v_funccodegk IS NULL and v_contract_mngr_key IS NOT NULL
THEN
v_perslid_key_goedkeur := v_contract_mngr_key;
ELSE
-- Nu de volgende in de reeks uitnodigen
v_perslid_key_goedkeur := vbxx.get_first_aut_user(v_locatie_key, v_new_funccodegk);
END IF;
dbms_output.put_line ('v_perslid_key_goedkeur: ' || v_perslid_key_goedkeur);
v_errorhint := 'Set status en goedkeurder';
IF v_perslid_key_goedkeur IS NOT NULL
THEN
UPDATE fin_factuur
SET fin_factuur_statuses_key = 5
WHERE fin_factuur_key = p_factuur_key;
UPDATE fin_factuur
SET prs_perslid_key_goedkeur = v_perslid_key_goedkeur
WHERE fin_factuur_key = p_factuur_key;
-- We vermelden in het kenmerk wat het niveau is van de huidige goedkeuring
FLX.setflex ('FIN', v_funccodegk_kenmerk_key, p_factuur_key, v_new_funccodegk);
-- We sturen een notificatie naar de persoon die de factuur moet goedkeuren.
fac.putnotificationsrtprio(NULL, v_perslid_key_goedkeur, 'FIN2GO', p_factuur_key,
'Uw goedkeuring is vereist voor factuur '|| p_factuur_key,
NULL, NULL, NULL, NULL, 2, NULL);
END IF;
END IF; -- fin_factuur_totaal > v_ggk_bedrag
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('VBXX.fin_set_approver', 'E', v_errormsg || ' (' || p_factuur_key || ')' , v_errorhint);
END;
PROCEDURE set_mandaatbedrag (p_opdr_key IN NUMBER)
AS
v_mandaatbedrag NUMBER;
v_opdr_kosten NUMBER(10,2);
BEGIN
-- Mandaatbedrag is nu in de core opgenomen YASK#84687
RETURN;
SELECT prs_kenmerklink_waarde, o.mld_opdr_kosten
INTO v_mandaatbedrag, v_opdr_kosten
FROM prs_kenmerklink kl, prs_kenmerk k, prs_bedrijf b, mld_opdr o, mld_typeopdr ot
WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND b.prs_bedrijf_key = kl.prs_link_key
AND kl.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'MANDAATBEDRAG'
AND k.prs_kenmerk_verwijder IS NULL
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ( UPPER(ot.mld_typeopdr_omschrijving) like 'MANDAAT%' -- Mandaatopdracht
OR UPPER(ot.mld_typeopdr_omschrijving) like 'REVERSED%') -- ReversedBilling
AND o.mld_opdr_key = p_opdr_key;
IF v_opdr_kosten IS NULL
THEN
UPDATE mld_opdr
SET mld_opdr_kosten = v_mandaatbedrag
WHERE mld_opdr_key = p_opdr_key;
END IF;
EXCEPTION WHEN NO_DATA_FOUND
THEN
-- hej, dan is er geen mandaatbedrag gedefinieerd bij het bedrijf en hoeven we dus ook niets te doen.
RETURN;
END;
-- Voor contractmutaties moet een excel bestand aangeleverd worden waarin per maand de kosten komen te staan.
-- Hierbij beginnen de kosten op p_startverrekening. Als de dienstverlening eerder start zal er een verrekening
-- plaatsvinden in p_startverrekening
FUNCTION vk_bepaal_maandbedrag (p_startdienstverlening IN DATE,
p_startverrekening IN DATE,
p_offset IN NUMBER,
p_maand IN NUMBER,
p_bedrag IN NUMBER)
RETURN NUMBER
AS
v_startdienstverlening DATE;
v_startverrekening DATE;
v_maand DATE;
BEGIN
v_startdienstverlening := TRUNC (p_startdienstverlening, 'MM');
v_startverrekening := TRUNC (p_startverrekening, 'MM');
-- als de datum dat de dienstverlening start later ligt dan de datum dat de verrekening start,
-- wordt de verreking pas gestart als ook de dienstverlening start.
IF v_startdienstverlening > v_startverrekening
THEN
v_startverrekening := v_startdienstverlening;
END IF;
v_maand := ADD_MONTHS (TRUNC (SYSDATE, 'YY'), p_maand - 1);
v_maand := ADD_MONTHS (v_maand, (12 * p_offset)); -- als de periode op vorig jaar staat wordt de maand van een jaar terug bepalend.
CASE
WHEN v_maand = v_startverrekening
THEN
RETURN ROUND((MONTHS_BETWEEN (v_startverrekening, v_startdienstverlening) + 1) * p_bedrag,2);
WHEN v_maand > v_startverrekening
THEN
RETURN ROUND(p_bedrag,2);
ELSE
RETURN NULL;
END CASE;
END;
PROCEDURE add_xml_row (
p_bestand IN VARCHAR2,
p_regel IN VARCHAR2)
AS
v_index NUMBER;
BEGIN
SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1
INTO v_index
FROM fac_rapport
WHERE fac_rapport_node = p_bestand;
INSERT INTO fac_rapport (
fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel)
VALUES (p_bestand,
v_index,
p_regel);
END;
PROCEDURE add_xml_element (
p_bestand IN VARCHAR2,
p_tag IN VARCHAR2,
p_value IN VARCHAR2)
AS
BEGIN
VBXX.add_xml_row(p_bestand,
'<' || p_tag || '>'
|| xml.char_to_html(p_value)
|| '</' || p_tag || '>');
END;
-- Gegeven de 2 referentiekeys, lever het type 'B', 'O' of 'C' op
-- Interne functie in de package vooralsnog
FUNCTION getreferentietype (po_key IN NUMBER, pc_key IN NUMBER, pb_key IN NUMBER)
RETURN VARCHAR2
IS
rtype VARCHAR2 (1) := '?';
BEGIN
IF po_key IS NOT NULL
THEN
rtype := 'O';
DBMS_OUTPUT.put_line ('opdrachtkey: ' || po_key);
ELSIF pc_key IS NOT NULL
THEN
rtype := 'C';
DBMS_OUTPUT.put_line ('contractkey: ' || pc_key);
ELSIF pb_key IS NOT NULL
THEN
rtype := 'B';
DBMS_OUTPUT.put_line ('besteloprachtkey: ' || pb_key);
END IF;
RETURN rtype;
END;
-- Geef 2 of 3 terug voor tweeweg of drieweg factuurmatchingsmode
FUNCTION getfactmatchmode (pdisckey IN NUMBER, pftype IN VARCHAR2)
RETURN NUMBER
IS
mmode VARCHAR2 (1) := '?';
BEGIN
CASE
WHEN pftype = 'B'
THEN
SELECT p.bes_disc_params_factmatchmode
INTO mmode
FROM bes_disc_params p
WHERE p.bes_ins_discipline_key = pdisckey;
WHEN pftype = 'C'
THEN
mmode := 2;
WHEN pftype = 'O'
THEN
SELECT p.mld_disc_params_factmatchmode
INTO mmode
FROM mld_disc_params p
WHERE p.mld_ins_discipline_key = pdisckey;
ELSE
mmode := 2;
END CASE;
IF mmode IS NULL
THEN
mmode := 2; -- default
END IF;
DBMS_OUTPUT.put_line ('>matchm(eth)ode: ' || mmode);
RETURN mmode;
END;
FUNCTION matchfactuur (pfactuur_key IN NUMBER)
RETURN NUMBER
IS
-- Overgenomen uit de fin package. We moeten voor Vebego alleen afwijkende facturen aanbieden ter goedkeuring
-- controleert deze nieuwe factuur, en levert een oordeel op:
-- -1 factuur niet (automatisch) goed
-- 0 niks van te zeggen of reeds goed-/afgekeurd/verwerkt
-- 1 factuur okay
ftype VARCHAR2 (1);
c_key fin_factuur.cnt_contract_key%TYPE;
b_key fin_factuur.bes_bestelopdr_key%TYPE;
o_key fin_factuur.mld_opdr_key%TYPE;
factuurstatus fin_factuur.fin_factuur_statuses_key%TYPE;
factuurdatum fin_factuur.fin_factuur_datum%TYPE;
factuurboekmaand fin_factuur.fin_factuur_boekmaand%TYPE;
discipline ins_tab_discipline.ins_discipline_key%TYPE;
factmatchmode mld_disc_params.mld_disc_params_factmatchmode%TYPE;
korting bes_bestelopdr.bes_bestelopdr_korting%TYPE;
levkosten bes_bestelopdr.bes_bestelopdr_levkosten%TYPE;
contracttermijnkosten cnt_contract.cnt_contract_termijnkosten%TYPE;
factuurschemabedrag cnt_factuurschema.cnt_factuurschema_bedrag%TYPE;
contractkosten cnt_contract.cnt_contract_kosten%TYPE;
opdrachtkosten mld_opdr.mld_opdr_kosten%TYPE;
typeopdr_factuur mld_typeopdr.mld_typeopdr_factuur%TYPE;
factuurbedrag NUMBER (12, 2);
bestelbedrag NUMBER (12, 2); -- van de opdracht waar deze factuur over gaat
totaalgefactureerd NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde B(R)OC
totaaltermijngefactureerd NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde C igv factuurschema-gebruik
totaaltermijngefactureerdbtw NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde C igv factuurschema-gebruik
totaalgefactureerdbtw NUMBER (12, 2);
aantalgefactureerd NUMBER := 0;
opdrstatus mld_opdr.mld_statusopdr_key%TYPE;
retval NUMBER := 0;
inclbtw NUMBER := 0;
-- Bepaal te tolerantie van de vakgroep
-- waarschijnlijk in procenten of zo?
-- of geven we de factuurwaarde mee en leveren we true/false op?
BEGIN
--------------------------------------------
------------ START MAIN ROUTINE ------------
--------------------------------------------
---
--- Over wat voor soort factuur hebben we het?
---
IF pfactuur_key IS NULL
THEN
DBMS_OUTPUT.put_line ('STOP, factuurkey: NULL');
RETURN 0;
END IF;
DBMS_OUTPUT.put_line ('\nfactuurkey: ' || pfactuur_key);
SELECT mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
fin_factuur_totaal,
fin_factuur_statuses_key,
fin_factuur_datum,
fin_factuur_boekmaand
INTO o_key,
c_key,
b_key,
factuurbedrag,
factuurstatus,
factuurdatum,
factuurboekmaand
FROM fin_factuur
WHERE fin_factuur_key = pfactuur_key;
ftype := vbxx.getreferentietype (o_key, c_key, b_key);
DBMS_OUTPUT.put_line ('>opdrachttype: ' || ftype);
--
-- Ga maar eens matchen
--
CASE
--
-- BESTELLING
--
WHEN ftype = 'B'
THEN
-- Factuur ok als binnen de toleranties van de bestelcatalogus
-- en het totaal met de eerder bestellingfacturen ook,
-- waarbij afhankelijk van 2-weg/3-weg wordt geteld.
-- Dat moeten we dus eerst bepalen
SELECT MAX (isg.ins_discipline_key)
INTO discipline
FROM bes_bestelopdr_item boi,
bes_bestelling_item bbi,
bes_srtdeel isd,
bes_srtgroep isg
WHERE isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND bbi.bes_srtdeel_key = isd.bes_srtdeel_key
AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = b_key;
factmatchmode := vbxx.getfactmatchmode (discipline, 'B');
-- Zijn de bestelbedragen incl. of excl. BTW.
SELECT MAX( (SELECT ks.prs_kostensoort_btw
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
COALESCE (bsg.prs_kostensoort_key, bd.prs_kostensoort_key)))
INTO inclbtw
FROM bes_discipline bd, bes_srtgroep bsg
WHERE bd.ins_discipline_key = bsg.ins_discipline_key
AND bd.ins_discipline_key = discipline;
-- Bereken dan nu de voor de matching relevante bedragen
-- Voor bestellingen nemen we de INKOOPPRIJS (het is immers een factuur die wij ontvangen)
-- Maar als die niet gevuld is (ook bv bij punchout), dan de enige andere prijs die we weten
-- de verkoopprijs
CASE
WHEN factmatchmode = 2
THEN
SELECT SUM(boi.bes_bestelopdr_item_aantal
* COALESCE (boi.bes_bestelopdr_item_inkprijs,
boi.bes_bestelopdr_item_prijs)),
MAX (COALESCE (bo.bes_bestelopdr_korting, 0)),
MAX (COALESCE (bo.bes_bestelopdr_levkosten, 0))
INTO bestelbedrag, korting, levkosten
FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelopdr bo
WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bo.bes_bestelopdr_status NOT IN (1, 3, 8) -- als die maar niet afgewezen/geannuleerd is
AND boi.bes_bestelopdr_key = b_key;
WHEN factmatchmode = 3
THEN
SELECT SUM(boi.bes_bestelopdr_item_aantal
* COALESCE (boi.bes_bestelopdr_item_inkprijs,
boi.bes_bestelopdr_item_prijs)),
MAX (COALESCE (bo.bes_bestelopdr_korting, 0)),
MAX (COALESCE (bo.bes_bestelopdr_levkosten, 0))
INTO bestelbedrag, korting, levkosten
FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelopdr bo
WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_status IN (6, 7) -- alleen de geleverde regels meetellen
AND boi.bes_bestelopdr_key = b_key;
END CASE;
bestelbedrag := bestelbedrag - korting + levkosten; -- Bedragen zijn excl. BTW?
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw)
INTO totaalgefactureerd, totaalgefactureerdbtw
FROM fin_factuur
WHERE bes_bestelopdr_key = b_key
AND fin_factuur_statuses_key <> 1
AND fin_factuur_verwijder IS NULL
AND (fin_factuur_datum <= factuurdatum OR fin_factuur_statuses_key IN (6, 7)); -- Akkoord(6) en Verwerkt(7)
IF inclbtw = 1 -- Artikelen zijn al inclusief, dan ook maar factuur inclusief matchen
THEN
DBMS_OUTPUT.put_line ('Inclusief BTW');
totaalgefactureerd := totaalgefactureerd + totaalgefactureerdbtw;
END IF;
IF fin.tolerantiematch (discipline,
ftype,
totaalgefactureerd,
bestelbedrag) = 1
THEN
retval := 1;
ELSE
retval := -1;
END IF;
--
-- CONTRACT
--
WHEN ftype = 'C'
THEN
-- om te beginnen zit deze factuur per definitie in deze termijn (welke dan ook)
totaaltermijngefactureerd := factuurbedrag;
-- Zijn deze contractbedragen incl. of excl. BTW.
SELECT MAX( (SELECT ks.prs_kostensoort_btw
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
COALESCE (c.prs_kostensoort_key, cd.prs_kostensoort_key)))
INTO inclbtw
FROM cnt_discipline cd, cnt_contract c
WHERE cd.ins_discipline_key = c.ins_discipline_key AND c.cnt_contract_key = c_key;
-- Controle op termijn bedrag en totaal, je kunt discussieren of _verwijder moet worden gecontroleerd.
BEGIN
SELECT c.cnt_contract_termijnkosten, c.cnt_contract_kosten, c.ins_discipline_key
INTO contracttermijnkosten, contractkosten, discipline
FROM cnt_contract c
WHERE cnt_contract_status = 0 -- actief
AND cnt_contract_key = c_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line ('Bijbehorend contract(status?) is ongeldig: ' || c_key);
RETURN -1;
END;
-- Er kan ook gebruik gemaakt worden van een factuurschema, dan moet het termijnbedrag anders bepaald worden
BEGIN
SELECT s.cnt_factuurschema_bedrag
INTO factuurschemabedrag
FROM cnt_factuurschema s
WHERE s.cnt_factuurschema_boekmaand = factuurboekmaand
AND s.cnt_contract_key = c_key;
-- Ok, er is dus een factuurschema-bedrag voor deze periode: dan controleren:
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line( 'Geen factuurschema van toepassing voor contract '
|| c_key
|| ' in periode '
|| factuurboekmaand);
-- factuurschemabedrag is nu NULL
END;
-- waren er niet al facturen voor dezelfde periode en komt het totaal er met deze dan niet overheen?
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw)
INTO totaaltermijngefactureerd, totaaltermijngefactureerdbtw
FROM fin_factuur
WHERE cnt_contract_key = c_key
AND fin_factuur_statuses_key <> 1
AND fin_factuur_verwijder IS NULL
AND fin_factuur_datum <= factuurdatum
AND fin_factuur_boekmaand = factuurboekmaand;
-- totaaltermijngefactureerd(btw) is dus voor deze periode inclusief deze nieuwe, dus
-- dus mogelijk hoger dan deze ene factuur
-- We doen er toch niks mee: factmatchmode := fin.getfactmatchmode (discipline, 'C');
-- hoeveel is er *met deze factuur erbij* totaal voor dit contract gefactureerd
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw)
INTO totaalgefactureerd, totaalgefactureerdbtw
FROM fin_factuur
WHERE cnt_contract_key = c_key
AND fin_factuur_statuses_key <> 1
AND fin_factuur_verwijder IS NULL
AND fin_factuur_datum <= factuurdatum;
DBMS_OUTPUT.put_line ('Totaal gefactureerd: ' || totaalgefactureerd);
DBMS_OUTPUT.put_line ('Totaal gefactureerd periode: ' || totaaltermijngefactureerd);
IF inclbtw = 1 -- Contractbedragen zijn al inclusief, dan ook factuur inclusief matchen
THEN
DBMS_OUTPUT.put_line ('Inclusief BTW');
totaalgefactureerd := totaalgefactureerd + totaalgefactureerdbtw; -- inclusief BTW
totaaltermijngefactureerd := totaaltermijngefactureerd + totaaltermijngefactureerdbtw; -- deze periode(maand) incl. BTW
DBMS_OUTPUT.put_line ('Totaal gefactureerd: ' || totaalgefactureerd);
DBMS_OUTPUT.put_line ('Totaal gefactureerd periode: ' || totaaltermijngefactureerd);
END IF;
IF contractkosten IS NULL
THEN
retval := 0;
ELSIF totaalgefactureerd <=
contractkosten + fac.safe_to_number (fac.getsetting ('cnt_factuur_totaalmarge'))
AND fin.tolerantiematch (discipline,
ftype,
totaaltermijngefactureerd,
COALESCE (factuurschemabedrag, contracttermijnkosten)) = 1
THEN
retval := 1;
ELSE
retval := -1;
END IF;
--
-- OPDRACHT
--
WHEN ftype = 'O'
THEN
-- controleer op basis van mld_typeopdr_factuur
BEGIN
SELECT o.mld_opdr_kosten,
o.mld_opdr_discipline_key,
top.mld_typeopdr_factuur,
o.mld_statusopdr_key
INTO opdrachtkosten,
discipline,
typeopdr_factuur,
opdrstatus
FROM mld_opdr o,
mld_melding m,
mld_typeopdr top
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_typeopdr_key = top.mld_typeopdr_key
--AND top.mld_typeopdr_uren NOT IN (3, 4, 5) -- bij interne uren geen facturen
AND top.mld_typeopdr_factuur <> 0 -- dan willen we ook geen factuur
AND top.mld_typeopdr_kosten = 1 -- daar mag een factuur bij
AND mld_statusopdr_key NOT IN (1, 2, 3, 10) -- dat zijn (nog) ongeldige opdrachten
AND mld_opdr_key = o_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (
'Bijbehorende opdracht(status/kosten/type) is ongeldig: ' || o_key);
RETURN -1;
END;
DBMS_OUTPUT.put_line ('opdrachtkosten: ' || opdrachtkosten);
DBMS_OUTPUT.put_line ('typeopdr_factuur: ' || typeopdr_factuur);
DBMS_OUTPUT.put_line ('opdrstatus: ' || opdrstatus);
SELECT MAX( (SELECT ks.prs_kostensoort_btw
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
COALESCE (o.prs_kostensoort_key,
stdm.prs_kostensoort_key,
md.prs_kostensoort_key)))
INTO inclbtw
FROM mld_discipline md,
mld_opdr o,
mld_stdmelding stdm,
mld_melding m
WHERE md.ins_discipline_key = o.mld_opdr_discipline_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = stdm.mld_stdmelding_key
AND mld_opdr_key = o_key;
factmatchmode := vbxx.getfactmatchmode (discipline, 'O');
-- Een opdracht is maar 1 ding, dus die status bepaalt al veel bij 3-weg
-- De opdracht moet nl. so wie so afgemeld zijn.
IF factmatchmode = 3 AND opdrstatus NOT IN (6, 7, 9)
THEN
RETURN -1;
END IF;
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw), COUNT(*)
INTO totaalgefactureerd, totaalgefactureerdbtw, aantalgefactureerd
FROM fin_factuur
WHERE mld_opdr_key = o_key
AND fin_factuur_statuses_key <> 1
AND fin_factuur_verwijder IS NULL
AND fin_factuur_datum <= factuurdatum;
-- Hier kunnen we iets met de deels nieuwe opties
-- '0;Geen facturen;1;E<>n factuur (vaste prijs);2;E<>n factuur (nacalculatie);3;Meerdere facturen;4;Contracttermijnen',
-- 0 hebben we direct al afgevangen
-- 1 en 2 verdragen geen eerdere factuur
IF typeopdr_factuur IN (1,2) AND aantalgefactureerd>1
THEN
-- er is al een eerdere factuur, dan is de rest fout
retval := -1;
ELSE
-- dan is dit 3 of de eerste van 1 of 2
IF inclbtw = 1 -- Opdrachtbedragen zijn dus inclusief, dan ook factuur inclusief matchen
THEN
DBMS_OUTPUT.put_line ('Inclusief BTW');
totaalgefactureerd := totaalgefactureerd + totaalgefactureerdbtw;
END IF;
IF typeopdr_factuur = 2
THEN
retval := 1;
ELSE
IF fin.tolerantiematch (discipline,
ftype,
totaalgefactureerd,
opdrachtkosten) = 1
THEN
retval := 1;
ELSE
retval := -1;
END IF;
END IF;
END IF;
ELSE
retval := 0;
END CASE;
RETURN retval;
END;
PROCEDURE checkopdracht (p_opdr_key IN NUMBER)
AS
v_kenmerk_key MLD_KENMERK.MLD_KENMERK_KEY%TYPE;
v_typeopdr_code MLD_TYPEOPDR.MLD_TYPEOPDR_CODE%TYPE;
v_typeopdr_key MLD_TYPEOPDR.MLD_TYPEOPDR_KEY%TYPE;
v_statusopdr_key MLD_OPDR.MLD_STATUSOPDR_KEY%TYPE;
v_melding_key MLD_OPDR.MLD_MELDING_KEY%TYPE;
v_kosten NUMBER;
v_verkoopprijs NUMBER;
v_klantoffertelimiet NUMBER;
v_regio_key ALG_REGIO.ALG_REGIO_KEY%TYPE;
v_inkoopnummer_opdracht VARCHAR2(100);
v_inkoopnummer_melding VARCHAR2(100);
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Ten behoeve van het offerte traject richting de opdrachtgever
-- Hierbij worden gegevens in de melding aangepast op basis van de opdracht
-- Controleer of de status van de offerteaanvraag afgemeld is
v_errorhint := 'Controleer of de status van de offerteaanvraag afgemeld is';
SELECT ot.mld_typeopdr_code, ot.mld_typeopdr_key, o.mld_statusopdr_key, o.mld_melding_key, d.alg_regio_key
INTO v_typeopdr_code, v_typeopdr_key, v_statusopdr_key, v_melding_key, v_regio_key
FROM mld_opdr o, mld_typeopdr ot, mld_melding m, alg_locatie l, alg_district d
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key (+)
AND l.alg_district_key = d.alg_district_key(+);
dbms_output.put_line ('v_typeopdr_code:' || v_typeopdr_code || ' - v_statusopdr_key:' || v_statusopdr_key || ' - v_regio_key:' || v_regio_key);
IF v_typeopdr_code LIKE 'OFFERTEAANVRAAG%' AND v_statusopdr_key IN (5,8) -- Toegekend, Geaccepteerd (Hookfunctie werkt niet op afmelden melding)
THEN
/*
SELECT mld_kenmerk_key
INTO v_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_typeopdr_key = v_typeopdr_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code LIKE 'VERKOOPPRIJS';*/
v_errorhint := 'Haal de verkoopprijs op';
v_kenmerk_key := VBXX.get_kenmerk_key('OPD', p_opdr_key, 'VERKOOPPRIJS');
IF v_kenmerk_key IS NOT NULL
THEN
v_verkoopprijs := FAC.safe_to_number (FLX.getflex('OPD', v_kenmerk_key, p_opdr_key, 1));
END IF;
dbms_output.put_line ('v_verkoopprijs:' || v_verkoopprijs);
IF v_verkoopprijs IS NOT NULL
THEN
-- Zoek het kenmerk van de eenmalige kosten bij de melding.
v_errorhint := 'Zoek het kenmerk van de eenmalige kosten bij de melding.';
SELECT mld_kenmerk_key
INTO v_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_melding m, mld_stdmelding std, mld_discipline d
WHERE m.mld_melding_key = v_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 = k.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'T' -- Vakgroeptype
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_code LIKE 'KG_TOTAALEENMALIGEKOSTEN';
dbms_output.put_line ('v_kenmerk_key eenmalige kosten:' || v_kenmerk_key);
v_kosten := FAC.safe_to_number (FLX.getflex('MLD', v_kenmerk_key, v_melding_key, 1));
dbms_output.put_line ('v_kosten:' || v_kosten);
--IF v_kosten IS NULL
--THEN
FLX.setflex('MLD', v_kenmerk_key, v_melding_key, v_verkoopprijs);
--END IF;
v_errorhint := 'Bepaal de limiet voor klantoffertes (regio)';
SELECT alg_kenmerk_key
INTO v_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_code = 'LIMIETKLANTOFFERTE';
dbms_output.put_line ('v_kenmerk_key limiet klant offerte:' || v_kenmerk_key);
v_klantoffertelimiet := FAC.safe_to_number(FLX.getflex('ALG', v_kenmerk_key, v_regio_key, 'E', 1));
dbms_output.put_line ('v_klantoffertelimiet:' || v_klantoffertelimiet);
IF v_klantoffertelimiet IS NOT NULL AND v_klantoffertelimiet < v_verkoopprijs
THEN
v_errorhint := 'Voeg de waarschuwing toe bij de opdracht.';
v_kenmerk_key := VBXX.get_kenmerk_key('OPD', p_opdr_key, 'WAARSCHUWINGKLANTLIM');
dbms_output.put_line ('v_kenmerk_key waarschuwing:' || v_kenmerk_key);
IF v_kenmerk_key IS NOT NULL
THEN
FLX.setflex('OPD', v_kenmerk_key, p_opdr_key, 'Waarde van de offerte is hoger dan de vrijstelling van de klant. Eerst klantgoedkeuring aanvragen via de melding.');
END IF;
END IF;
END IF;
END IF;
IF v_typeopdr_code LIKE 'OFFERTEOPDRACHT%' AND v_statusopdr_key IN (5,8) -- Toegekend, Geaccepteerd
THEN
v_kenmerk_key := VBXX.get_kenmerk_key('MLD', v_melding_key, 'KLANTINKOOPNR');
IF v_kenmerk_key IS NULL
THEN
fac.writelog ('VBXX.checkopdracht', 'E', 'Melding kenmerk KLANTINKOOPNR niet gevonden', 'melding_key:' || v_melding_key);
ELSE
dbms_output.put_line ('v_kenmerk_key KLANTINKOOPNR:' || v_kenmerk_key);
v_inkoopnummer_melding := FLX.getflex('MLD', v_kenmerk_key, v_melding_key, 1);
dbms_output.put_line ('v_inkoopnummer_melding:' || v_inkoopnummer_melding);
v_kenmerk_key := VBXX.get_kenmerk_key('OPD', p_opdr_key, 'KLANTINKOOPNR');
IF v_kenmerk_key IS NULL
THEN
fac.writelog ('VBXX.checkopdracht', 'E', 'Opdracht kenmerk KLANTINKOOPNR niet gevonden', 'opdracht_key:' || p_opdr_key);
ELSE
dbms_output.put_line ('v_kenmerk_key KLANTINKOOPNR:' || v_kenmerk_key);
v_inkoopnummer_opdracht := FLX.getflex('OPD', v_kenmerk_key, p_opdr_key, 1);
IF v_inkoopnummer_opdracht IS NULL
THEN
FLX.setflex('OPD', v_kenmerk_key, p_opdr_key, v_inkoopnummer_melding);
END IF;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('VBXX.checkopdracht', 'E', SUBSTR (v_errormsg, 1, 1000), v_errorhint || ' - opdracht_key:' || p_opdr_key);
END;
FUNCTION get_fin_exact_signature (p_factuurregel_key IN NUMBER, p_prefix IN VARCHAR2)
RETURN VARCHAR2
AS
v_signature VARCHAR2 (2000);
BEGIN
SELECT p_prefix
|| '-'
|| crdnr
|| '-'
|| factuur_nr
|| '-'
|| oms_regel
|| '-'
|| datum
|| '-'
|| fin_factuur_boekmaand
|| '-'
|| reknr
|| '-'
|| kstplcode
|| '-'
|| kstdrcode
|| '-'
|| bedrag_txt
|| '-'
|| btw_code
|| '-'
|| dagboek
|| '-'
|| oms_kop
|| '-'
|| fin_factuur_debiteur_nr
INTO v_signature
FROM vbxx_v_bron_export_exact_api
WHERE fin_factuurregel_key = p_factuurregel_key;
RETURN v_signature;
END;
PROCEDURE set_fin_exact_signature (p_factuurregel_key IN NUMBER, p_prefix IN VARCHAR2)
AS
v_signature VARCHAR2 (2000);
BEGIN
v_signature := VBXX.get_fin_exact_signature (p_factuurregel_key, p_prefix);
FLX.setflex ('FINR',
vbxx.get_kenmerk_key ('FIN', NULL, 'EXACTSIGNATURE'),
p_factuurregel_key,
v_signature);
END;
FUNCTION check_fin_exact_signature (p_crdnr IN VARCHAR2,
p_factuur_nr IN VARCHAR2,
p_n_fact_regels IN NUMBER)
RETURN NUMBER
AS
CURSOR c IS
SELECT fin_factuurregel_key
FROM vbxx_v_bron_export_exact_api x
WHERE factuur_nr = p_factuur_nr AND crdnr = p_crdnr;
v_result NUMBER;
v_signature_kenm VARCHAR2 (2000);
v_signature VARCHAR2 (2000);
BEGIN
v_result := 0;
FOR rec IN c
LOOP
v_signature_kenm := FLX.getflex ('FINR', vbxx.get_kenmerk_key ('FIN', NULL, 'EXACTSIGNATURE'), rec.fin_factuurregel_key);
v_signature := VBXX.get_fin_exact_signature (rec.fin_factuurregel_key, p_n_fact_regels);
IF COALESCE(v_signature_kenm, 'LEEG') <> v_signature
THEN
RETURN 0;
END IF;
END LOOP;
RETURN 1;
END;
END;
/
--
-- Export views om data van meldingsnotities en opdrachtnotities te exporteren.
--
CREATE OR REPLACE VIEW vbxx_v_rap_melding_note
AS
SELECT n.mld_melding_key melding,
l.alg_locatie_omschrijving locatie,
g.alg_gebouw_omschrijving gebouw,
d.ins_discipline_omschrijving vakgroep,
m.mld_melding_datum melding_datum,
mld_melding_note_aanmaak notitie_aanmaak,
mld_melding_note_wijzigdatum notitie_laatste_wijziging,
(SELECT pf.prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = n.prs_perslid_key) notitie_aangemaakt_door,
mld_melding_note_omschrijving notitie,
DECODE (BITAND (mld_melding_note_flag, 1), 1, 'Naar FrondEnd ')
|| DECODE (BITAND (mld_melding_note_flag, 64), 64, ' (gemailde notitie) ') flag
FROM mld_melding_note n, mld_melding m, alg_locatie l, alg_v_allonrgoed_gegevens aogg, alg_gebouw g, mld_stdmelding std, mld_discipline d
WHERE n.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = aogg.alg_onroerendgoed_keys(+)
AND aogg.alg_gebouw_key = g.alg_gebouw_key(+)
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
ORDER BY melding;
CREATE OR REPLACE VIEW vbxx_v_rap_opdr_note
AS
SELECT o.mld_melding_key melding,
o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
b.prs_bedrijf_naam leverancier,
l.alg_locatie_omschrijving locatie,
g.alg_gebouw_omschrijving gebouw,
d.ins_discipline_omschrijving vakgroep,
m.mld_melding_datum melding_datum,
mld_opdr_note_aanmaak notitie_aanmaak,
mld_opdr_note_wijzigdatum notitie_laatste_wijziging,
(SELECT pf.prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = n.prs_perslid_key) notitie_aangemaakt_door,
mld_opdr_note_omschrijving notitie,
DECODE (BITAND (mld_opdr_note_flag, 1), 1, 'Naar FrondEnd ')
|| DECODE (BITAND (mld_opdr_note_flag, 4), 4, 'Naar Uitvoerende ')
|| DECODE (BITAND (mld_opdr_note_flag, 32), 32, ' (onbeantwoorde vraag aan FE) ')
|| DECODE (BITAND (mld_opdr_note_flag, 64), 64, ' (gemailde notitie) ') flag
FROM mld_opdr_note n, mld_opdr o, prs_bedrijf b, mld_melding m, alg_locatie l, alg_v_allonrgoed_gegevens aogg, alg_gebouw g, mld_stdmelding std, mld_discipline d
WHERE n.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = aogg.alg_onroerendgoed_keys(+)
AND aogg.alg_gebouw_key = g.alg_gebouw_key(+)
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
ORDER BY melding, mld_opdr_bedrijfopdr_volgnr;
leverancier, vakgroep, locatie & gebouw , datum gemeld en natuurlijk opdrachtnummer.
--
-- View om het factuurschema zichtbaar te maken in de contracten xml. We voegen een standaard rapport toe aan
-- de contracten. Vervolgens kunnen we dan in de xsl het factuurschema eruit halen. In afwachting van de echte oplossing:
-- CARG#85884 Factuurschema ontbreekt in contract-XML, graag toevoegen
--
CREATE OR REPLACE VIEW vbxx_v_factuurschema
AS
SELECT cnt_contract_key,
cnt_factuurschema_boekmaand,
cnt_factuurschema_bedrag,
cnt_factuurschema_opmerking
FROM cnt_factuurschema;
CREATE OR REPLACE VIEW vbxx_v_rap_technadres
AS
SELECT b.prs_bedrijf_key bedrijf_key,
b.prs_bedrijf_naam bedrijf_naam,
p.prs_bedrijfadres_url url
FROM prs_bedrijfadres p,
prs_bedrijf b
WHERE UPPER(p.prs_bedrijfadres_url) LIKE 'HTTP%'
AND b.prs_bedrijf_key = p.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL;
--
-- View om bedrijven op te schonen. Het rapport geeft in <20><>n oogopslag inzicht in de recente activiteiten van het bedrijf
--
CREATE OR REPLACE VIEW vbxx_v_rap_bedrijf_gegevens
AS
SELECT prs_bedrijf_naam,
prs_bedrijf_key,
prs_bedrijf_aanmaak
aanmaak,
prs_bedrijf_leverancier
l,
prs_bedrijf_uitvoerende
u,
prs_bedrijf_contract
c,
(SELECT COUNT (DISTINCT prs_dienst_key)
FROM prs_bedrijfdienstlocatie bdl
WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key)
n_diensten,
(SELECT COUNT (*)
FROM prs_bedrijfadres ba
WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key)
n_tech_adres,
(SELECT COUNT (*)
FROM mld_opdr o
WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key)
n_opdr,
(SELECT COUNT (*)
FROM mld_opdr o
WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_opdr_datumbegin > SYSDATE - (2 * 365))
n_opdr_2jr,
(SELECT MAX (mld_opdr_datumbegin)
FROM mld_opdr o
WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_opdr_datumbegin > SYSDATE - (2 * 365))
opdr_datum_max,
(SELECT COUNT (*)
FROM cnt_contract c
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key)
n_contract,
(SELECT COUNT (*)
FROM cnt_contract c
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND cnt_contract_looptijd_tot > SYSDATE
AND cnt_contract_status <> 1)
n_contract_nu,
(SELECT COUNT (*)
FROM bes_bestelopdr bo
WHERE bo.prs_bedrijf_key = b.prs_bedrijf_key)
n_bestellingen,
(SELECT COUNT (*)
FROM bes_bestelopdr bo
WHERE bo.prs_bedrijf_key = b.prs_bedrijf_key AND bes_bestelopdr_datum > SYSDATE - (2 * 365))
n_bestellingen_2jr
FROM prs_bedrijf b
WHERE prs_bedrijf_verwijder IS NULL AND (prs_bedrijf_intern <> 1 OR prs_bedrijf_intern IS NULL);
-- View om notificaties naar bedrijven te sturen die opdrachten hebben die al 5 dagen geleden afgemeld hadden moeten zijn.
-- Ze krijgen dan een mail met een link naar het knoppenscherm. CUST04 wordt hier nu gebruikt voor KFHT. Als het bij een andere
-- omgeving aangepast moet worden zal er een DECODE op de user gedaan moeten worden.
-- Notificaties mogen niet bij alle flags verzonden worden.
-- lcl_mld_flag1 - Wacht op reactie melder
-- lcl_mld_flag2 - Wacht op offerte
-- lcl_mld_flag3 - Wacht op onderdelen
-- lcl_mld_flag4 - Wacht op reactie FM/CM
-- lcl_mld_flag5 - Wacht op reactie CSM
-- lcl_mld_flag6 - Wacht op klant akkoord
-- De notificatie wordt alleen verzonden als er geen flag staat of flag 2 of 3
CREATE OR REPLACE VIEW vbxx_v_noti_mld_opdr_reminder
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT 'CUST04',
NULL,
NULL,
'Facilitor opdrachtnr. '
|| sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
|| ' - HERINNERING',
o.mld_opdr_key,
NULL,
prs_bedrijf_email,
NULL
FROM ins_srtdiscipline sd,
mld_discipline d,
mld_stdmelding std,
mld_melding m,
mld_opdr o,
prs_bedrijf b,
prs_kenmerklink kl,
prs_kenmerk k
WHERE prs_kenmerk_code = 'AFMELDSCHERM'
AND 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
AND k.prs_kenmerk_key = kl.prs_kenmerk_key
AND k.prs_kenmerk_verwijder IS NULL
AND kl.prs_link_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = o.mld_uitvoerende_keys
AND b.prs_bedrijf_email IS NOT NULL
AND o.mld_statusopdr_key IN (5, 8) -- Toegekend, Geaccepteerd.
AND COALESCE(m.mld_melding_flag, 0) IN (0,2,3)
AND TRUNC (o.mld_opdr_einddatum) <= TRUNC (SYSDATE) - 5;
-- Power BI views. De beschrijving van de views staat in z:\Project\Implementaties\Customers\YAxx\Doc\YAXX#74390 Datalake\
-- Wijzigingen ook daarin aanpassen.
CREATE OR REPLACE VIEW vbxx_v_bimelding
AS
SELECT m.mld_melding_key,
m.mld_melding_externnr,
mld_meldbron_omschrijving,
m.mld_melding_start_key,
m.mld_alg_locatie_key alg_locatie_key,
og.alg_gebouw_key,
og.alg_verdieping_key,
og.alg_ruimte_key,
k.prs_kostenplaats_nr,
k.prs_kostenplaats_omschrijving,
m.prs_perslid_key,
m.mld_melding_behandelaar_key,
std.mld_stdmelding_omschrijving,
d.ins_discipline_omschrijving,
sd.ins_srtdiscipline_prefix,
sd.ins_srtdiscipline_omschrijving,
(SELECT mld_statuses_omschrijving
FROM mld_statuses sta
WHERE sta.mld_statuses_key = m.mld_melding_status)
mld_melding_status,
m.mld_melding_datum,
m.mld_melding_einddatum,
m.mld_melding_acceptdatum_std,
m.mld_melding_einddatum_std,
m.mld_melding_t_uitvoertijd.tijdsduur mld_melding_uitvoertijd_duur,
m.mld_melding_t_uitvoertijd.eenheid mld_melding_uitvoertijd_eenh,
m.mld_melding_t_accepttijd.tijdsduur mld_melding_accepttijd_duur,
m.mld_melding_t_accepttijd.eenheid mld_melding_accepttijd_eenh,
m.t_doorlooptijd.tijdsduur mld_melding_doorlooptijd_duur,
m.t_doorlooptijd.eenheid mld_melding_doorlooptijd_eenh,
DECODE(mld_melding_spoed, 1, 'Kritiek', 2, 'Hoog', 3, 'Normaal', 4, 'Laag', 'Onbekend') mld_melding_prioritieit,
mld.getmeldingstatusdate (m.mld_melding_key, 4) mld_melding_geaccepteerd,
COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
mld.getmeldingstatusdate (m.mld_melding_key, 1))
mld_melding_afgemeld,
m.mld_melding_onderwerp,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
m.mld_melding_parentkey,
m.mld_melding_satisfaction,
m.mld_melding_satisfaction_op,
(SELECT MAX(fac_tracking_datum)
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_tracking_refkey = m.mld_melding_key
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'melding') last_changed
FROM ( SELECT m1.*,
CASE
WHEN m1.mld_melding_einddatum >
COALESCE (fac.gettrackingdate ('MLDAFM', m1.mld_melding_key),
fac.gettrackingdate ('MLDREJ', m1.mld_melding_key),
SYSDATE)
THEN
1
ELSE
0
END
plan_uitvoertijd_sla,
CASE
WHEN m1.mld_melding_indult = 1 OR std1.mld_stdmelding_slabewaken = 0 THEN 1
ELSE 0
END
sla_nvt,
DECODE (m1.mld_melding_t_uitvoertijd.eenheid,
'D', m1.mld_melding_t_uitvoertijd.tijdsduur,
NULL)
sla_werkdgn,
DECODE (m1.mld_melding_t_uitvoertijd.eenheid,
'U', m1.mld_melding_t_uitvoertijd.tijdsduur,
NULL)
sla_werkuren,
DECODE (m1.mld_melding_t_respijt.eenheid,
'D', m1.mld_melding_t_respijt.tijdsduur,
NULL)
sla_respijtdgn,
DECODE (m1.mld_melding_t_respijt.eenheid,
'U', m1.mld_melding_t_respijt.tijdsduur,
NULL)
sla_respijturen,
CASE WHEN m1.mld_melding_spoed = 3 THEN std1.mld_stdmelding_t_accepttijd
WHEN m1.mld_melding_spoed = 1 THEN std1.mld_stdmelding_t_accept_pr1
WHEN m1.mld_melding_spoed = 1 THEN std1.mld_stdmelding_t_accept_pr2
WHEN m1.mld_melding_spoed = 1 THEN std1.mld_stdmelding_t_accept_pr4
END sla_accpt,
--m.mld_melding_datum datum,
CASE WHEN std1.mld_stdmelding_planbaar = 2
THEN TO_DATE(NULL)
ELSE m1.mld_melding_einddatum
END einddatum,
--mld_melding_einddatum_std einddatum_std,
--mld_melding_acceptdatum_std acceptdatum,
COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 5),
mld.getmeldingstatusdate (m1.mld_melding_key, 1))
afgemeld,
COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 4),
mld.getmeldingstatusdate (m1.mld_melding_key, 1))
accepted,
mld.getactualuitvoer (m1.mld_melding_key) t_doorlooptijd
FROM mld_melding m1,
mld_stdmelding std1
WHERE m1.mld_stdmelding_key = std1.mld_stdmelding_key) m,
alg_v_allonrgoed_gegevens og,
mld_meldbron mb,
mld_stdmelding std,
mld_discipline d,
ins_srtdiscipline sd,
prs_kostenplaats k
WHERE m.mld_meldbron_key = mb.mld_meldbron_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 m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND m.fac_activiteit_key IS NULL;
CREATE OR REPLACE VIEW vbxx_v_bimeldingkenmerk
AS
SELECT mld_melding_key,
COALESCE(k.mld_kenmerk_omschrijving, sk.mld_srtkenmerk_omschrijving) mld_kenmerk_omschrijving,
DECODE (sk.mld_srtkenmerk_kenmerktype, 'R', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1),
'S', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1),
flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key)) mld_kenmerk_waarde
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_kenmerkmelding km
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key;
CREATE OR REPLACE VIEW vbxx_dl_onrgoed
AS
SELECT r.alg_regio_key regio_key,
r.alg_regio_omschrijving regio_omschrijving,
r.alg_regio_verwijder regio_verwijder,
d.alg_district_key district_key,
d.alg_district_omschrijving district_omschriving ,
d.alg_district_verwijder district_verwijder,
l.alg_locatie_key locatie_key,
l.alg_locatie_code locatie_code,
l.alg_locatie_omschrijving locatie_omschrijving,
l.alg_locatie_adres locatie_adres,
l.alg_locatie_postcode locatie_postcode,
l.alg_locatie_plaats locatie_plaats,
l.alg_locatie_land locatie_land,
l.alg_locatie_vervaldatum locatie_vervaldatum,
l.alg_locatie_verwijder locatie_verwijder,
g.alg_gebouw_key gebouw_key,
sg.alg_srtgebouw_omschrijving srtgebouw_omschrijving,
g.alg_gebouw_code gebouw_code,
g.alg_gebouw_naam gebouw_naam,
g.alg_gebouw_verwijder gebouw_verwijder
FROM alg_regio r,
alg_district d,
alg_locatie l,
alg_gebouw g,
alg_srtgebouw sg
WHERE r.alg_regio_key = d.alg_regio_key(+)
AND d.alg_district_key = l.alg_district_key(+)
AND l.alg_locatie_key = g.alg_locatie_key(+)
AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+);
CREATE OR REPLACE VIEW vbxx_dl_onrgoed_kenmerk
AS
SELECT alg_onrgoed_key,
DECODE (alg_onrgoed_niveau, 'E', 'Regio', 'D', 'District', 'L', 'Locatie', 'G', 'Gebouw')
onrgoed_niveau,
k.alg_kenmerk_key
kenmerk_key,
DECODE (k.fac_kenmerkdomein_key,
NULL, alg_onrgoedkenmerk_waarde,
FLX.getdomeinwaarde (k.fac_kenmerkdomein_key, FAC.safe_to_number (alg_onrgoedkenmerk_waarde)))
waarde,
alg_onrgoedkenmerk_aanmaak
onrgoedkenmerk_aanmaak,
alg_onrgoedkenmerk_verwijder
onrgoedkenmerk_verwijder,
alg_kenmerk_omschrijving
kenmerk_omschrijving,
DECODE (alg_kenmerk_kenmerktype,
'C', 'Tekst',
'N', 'Nummeriek',
'S', 'Lijst',
'D', 'Datum',
'R', 'Lijst')
kenmerk_type
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_kenmerktype NOT IN ('M',
'L',
'l',
'V');
CREATE OR REPLACE VIEW vbxx_rechtenvangroepen
AS
SELECT g.fac_groep_omschrijving,
f.fac_functie_module,
f.fac_functie_code,
lcl.l (f.fac_functie_omschrijving) fac_functie_omschrijving,
DECODE(DECODE(gr.ins_discipline_key, NULL, 0, 1), 0, 0, COUNT (*)) aantal,
CASE
WHEN gr.fac_gebruiker_alg_level_read = -1 THEN 'Alle'
WHEN gr.fac_gebruiker_alg_level_read = 0 THEN 'Regio'
WHEN gr.fac_gebruiker_alg_level_read = 1 THEN 'District'
WHEN gr.fac_gebruiker_alg_level_read = 2 THEN 'Locatie'
WHEN gr.fac_gebruiker_alg_level_read = 3 THEN 'Gebouw'
WHEN gr.fac_gebruiker_alg_level_read = 4 THEN 'Verdieping'
WHEN gr.fac_gebruiker_alg_level_read = 5 THEN 'Ruimte'
ELSE 'Geen'
END Alglevelread,
CASE
WHEN gr.fac_gebruiker_alg_level_write = -1 THEN 'Alle'
WHEN gr.fac_gebruiker_alg_level_write = 0 THEN 'Regio'
WHEN gr.fac_gebruiker_alg_level_write = 1 THEN 'District'
WHEN gr.fac_gebruiker_alg_level_write = 2 THEN 'Locatie'
WHEN gr.fac_gebruiker_alg_level_write = 3 THEN 'Gebouw'
WHEN gr.fac_gebruiker_alg_level_write = 4 THEN 'Verdieping'
WHEN gr.fac_gebruiker_alg_level_write = 5 THEN 'Ruimte'
ELSE 'Geen'
END Alglevelwrite,
CASE
WHEN gr.fac_gebruiker_prs_level_read = -1 THEN 'Alle'
WHEN gr.fac_gebruiker_prs_level_read = 0 THEN 'Business Unit'
WHEN gr.fac_gebruiker_prs_level_read = 1 THEN 'Afdeling 1'
WHEN gr.fac_gebruiker_prs_level_read = 2 THEN 'Afdeling 2'
WHEN gr.fac_gebruiker_prs_level_read = 3 THEN 'Afdeling 3'
WHEN gr.fac_gebruiker_prs_level_read = 4 THEN 'Afdeling 4'
WHEN gr.fac_gebruiker_prs_level_read = 5 THEN 'Afdeling 5'
ELSE 'Geen'
END Prslevelread,
CASE
WHEN gr.fac_gebruiker_prs_level_write = -1 THEN 'Alle'
WHEN gr.fac_gebruiker_prs_level_write = 0 THEN 'Business Unit'
WHEN gr.fac_gebruiker_prs_level_write = 1 THEN 'Afdeling 1'
WHEN gr.fac_gebruiker_prs_level_write = 2 THEN 'Afdeling 2'
WHEN gr.fac_gebruiker_prs_level_write = 3 THEN 'Afdeling 3'
WHEN gr.fac_gebruiker_prs_level_write = 4 THEN 'Afdeling 4'
WHEN gr.fac_gebruiker_prs_level_write = 5 THEN 'Afdeling 5'
ELSE 'Geen'
END Prslevelwrit
FROM fac_functie f,
fac_groeprechten gr,
fac_groep g,
ins_tab_discipline d
WHERE f.fac_functie_key = gr.fac_functie_key
AND gr.fac_groep_key = g.fac_groep_key
AND gr.ins_discipline_key = d.ins_discipline_key(+)
GROUP BY g.fac_groep_omschrijving,
f.fac_functie_module,
f.fac_functie_code,
f.fac_functie_omschrijving,
gr.fac_gebruiker_alg_level_read,
gr.fac_gebruiker_alg_level_write,
gr.fac_gebruiker_prs_level_read,
gr.fac_gebruiker_prs_level_write,
DECODE(gr.ins_discipline_key, NULL, 0, 1);
CREATE OR REPLACE VIEW vbxx_rechtenvangroepen_transp
AS
SELECT g.fac_groep_omschrijving groep,
f.fac_functie_code code,
sd.ins_srtdiscipline_omschrijving vakgroeptype,
d.ins_discipline_omschrijving vakgroep,
gr.fac_gebruiker_prs_level_read org_lezen,
gr.fac_gebruiker_prs_level_write org_schrijven,
gr.fac_gebruiker_alg_level_read plaats_lezen,
gr.fac_gebruiker_alg_level_write plaats_schrijven
FROM fac_functie f,
fac_groeprechten gr,
fac_groep g,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE f.fac_functie_key = gr.fac_functie_key
AND gr.fac_groep_key = g.fac_groep_key
AND gr.ins_discipline_key = d.ins_discipline_key(+)
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+);
--
--
-- import procedures en rapport voor invoer van de uplift/opslag tabel
-- De werkwijze van de import is als volgt:
-- De importabel bevat alle records die nog geldig zijn
-- Een nieuwe import voegt regels toe als de combinatie van velden niet gevonden kan worden.
-- De enige uitzondering is een regel waarvan nu de einddatum gezet is en die in de tabel
-- nog zonder einddatum staat.
-- Regels verwijderen uit de import tabel kan door ze niet meer op te nemen in de sheet. De
-- tabel wordt altijd eerst geleegd door alles op verwijderd te zetten. Hiermee kun je altijd nog een
-- oude versie terugvinden.
CREATE OR REPLACE PROCEDURE vbxx_import_opslag (p_import_key IN NUMBER)
AS
CURSOR c_cursor IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_newline VARCHAR2 (4000);
v_aanduiding VARCHAR2 (1000); -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_skipfield VARCHAR2 (100);
v_ongeldig NUMBER;
-- De importvelden
v_imp_opslag_key NUMBER (10);
v_begin_txt VARCHAR2 (100);
v_eind_txt VARCHAR2 (100);
v_locatie_code VARCHAR2 (100);
v_district_omschrijving VARCHAR2 (100);
v_regio_omschrijving VARCHAR2 (100);
v_srtdiscipline_omschrijving VARCHAR2 (100);
v_discipline_omschrijving VARCHAR2 (100);
v_kostensoort_oms VARCHAR2 (100);
v_opslag_txt VARCHAR2 (100);
v_leverancier_nr VARCHAR2 (100);
v_opmerking VARCHAR2 (2000);
v_locatie_key NUMBER (10);
v_district_key NUMBER (10);
v_regio_key NUMBER (10);
v_srtdiscipline_key NUMBER (10);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_opslag NUMBER (8, 4);
v_begin DATE;
v_eind DATE;
v_null_date DATE;
header_found BOOLEAN;
BEGIN
-- Eerst opruiming
-- Init
header_found := FALSE;
v_fielddelimitor := ';';
FOR rec1 IN c_cursor
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := v_newline;
v_ongeldig := 0;
IF SUBSTR (v_newline, 1, 3) = '?'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.');
v_newline := SUBSTR (v_newline, 4);
END IF;
fac.imp_getfield (v_newline, v_fielddelimitor, v_regio_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_district_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtdiscipline_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_discipline_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kostensoort_oms);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leverancier_nr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_opslag_txt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_begin_txt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_eind_txt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_opmerking);
-- Skip until a valid header is found
-- De headers in de Excel export zijn ander dan in de csv export daarom controleren we op beiden.
IF (UPPER (v_regio_omschrijving) = 'REGIO' OR UPPER (v_regio_omschrijving) = 'ALG_REGIO_OMSCHRIJVING')
AND (UPPER (v_district_omschrijving) = 'DISTRICT' OR UPPER (v_district_omschrijving) = 'ALG_DISTRICT_OMSCHRIJVING')
AND (UPPER (v_locatie_code) = 'LOCATIE' OR UPPER (v_locatie_code) = 'ALG_LOCATIE_CODE')
AND (UPPER (v_srtdiscipline_omschrijving) = 'VAKGROEPTYPE' OR UPPER (v_srtdiscipline_omschrijving) = 'INS_SRTDISCIPLINE_OMSCHRIJVING')
AND (UPPER (v_discipline_omschrijving) = 'VAKGROEP' OR UPPER (v_discipline_omschrijving) = 'INS_DISCIPLINE_OMSCHRIJVING')
AND (UPPER (v_kostensoort_oms) = 'KOSTENSOORT' OR UPPER (v_kostensoort_oms) = 'PRS_KOSTENSOORT_OMS')
AND (UPPER (v_leverancier_nr) = 'LEVERANCIERNUMMER' OR UPPER (v_leverancier_nr) = 'PRS_LEVERANCIER_NR')
AND UPPER (v_opslag_txt) = 'OPSLAG'
AND UPPER (v_begin_txt) = 'INGANGSDATUM'
AND (UPPER (v_eind_txt) = 'VERVALDATUM' OR UPPER (v_eind_txt) = 'EINDDATUM')
AND UPPER (v_opmerking) = 'OPMERKING'
THEN
-- Sla de kopregel over.
header_found := TRUE;
UPDATE vbxx_imp_opslag
SET imp_opslag_verwijder = SYSDATE
WHERE imp_opslag_verwijder IS NULL;
ELSIF (header_found)
THEN
-- voeg nieuwe records toe
-- en wijzig bestaande records
v_aanduiding :=
v_regio_omschrijving
|| ' | '
|| v_district_omschrijving
|| ' | '
|| v_locatie_code
|| ' | '
|| v_srtdiscipline_omschrijving
|| ' | '
|| v_discipline_omschrijving
|| ' | '
|| v_kostensoort_oms
|| ' | '
|| v_leverancier_nr
|| ' | '
|| v_opslag_txt
|| ' | '
|| v_begin_txt
|| ' | '
|| v_eind_txt;
v_errorhint := 'Regio niet gevonden: ' || v_regio_omschrijving;
v_regio_key := NULL;
IF v_regio_omschrijving IS NOT NULL
THEN
BEGIN
SELECT alg_regio_key
INTO v_regio_key
FROM alg_regio
WHERE alg_regio_verwijder IS NULL
AND UPPER (alg_regio_omschrijving) =
UPPER (TRIM (v_regio_omschrijving));
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'District niet gevonden: ' || v_district_omschrijving;
v_district_key := NULL;
IF v_district_omschrijving IS NOT NULL
THEN
BEGIN
SELECT alg_district_key
INTO v_district_key
FROM alg_district d, alg_regio r
WHERE d.alg_regio_key = r.alg_regio_key
AND d.alg_district_verwijder IS NULL
AND UPPER (alg_district_omschrijving) = UPPER (TRIM (v_district_omschrijving))
AND (v_regio_key IS NULL OR r.alg_regio_key = v_regio_key);
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'Locatie niet gevonden: ' || v_locatie_code;
v_locatie_key := NULL;
IF v_locatie_code IS NOT NULL
THEN
BEGIN
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie l, alg_district d, alg_regio r
WHERE l.alg_district_key = d.alg_district_key
AND d.alg_regio_key = r.alg_regio_key
AND l.alg_locatie_verwijder IS NULL
AND UPPER (l.alg_locatie_code) = UPPER (TRIM (v_locatie_code))
AND (v_district_key IS NULL OR d.alg_district_key = v_district_key);
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'Vakgroeptype niet gevonden: ' || v_srtdiscipline_omschrijving;
v_srtdiscipline_key := NULL;
IF v_srtdiscipline_omschrijving IS NOT NULL
THEN
BEGIN
SELECT ins_srtdiscipline_key
INTO v_srtdiscipline_key
FROM ins_srtdiscipline
WHERE ins_srtdiscipline_verwijder IS NULL
AND UPPER (ins_srtdiscipline_omschrijving) =
UPPER (TRIM (v_srtdiscipline_omschrijving));
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'Vakgroep niet gevonden: ' || v_discipline_omschrijving;
v_discipline_key := NULL;
IF v_discipline_omschrijving IS NOT NULL
THEN
BEGIN
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND (ins_srtdiscipline_key = v_srtdiscipline_key OR v_srtdiscipline_key IS NULL)
AND UPPER (ins_discipline_omschrijving) =
UPPER (TRIM (v_discipline_omschrijving));
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'Kostensoort code niet gevonden: ' || v_kostensoort_oms;
v_kostensoort_key := NULL;
IF v_kostensoort_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE UPPER (prs_kostensoort_oms) =
UPPER (TRIM (v_kostensoort_oms));
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END IF;
v_errorhint := 'Leverancier niet gevonden: ' || v_leverancier_nr;
v_bedrijf_key := NULL;
IF v_leverancier_nr IS NOT NULL
THEN
BEGIN
-- vinden we dit bedrijf via het kenmerk AFWLEVERANCIERNR?
SELECT prs_link_key
INTO v_bedrijf_key
FROM prs_kenmerklink kl, prs_kenmerk k
WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'AFWLEVERANCIERNR'
AND UPPER(kl.prs_kenmerklink_waarde) = UPPER(v_leverancier_nr);
EXCEPTION WHEN NO_DATA_FOUND THEN
BEGIN
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND UPPER (prs_leverancier_nr) =
UPPER (TRIM (v_leverancier_nr));
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_errorhint, '');
END;
END;
END IF;
v_errorhint := 'Controleer opslag';
v_opslag_txt := REPLACE (v_opslag_txt, ',', '.');
v_opslag := TO_NUMBER (v_opslag_txt);
v_errorhint := 'Controleer ingangsdatum';
v_begin := TO_DATE (v_begin_txt, 'dd-mm-yyyy');
v_errorhint := 'Controleer vervaldatum';
v_eind := TO_DATE (v_eind_txt, 'dd-mm-yyyy');
IF v_ongeldig = 0
THEN
INSERT INTO vbxx_imp_opslag (
imp_opslag_key,
alg_locatie_key,
alg_district_key,
alg_regio_key,
ins_srtdiscipline_key,
ins_discipline_key,
prs_kostensoort_key,
prs_bedrijf_key,
opslag,
ingangsdatum,
einddatum,
imp_opslag_aanmaak,
opmerking)
VALUES (v_imp_opslag_key + 1,
v_locatie_key,
v_district_key,
v_regio_key,
v_srtdiscipline_key,
v_discipline_key,
v_kostensoort_key,
v_bedrijf_key,
v_opslag,
v_begin,
v_eind,
SYSDATE,
SUBSTR(v_opmerking, 1,200));
END IF;
ELSE
IF rec1.fac_imp_file_index = 1 THEN
fac.imp_writelog (p_import_key,
'I',
'Geen geldige header aangetroffen',
v_regio_omschrijving
|| ' | '
|| v_district_omschrijving
|| ' | '
|| v_locatie_code
|| ' | '
|| v_srtdiscipline_omschrijving
|| ' | '
|| v_discipline_omschrijving
|| ' | '
|| v_kostensoort_oms
|| ' | '
|| v_leverancier_nr
|| ' | '
|| v_opslag_txt
|| ' | '
|| v_begin_txt
|| ' | '
|| v_eind_txt);
END IF;
END IF;
COMMIT;
END;
END LOOP;
IF NOT header_found
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen geldige header aangetroffen',
'Bestand is geen geldig opslag importbestand.');
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_errorhint || ' - ' || v_aanduiding);
END;
/
-- De update functie doet eigenlijk niets maar anders komt er een foutmelding bij de update.
CREATE OR REPLACE PROCEDURE vbxx_update_opslag (p_import_key IN NUMBER)
AS
BEGIN
NULL;
END;
/
CREATE OR REPLACE VIEW vbxx_v_imp_opslag
AS
SELECT o.imp_opslag_key,
r.alg_regio_omschrijving,
di.alg_district_omschrijving,
l.alg_locatie_code,
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_omschrijving,
prs_kostensoort_oms,
COALESCE((SELECT FLX.getflex('PRS', k.prs_kenmerk_key, b.prs_bedrijf_key, 'B', 1) FROM prs_kenmerk k WHERE k.prs_kenmerk_code = 'AFWLEVERANCIERNR'), prs_leverancier_nr) prs_leverancier_nr,
o.opslag,
o.ingangsdatum,
o.einddatum,
o.imp_opslag_aanmaak,
o.imp_opslag_verwijder,
o.opmerking
FROM vbxx_imp_opslag o,
alg_locatie l,
alg_district di,
alg_regio r,
ins_srtdiscipline sd,
ins_tab_discipline d,
prs_kostensoort k,
prs_bedrijf b
WHERE o.alg_locatie_key = l.alg_locatie_key(+)
AND o.alg_district_key = di.alg_district_key(+)
AND o.alg_regio_key = r.alg_regio_key(+)
AND o.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
AND o.ins_discipline_key = d.ins_discipline_key(+)
AND o.prs_kostensoort_key = k.prs_kostensoort_key(+)
AND o.prs_bedrijf_key = b.prs_bedrijf_key(+);
--
-- REVERSEDBILLING rapportages en procedures
--
CREATE OR REPLACE VIEW vbxx_v_rap_actual_cost_tot
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
broc_flag,
fclt_f_leverancier,
contractnr,
beschrijving,
inkoopordernr,
aantal,
kosten
)
AS
-- Variabele kosten uit ACTUAL opdrachten op variabele contracten
SELECT pcp.prs_afdeling_key,
TO_CHAR (SYSDATE, 'yyyy-mm') maand, -- Deze maand ORDAFR, volgende maand factureren (achteraf)
'O' broc_flag,
b.prs_bedrijf_naam,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
COUNT (*) aantal,
SUM (o.mld_opdr_kosten) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM mld_opdr o,
mld_typeopdr ot,
cnt_contract c,
cnt_contract mc,
prs_bedrijf b,
prs_contactpersoon cp,
prs_perslid pcp
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%'
AND o.mld_statusopdr_key = 9
-- Moeten we niet alle openstaande opdrachten opnemen?
-- CHECK AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) > TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt)
AND NOT EXISTS -- Heeft nog niet de timestamp dat deze al meegenomen is in de RB notificatie
( SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING'
AND k.mld_kenmerk_verwijder IS NULL)
AND EXISTS -- Niet gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut
AND k.mld_kenmerk_verwijder IS NULL
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND o.cnt_contract_key = c.cnt_contract_key
--AND c.ins_discipline_key = 523 -- Variabele contracten
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
GROUP BY pcp.prs_afdeling_key,
TO_CHAR (SYSDATE, 'yyyy-mm'),
'O',
b.prs_bedrijf_naam,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer;
-- Actual regels en basis voor oa. te exporteren/bevriezen regels op de 10e van
-- de maand; voor de output geldt:
-- Dat deze de actual vaste contractkosten toont (over afgelopen maand).
-- Dat deze de actual variabele bestelopdrachtkosten toont (voor 1e ORDAFR).
-- Dat deze de actual variabele reserveringskosten toont (over afgelopen maand), behalve verbruiksartikelen met een volgnummer > 900!
-- Dat deze de actual variabele opdrachtkosten toont (voor 1e ORDAFR).
-- Dat deze tot de 10e van de huidige maand alleen nog door Vebego wijzigbaar is.
CREATE OR REPLACE VIEW vbxx_v_actual_fact -- Tbv. FACT_EXPORT!
(
prs_afdeling_key,
maand,
prs_bedrijf_key,
prs_bedrijf_naam,
cp_perslid_key,
cp_aanhef,
cp_naam,
cp_email,
cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr,
cm_aanhef,
cm_naam,
bes_bestelopdr_key,
res_rsv_ruimte_key,
mld_opdr_key,
bro_id,
aantal,
kosten
)
AS
-- Variabele kosten uit ACTUAL opdrachten op variabele contracten
SELECT pcp.prs_afdeling_key,
TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf)
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email cp_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
NULL bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id,
1 aantal,
o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM mld_opdr o,
mld_typeopdr ot,
--fac_tracking t,
cnt_contract c,
prs_bedrijf b,
cnt_contract mc,
prs_contactpersoon cp,
prs_perslid pcp,
prs_perslid pcm
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%'
AND o.mld_statusopdr_key = 9
AND NOT EXISTS
( SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING'
AND k.mld_kenmerk_verwijder IS NULL)
--AND o.mld_opdr_key = t.fac_tracking_refkey
--AND t.fac_srtnotificatie_key = 76 -- ORDAFR
--AND t.fac_tracking_datum > TO_DATE ('20190101', 'yyyymmdd')
--AND t.fac_tracking_datum < TRUNC (SYSDATE, 'mm')
AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt)
AND EXISTS -- Niet gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut
AND k.mld_kenmerk_verwijder IS NULL
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND o.cnt_contract_key = c.cnt_contract_key
-- AND c.ins_discipline_key = 523 -- Variabele contracten
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
--AND o.mld_opdr_key = nr.mld_opdr_key(+)
UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten-DISPUUT
SELECT pcp.prs_afdeling_key,
TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf)
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email cp_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern || '/DISPUUT' cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
NULL bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id,
1 aantal,
o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM mld_opdr o,
mld_typeopdr ot,
cnt_contract c,
prs_bedrijf b,
cnt_contract mc,
prs_contactpersoon cp,
prs_perslid pcp,
prs_perslid pcm
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%'
AND o.mld_statusopdr_key = 9 -- ORDAFR
AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt)
AND NOT EXISTS
( SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING'
AND k.mld_kenmerk_verwijder IS NULL)
AND NOT EXISTS -- Gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut
AND k.mld_kenmerk_verwijder IS NULL
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND o.cnt_contract_key = c.cnt_contract_key
-- AND c.ins_discipline_key = 523 -- Variabele contracten
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key;
-- Te exporteren/bevriezen totalen over voorgaande maand (vast en variabel).
CREATE OR REPLACE VIEW vbxx_v_rap_actual_fact_tot
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
broc_flag,
--hide_f_bedrijf_key,
fclt_f_leverancier,
--hide_f_contract_key,
contractnr,
beschrijving,
inkoopordernr,
aantal,
kosten
)
AS
SELECT prs_afdeling_key,
maand,
DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag,
--prs_bedrijf_key,
prs_bedrijf_naam,
--cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr,
SUM (aantal),
SUM (kosten)
FROM vbxx_v_actual_fact
GROUP BY prs_afdeling_key,
maand,
DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'),
--prs_bedrijf_key,
prs_bedrijf_naam,
--cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr;
-- Te exporteren/bevriezen variabele opdrachtkosten over voorgaande maand (details).
CREATE OR REPLACE VIEW vbxx_v_rap_actual_fact_mld
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
prio,
mld_melding_key,
mld_opdr_key,
opdr_id,
plaats, -- Gebouw
ruimte,
mld_stdmelding_oms,
opdrachttype,
omschrijving,
begindatum,
einddatum,
meldingstatus,
opdrachtstatus,
afhandeling,
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT v.prs_afdeling_key,
v.maand,
TO_CHAR (m.mld_melding_spoed),
m.mld_melding_key,
o.mld_opdr_key,
COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id,
DECODE (
og.alg_type,
'R', og.alg_gebouw_code,
'V', og.alg_gebouw_code,
'G', og.alg_gebouw_code,
'T', og.alg_terreinsector_code,
l.alg_locatie_code)
plaatsaanduiding,
DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte,
sm.mld_stdmelding_omschrijving,
ot.mld_typeopdr_omschrijving,
o.mld_opdr_omschrijving,
o.mld_opdr_datumbegin begindatum,
--TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum,
fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum,
ms.mld_statuses_omschrijving,
os.mld_statusopdr_omschrijving,
o.mld_opdr_opmerking,
v.prs_bedrijf_naam,
v.kosten,
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM vbxx_v_actual_fact v,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
mld_melding m,
mld_statuses ms,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
alg_locatie l,
alg_district d,
alg_v_onroerendgoed_gegevens og
WHERE v.mld_opdr_key = o.mld_opdr_key
AND o.mld_statusopdr_key = os.mld_statusopdr_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);
-- Frozen regels en basis voor oa. de notificatie op de 11e van de maand; voor
-- de output geldt:
-- Dat deze de frozen vaste contractkosten toont.
-- Dat deze de frozen variabele opdrachtkosten toont.
-- Dat deze de frozen variabele reserveringskosten toont.
-- Dat de laatst bevroren maand per bedrijf op de 11e wordt genotificeerd (via
-- extra_key-principe) met daarin de bedragen gegroepeerd per inkoopordernr.
CREATE OR REPLACE VIEW vbxx_v_frozen_fact
(
prs_afdeling_key,
maand,
--prs_bedrijf_key,
extra_key, -- Moet zo heten!
prs_bedrijf_naam,
cp_perslid_key,
cp_aanhef,
cp_naam,
cp_email,
cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr,
cm_aanhef,
cm_naam,
bes_bestelopdr_key,
res_rsv_ruimte_key,
mld_opdr_key,
bro_id,
factuur_naar_sg,
aantal,
kosten
)
AS
/*
SELECT pcp.prs_afdeling_key, -- Vaste contractkosten over de FROZEN termijnen
SUBSTR (ud.fac_usrdata_code, 1, 7) maand, -- yyyy-mm
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
NULL bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
NULL mld_opdr_key,
NULL bro_id,
DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg,
0 aantal,
ud.fac_usrdata_prijs kosten
FROM fac_usrdata ud,
cnt_contract c,
prs_bedrijf b,
cnt_contract mc,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp,
prs_perslid pcp,
prs_perslid pcm,
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG!
WHERE ud.fac_usrtab_key = 161 -- VasteKostenMnd
AND SUBSTR (ud.fac_usrdata_code, INSTR (ud.fac_usrdata_code, '/') + 1) = TO_CHAR (c.cnt_contract_key)
--AND SUBSTR (ud.fac_usrdata_omschr, 1, INSTR (ud.fac_usrdata_omschr, '/') - 1) = TO_CHAR (b.prs_bedrijf_key)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
AND b.prs_bedrijf_key = kl.prs_link_key(+)
UNION ALL -- Variabele kosten uit FROZEN bestelopdrachten op variabele contracten (via bes_bestelling_ordernr!)
SELECT pcp.prs_afdeling_key,
TO_CHAR (TRUNC (fac.gettrackingdate ('BES2VE', bo.bes_bestelopdr_key), 'mm') - 1, 'yyyy-mm') maand,
b.prs_bedrijf_key,
b.prs_bedrijf_naam bedrijf,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
'')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email cp_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern, -- Uit deze maand lopend contract, anders geen variabele kosten
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
'')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
bo.bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
NULL mld_opdr_key,
bo.bes_bestelopdr_id bro_id,
DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg,
1 aantal,
SUM ((boi.bes_bestelopdr_item_aantal * COALESCE (boi.bes_bestelopdr_item_inkprijs, boi.bes_bestelopdr_item_prijs)) +
COALESCE (bo.bes_bestelopdr_korting, 0) +
COALESCE (bo.bes_bestelopdr_levkosten, 0))
kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM bes_bestelling b,
bes_bestelling_item bbi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
cnt_v_aanwezigcontract c,
prs_bedrijf b,
cnt_contract mc,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp,
prs_perslid pcp,
prs_perslid pcm,
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG!
WHERE b.bes_bestelling_ordernr IS NOT NULL -- Gefactureerd!
AND b.bes_bestelling_key = bbi.bes_bestelling_key
AND bbi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bo.bes_bestelopdr_status = 7 -- Verwerkt (TODO: Soms >1 bestelopdrachten en niet allemaal Verwerkt???)
--AND bo.prs_bedrijf_key = b.prs_bedrijf_key
AND SUBSTR (b.bes_bestelling_ordernr, INSTR (b.bes_bestelling_ordernr, '/') + 1) = TO_CHAR (c.cnt_contract_key)
--AND c.ins_discipline_key = 523 -- Variabele contracten (kan niet anders)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
AND b.prs_bedrijf_key = kl.prs_link_key(+)
GROUP BY pcp.prs_afdeling_key,
TO_CHAR (TRUNC (fac.gettrackingdate ('BES2VE', bo.bes_bestelopdr_key), 'mm') - 1, 'yyyy-mm'),
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
''),
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam,
pcp.prs_perslid_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
''),
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam,
bo.bes_bestelopdr_key,
NULL,
NULL,
bo.bes_bestelopdr_id,
DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'),
1
UNION ALL -- Variabele kosten uit FROZEN reserveringen op variabele contracten (via fin_verkoopfactuur_id!)
SELECT x.prs_afdeling_key,
SUBSTR (x.fin_verkoopfactuur_maand, 1, 4) || '-' || SUBSTR (x.fin_verkoopfactuur_maand, 5, 2) maand,
x.prs_bedrijf_key,
x.prs_bedrijf_naam bedrijf,
x.prs_perslid_key,
x.cp_aanhef,
x.cp_naam,
x.cp_email,
x.cnt_contract_key,
x.cnt_contract_nummer_intern,
x.cnt_contract_omschrijving,
x.cnt_contract_nummer,
x.cm_aanhef,
x.cm_naam,
NULL bes_bestelopdr_key,
x.res_rsv_ruimte_key,
NULL mld_opdr_key,
x.fin_verkoopfactuur_omschr bro_id,
DECODE (x.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg,
1 aantal,
SUM (COALESCE (x.verw_prijs, x.prijs, 0)) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM (SELECT pcp.prs_afdeling_key,
vf.fin_verkoopfactuur_maand,
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
'')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email cp_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht,
0, 'Mevr. ',
1, 'Dhr. ',
'')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (
pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
rra.res_rsv_ruimte_key,
vf.fin_verkoopfactuur_omschr,
rra.res_rsv_artikel_prijs verw_prijs,
rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
--DECODE (COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw), NULL, 'VH', 21, 'VH', 'VL')
-- btw,
kl.prs_kenmerklink_waarde
FROM fin_verkoopfactuur vf,
res_v_aanwezigrsv_artikel rra,
res_artikel ra,
cnt_v_aanwezigcontract c,
prs_bedrijf b,
cnt_contract mc,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp,
prs_perslid pcp,
prs_perslid pcm,
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG!
WHERE vf.fin_verkoopfactuur_refkey = rra.res_rsv_artikel_key
--AND rra.res_status_bo_key = 6 -- Verwerkt (kan niet anders)
--AND rra.res_rsv_artikel_verwerkt IS NOT NULL -- Verwerkt (kan niet anders)
--AND rra.res_rsv_artikel_levering > TO_DATE ('20190101', 'yyyymmdd') -- Kan niet anders
AND rra.res_artikel_key = ra.res_artikel_key
AND fac.safe_to_number (vf.fin_verkoopfactuur_id) = c.cnt_contract_key
--AND c.ins_discipline_key = 523 -- Variabele contracten (kan niet anders)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
AND b.prs_bedrijf_key = kl.prs_link_key(+)) x
GROUP BY x.prs_afdeling_key,
SUBSTR (x.fin_verkoopfactuur_maand, 1, 4) || '-' || SUBSTR (x.fin_verkoopfactuur_maand, 5, 2),
x.prs_bedrijf_key,
x.prs_bedrijf_naam,
x.prs_perslid_key,
x.cp_aanhef,
x.cp_naam,
x.cp_email,
x.cnt_contract_key,
x.cnt_contract_nummer_intern,
x.cnt_contract_omschrijving,
x.cnt_contract_nummer,
x.cm_aanhef,
x.cm_naam,
NULL,
x.res_rsv_ruimte_key,
NULL,
x.fin_verkoopfactuur_omschr,
DECODE (x.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'),
1
UNION ALL -- Variabele kosten uit FROZEN opdrachten op variabele contracten
*/
SELECT pcp.prs_afdeling_key,
o.mld_opdr_ordernr maand,
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL,
NULL,
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
COALESCE (nr.mld_kenmerkopdr_waarde, c.cnt_contract_nummer, '-') cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
NULL bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id,
DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'),
1 aantal,
o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM mld_opdr o,
cnt_contract c,
prs_bedrijf b,
cnt_contract mc,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp,
prs_perslid pcp,
prs_perslid pcm,
(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 961) nr, -- Inkoopnummer
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1040) kl, -- Factuur rechtstreeks naar SG!
mld_melding m
WHERE o.mld_opdr_ordernr IS NOT NULL -- Gefactureerd!
AND o.cnt_contract_key = c.cnt_contract_key
AND EXISTS -- timestamp voor reversed billing is gezet.
( SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING')
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
AND o.mld_opdr_key = nr.mld_opdr_key(+)
AND b.prs_bedrijf_key = kl.prs_link_key(+)
AND o.mld_melding_key = m.mld_melding_key
/*
UNION ALL -- Variabele kosten uit FROZEN opdrachten voor Wiltec (niet gekoppeld aan variabel contract)!
SELECT pcp.prs_afdeling_key,
o.mld_opdr_ordernr maand,
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
pcp.prs_perslid_key,
DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cp_aanhef,
DECODE (
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
NULL,
NULL,
COALESCE (pcp.prs_perslid_voorletters,
SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcp.prs_perslid_tussenvoegsel,
NULL, NULL,
pcp.prs_perslid_tussenvoegsel || ' ')
|| pcp.prs_perslid_naam
cp_naam,
pcp.prs_perslid_email,
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
c.cnt_contract_nummer,
DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
cm_aanhef,
DECODE (
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
NULL, NULL,
COALESCE (pcm.prs_perslid_voorletters,
SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
|| ' ')
|| DECODE (pcm.prs_perslid_tussenvoegsel,
NULL, NULL,
pcm.prs_perslid_tussenvoegsel || ' ')
|| pcm.prs_perslid_naam
cm_naam,
NULL bes_bestelopdr_key,
NULL res_rsv_ruimte_key,
o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id,
DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'),
1 aantal,
o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch?
FROM mld_opdr o,
cnt_contract c,
prs_bedrijf b,
cnt_contract mc,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp,
prs_perslid pcp,
prs_perslid pcm,
--(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde
-- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
-- WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
-- AND k.mld_srtkenmerk_key = 961) nr, -- Inkoopnummer
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1040) kl, -- Factuur rechtstreeks naar SG!
mld_melding m
WHERE o.mld_opdr_ordernr IS NOT NULL -- Gefactureerd!
--AND o.mld_statusopdr_key = 7 -- Verwerkt (kan niet anders)
AND o.cnt_contract_key IS NULL -- Niet gekoppeld aan een contract!
AND o.mld_uitvoerende_keys = c.cnt_prs_bedrijf_key
AND c.ins_discipline_key = 523 -- Variabele contracten
AND TO_CHAR (c.cnt_contract_looptijd_van, 'yyyy-mm') <= o.mld_opdr_ordernr
AND TO_CHAR (c.cnt_contract_looptijd_tot, 'yyyy-mm') >= o.mld_opdr_ordernr
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 31041 -- Wiltec
AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
AND c.prs_perslid_key_beh = pcm.prs_perslid_key
--AND o.mld_opdr_key = nr.mld_opdr_key(+)
AND b.prs_bedrijf_key = kl.prs_link_key(+)
AND o.mld_melding_key = m.mld_melding_key
AND NOT EXISTS -- Betreffende maand lopend contract!
(SELECT 1
FROM cnt_v_aanwezigcontract
WHERE ins_discipline_key = 523 -- Variabele contracten
--AND cnt_contract_status = 0 -- NIET Gesloten
AND TO_CHAR (cnt_contract_looptijd_van, 'yyyy-mm') <= o.mld_opdr_ordernr
AND TO_CHAR (cnt_contract_looptijd_tot, 'yyyy-mm') >= o.mld_opdr_ordernr
AND cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_nummer_intern > c.cnt_contract_nummer_intern)
*/;
-- Geexporteerde/bevroren totalen over voorgaande maanden (vast en variabel).
CREATE OR REPLACE VIEW vbxx_v_rap_frozen_fact_tot
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
broc_flag,
--hide_f_bedrijf_key,
fclt_f_leverancier,
--hide_f_contract_key,
contractnr,
beschrijving,
inkoopordernr,
aantal,
kosten
)
AS -- Vaste contractkosten over de FROZEN termijnen
SELECT prs_afdeling_key,
maand,
DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag,
--prs_bedrijf_key,
prs_bedrijf_naam,
--cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr,
SUM (aantal),
SUM (kosten)
FROM vbxx_v_frozen_fact
GROUP BY prs_afdeling_key,
maand,
DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'),
--prs_bedrijf_key,
prs_bedrijf_naam,
--cnt_contract_key,
contractnr,
beschrijving,
inkoopordernr;
/*
-- KFSG#65747: Rapportage tbv. leverancier-contactpersonen!
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_tot_lev
(
fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersoon!
maand,
broc_flag,
fclt_f_leverancier,
contractnr,
beschrijving,
inkoopordernr,
aantal,
kosten
)
AS -- Vaste contractkosten over de FROZEN termijnen
SELECT cp.prs_perslid_key,
v.maand,
DECODE (v.bes_bestelopdr_key, NULL, DECODE (v.res_rsv_ruimte_key, NULL, DECODE (v.mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag,
v.prs_bedrijf_naam,
v.contractnr,
v.beschrijving,
v.inkoopordernr,
SUM (v.aantal),
SUM (COALESCE (v.kosten, 0))
FROM kfsg_v_frozen_fact v,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp
WHERE v.extra_key = cp.prs_bedrijf_key
AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor!
GROUP BY cp.prs_perslid_key,
v.maand,
DECODE (v.bes_bestelopdr_key, NULL, DECODE (v.res_rsv_ruimte_key, NULL, DECODE (v.mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'),
v.prs_bedrijf_naam,
v.contractnr,
v.beschrijving,
v.inkoopordernr;
-- Geexporteerde/bevroren variabele bestelopdrachtkosten over voorgaande maanden (details).
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_fact_bes
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
bes_bestelling_key,
bes_bestelopdr_key,
bes_id,
plaats,
ruimte,
catalogus,
besteldatum,
leverdatum,
bestellingstatus, -- Not used
bestelopdrachtstatus,
afhandeling, -- Not used
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT v.prs_afdeling_key,
v.maand,
x.bes_bestelling_key,
v.bes_bestelopdr_key,
v.bro_id bes_id,
COALESCE (l.alg_locatie_code, ma.mld_adres_naam) plaatsaanduiding,
x.bes_bestelling_plaats ruimte,
x.ins_discipline_omschrijving,
bo.bes_bestelopdr_datum,
bo.bes_bestelopdr_leverdatum, -- Of uit FAC_TRACKING-tabel?
bs.bes_bestellingstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken?
bos.bes_bestelopdrstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken?
COALESCE (bo.bes_bestelopdr_opmerking, bo.bes_bestelopdr_delivery_opmerk) afhandeling,
v.prs_bedrijf_naam,
v.kosten,
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM kfsg_v_frozen_fact v,
bes_bestelopdr bo,
(SELECT DISTINCT boi.bes_bestelopdr_key, b.bes_bestelling_key, b.mld_adres_key_lev, b.bes_bestelling_plaats, b.bes_bestelling_datum, b.bes_bestelling_status, td.ins_discipline_omschrijving
FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, ins_tab_discipline td
WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
AND bbi.bes_bestelling_key = b.bes_bestelling_key
AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = td.ins_discipline_key) x,
bes_bestellingstatuses bs,
bes_bestelopdrstatuses bos,
mld_adres ma,
alg_locatie l,
alg_district d
WHERE v.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bo.bes_bestelopdr_key = x.bes_bestelopdr_key
AND x.bes_bestelling_status = bs.bes_bestellingstatuses_key(+)
AND bo.bes_bestelopdr_status = bos.bes_bestelopdrstatuses_key(+)
AND x.mld_adres_key_lev = ma.mld_adres_key(+)
AND ma.alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+);
-- KFSG#65747: Rapportage tbv. leverancier-contactpersonen!
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_bes_lev
(
fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen!
maand,
bes_bestelling_key,
bes_bestelopdr_key,
bes_id,
plaats,
ruimte,
catalogus,
besteldatum,
leverdatum,
bestellingstatus, -- Not used
bestelopdrachtstatus,
afhandeling, -- Not used
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT cp.prs_perslid_key,
v.maand,
x.bes_bestelling_key,
v.bes_bestelopdr_key,
v.bro_id bes_id,
COALESCE (l.alg_locatie_code, ma.mld_adres_naam) plaatsaanduiding,
x.bes_bestelling_plaats ruimte,
x.ins_discipline_omschrijving,
bo.bes_bestelopdr_datum,
bo.bes_bestelopdr_leverdatum, -- Of uit FAC_TRACKING-tabel?
bs.bes_bestellingstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken?
bos.bes_bestelopdrstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken?
COALESCE (bo.bes_bestelopdr_opmerking, bo.bes_bestelopdr_delivery_opmerk) afhandeling,
v.prs_bedrijf_naam,
COALESCE (v.kosten, 0),
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM kfsg_v_frozen_fact v,
bes_bestelopdr bo,
(SELECT DISTINCT boi.bes_bestelopdr_key, b.bes_bestelling_key, b.mld_adres_key_lev, b.bes_bestelling_plaats, b.bes_bestelling_datum, b.bes_bestelling_status, td.ins_discipline_omschrijving
FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, ins_tab_discipline td
WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
AND bbi.bes_bestelling_key = b.bes_bestelling_key
AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = td.ins_discipline_key) x,
bes_bestellingstatuses bs,
bes_bestelopdrstatuses bos,
mld_adres ma,
alg_locatie l,
alg_district d,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp
WHERE v.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bo.bes_bestelopdr_key = x.bes_bestelopdr_key
AND x.bes_bestelling_status = bs.bes_bestellingstatuses_key(+)
AND bo.bes_bestelopdr_status = bos.bes_bestelopdrstatuses_key(+)
AND x.mld_adres_key_lev = ma.mld_adres_key(+)
AND ma.alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND v.extra_key = cp.prs_bedrijf_key
AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor!
;
-- Geexporteerde/bevroren variabele reserveringskosten over voorgaande maanden (details).
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_fact_res
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
res_reservering_key,
res_rsv_ruimte_key,
res_id,
plaats, -- Gebouw
ruimte,
activiteit,
omschrijving,
van_datum, -- Not used
van_tijd,
tot_tijd,
status,
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT v.prs_afdeling_key,
v.maand,
rrr.res_reservering_key,
v.res_rsv_ruimte_key,
v.bro_id res_id,
DECODE (
og.alg_type,
'R', og.alg_gebouw_code,
'V', og.alg_gebouw_code,
'G', og.alg_gebouw_code,
'T', og.alg_terreinsector_code,
l.alg_locatie_code)
plaatsaanduiding,
COALESCE ((SELECT res_ruimte_nr FROM res_ruimte WHERE res_ruimte_key = rro.res_ruimte_key), og.alg_plaatsaanduiding) ruimte,
ra.res_activiteit_omschrijving,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rs.res_status_bo_omschrijving,
v.prs_bedrijf_naam,
v.kosten,
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM kfsg_v_frozen_fact v,
res_rsv_ruimte rrr,
res_activiteit ra,
res_status_bo rs,
res_ruimte_opstelling rro,
( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_key) rar1,
( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NOT NULL
GROUP BY res_ruimte_key) rar2,
alg_v_onroerendgoed_gegevens og,
alg_locatie l,
alg_district d
WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_activiteit_key = ra.res_activiteit_key
AND rrr.res_status_bo_key = rs.res_status_bo_key(+) -- Status van onderliggende artikelen/delen betrekken?
AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = og.alg_ruimte_key
AND og.alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+);
-- KFSG#65747: Rapportage tbv. leverancier-contactpersonen!
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_res_lev
(
fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen!
maand,
res_reservering_key,
res_rsv_ruimte_key,
res_id,
plaats, -- Gebouw
ruimte,
activiteit,
omschrijving,
van_datum, -- Not used
van_tijd,
tot_tijd,
status,
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT cp.prs_perslid_key,
v.maand,
rrr.res_reservering_key,
v.res_rsv_ruimte_key,
v.bro_id res_id,
DECODE (
og.alg_type,
'R', og.alg_gebouw_code,
'V', og.alg_gebouw_code,
'G', og.alg_gebouw_code,
'T', og.alg_terreinsector_code,
l.alg_locatie_code)
plaatsaanduiding,
COALESCE ((SELECT res_ruimte_nr FROM res_ruimte WHERE res_ruimte_key = rro.res_ruimte_key), og.alg_plaatsaanduiding) ruimte,
ra.res_activiteit_omschrijving,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rs.res_status_bo_omschrijving,
v.prs_bedrijf_naam,
COALESCE (v.kosten, 0),
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM kfsg_v_frozen_fact v,
res_rsv_ruimte rrr,
res_activiteit ra,
res_status_bo rs,
res_ruimte_opstelling rro,
( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_key) rar1,
( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NOT NULL
GROUP BY res_ruimte_key) rar2,
alg_v_onroerendgoed_gegevens og,
alg_locatie l,
alg_district d,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp
WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_activiteit_key = ra.res_activiteit_key
AND rrr.res_status_bo_key = rs.res_status_bo_key(+) -- Status van onderliggende artikelen/delen betrekken?
AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = og.alg_ruimte_key
AND og.alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND v.extra_key = cp.prs_bedrijf_key
AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor!
;
*/
-- Geexporteerde/bevroren variabele opdrachtkosten over voorgaande maanden (details).
CREATE OR REPLACE VIEW vbxx_v_rap_frozen_fact_mld
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
prio,
mld_melding_key,
mld_opdr_key,
opdr_id,
plaats, -- Gebouw
ruimte,
mld_stdmelding_oms,
opdrachttype,
omschrijving,
begindatum,
einddatum,
meldingstatus,
opdrachtstatus,
afhandeling,
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT v.prs_afdeling_key,
v.maand,
TO_CHAR (m.mld_melding_spoed),
m.mld_melding_key,
o.mld_opdr_key,
COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id,
DECODE (
og.alg_type,
'R', og.alg_gebouw_code,
'V', og.alg_gebouw_code,
'G', og.alg_gebouw_code,
'T', og.alg_terreinsector_code,
l.alg_locatie_code)
plaatsaanduiding,
DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte,
sm.mld_stdmelding_omschrijving,
ot.mld_typeopdr_omschrijving,
o.mld_opdr_omschrijving,
o.mld_opdr_datumbegin begindatum,
--TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum,
fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum,
ms.mld_statuses_omschrijving,
os.mld_statusopdr_omschrijving,
o.mld_opdr_opmerking,
v.prs_bedrijf_naam,
o.mld_opdr_kosten,
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM vbxx_v_frozen_fact v,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
mld_melding m,
mld_statuses ms,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
alg_locatie l,
alg_district d,
alg_v_onroerendgoed_gegevens og
WHERE v.mld_opdr_key = o.mld_opdr_key
AND o.mld_statusopdr_key = os.mld_statusopdr_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);
-- KFSG#65747: Rapportage tbv. leverancier-contactpersonen!
CREATE OR REPLACE VIEW vbxx_v_rap_frozen_mld_lev
(
fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen!
maand,
prio,
mld_melding_key,
mld_opdr_key,
opdr_id,
plaats, -- Gebouw
ruimte,
mld_stdmelding_oms,
opdrachttype,
omschrijving,
begindatum,
einddatum,
meldingstatus,
opdrachtstatus,
afhandeling,
fclt_f_leverancier,
kosten,
fclt_f_contractnr,
fclt_f_inkoopordernr,
fclt_x_district
)
AS
SELECT cp.prs_perslid_key,
v.maand,
TO_CHAR (m.mld_melding_spoed),
m.mld_melding_key,
o.mld_opdr_key,
COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id,
DECODE (
og.alg_type,
'R', og.alg_gebouw_code,
'V', og.alg_gebouw_code,
'G', og.alg_gebouw_code,
'T', og.alg_terreinsector_code,
l.alg_locatie_code)
plaatsaanduiding,
DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte,
sm.mld_stdmelding_omschrijving,
ot.mld_typeopdr_omschrijving,
o.mld_opdr_omschrijving,
o.mld_opdr_datumbegin begindatum,
--TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum,
fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum,
ms.mld_statuses_omschrijving,
os.mld_statusopdr_omschrijving,
o.mld_opdr_opmerking,
v.prs_bedrijf_naam,
COALESCE (o.mld_opdr_kosten, 0),
v.contractnr,
v.inkoopordernr,
d.alg_district_omschrijving
FROM vbxx_v_frozen_fact v,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
mld_melding m,
mld_statuses ms,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
alg_locatie l,
alg_district d,
alg_v_onroerendgoed_gegevens og,
(SELECT *
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL) cp
WHERE v.mld_opdr_key = o.mld_opdr_key
AND o.mld_statusopdr_key = os.mld_statusopdr_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
AND v.extra_key = cp.prs_bedrijf_key
AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor!
;
CREATE OR REPLACE PROCEDURE vbxx_select_fact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
/*
-- Bevries vaste contractkosten in eigen tabel.
CURSOR c1
IS
SELECT DISTINCT '[' || TO_CHAR (v.cnt_contract_key) || '] ' aanduiding,
v.maand, v.cnt_contract_key, v.prs_bedrijf_key, v.inkoopordernr, v.kosten
FROM kfsg_v_actual_fact v
WHERE v.bes_bestelopdr_key IS NULL AND v.res_rsv_ruimte_key IS NULL AND v.mld_opdr_key IS NULL
ORDER BY 3;
-- Zet "variabele" BES-bestelopdrachten die voor de 1e zijn geleverd op AV.
-- Alleen op variabele contracten.
CURSOR c2
IS
SELECT DISTINCT '[' || TO_CHAR (v.bes_bestelopdr_key) || '|' || v.bro_id || '] ' aanduiding,
v.maand, v.bes_bestelopdr_key, bbi.bes_bestelling_key, v.cnt_contract_key
FROM kfsg_v_actual_fact v, bes_bestelopdr_item boi, bes_bestelling_item bbi
WHERE v.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
ORDER BY 3;
-- Zet "variabele" RES-cateringregels die voor de 1e hebben plaatsgevonden op AV
-- en meld - zover niet al gebeurd - de deelreservering af (in juiste volgorde).
-- Alleen op variabele contracten.
CURSOR c3
IS
SELECT DISTINCT '[' || TO_CHAR (v.res_rsv_ruimte_key) || '|' || v.bro_id || '] ' aanduiding,
v.maand, v.res_rsv_ruimte_key,
rra.res_status_bo_key,
rra.res_rsv_artikel_key, rra.res_artikel_key,
v.cnt_contract_key, v.bro_id, v.prs_bedrijf_key, v.prs_bedrijf_naam
FROM kfsg_v_actual_fact v, res_v_aanwezigrsv_artikel rra, res_artikel ra
WHERE v.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
AND rra.res_rsv_artikel_verwerkt IS NULL
AND rra.res_rsv_artikel_dirtlevel = 0 -- TODO:Niet dirty?
AND rra.res_artikel_key = ra.res_artikel_key
AND COALESCE (ra.res_artikel_volgnummer, 0) <= 900 -- KFSG#74625: Voor facturatie uitsluiten artikelen met een volgnummer >900!
UNION ALL
SELECT DISTINCT '[' || TO_CHAR (v.res_rsv_ruimte_key) || '|' || v.bro_id || '] ' aanduiding,
v.maand, v.res_rsv_ruimte_key,
rrr.res_status_bo_key,
NULL res_rsv_artikel_key, NULL res_artikel_key,
v.cnt_contract_key, v.bro_id, v.prs_bedrijf_key, v.prs_bedrijf_naam
FROM kfsg_v_actual_fact v, res_v_aanwezigrsv_ruimte rrr
WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
ORDER BY 1, 5, 3;
*/
-- Zet "variabele" MLD-opdrachten die voor de 1e zijn afgerond op AV.
-- Alleen op variabele contracten <20>n geen dispuut.
CURSOR c4
IS
SELECT DISTINCT '[' || TO_CHAR (v.mld_opdr_key) || '|' || v.bro_id || '] ' aanduiding,
v.maand, v.mld_opdr_key, v.cnt_contract_key, v.kosten
FROM vbxx_v_actual_fact v
WHERE v.mld_opdr_key IS NOT NULL
AND v.contractnr NOT LIKE '%/DISPUUT'
ORDER BY 3;
/*
-- Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV.
-- Afgerond/kosten meerekenen op vaste contracten en geen dispuut
-- Afgemeld/kosten niet meerekenen, geen offerteaanvraag en geen dispuut
-- Afgerond/kosten niet meerekenen en geen dispuut (= geaccepteerde offerteaanvragen)
CURSOR c5
IS
SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding,
o.mld_opdr_key
FROM mld_opdr o, mld_typeopdr ot, cnt_contract c
WHERE o.mld_statusopdr_key = 9 -- KV
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_kosten = 1 -- Kosten meerekenen=Ja
AND o.cnt_contract_key = c.cnt_contract_key
AND c.ins_discipline_key = 522 -- Vaste contracten
AND NOT EXISTS -- Niet gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 141 -- Dispuut
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm')
UNION ALL
SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding,
o.mld_opdr_key
FROM mld_opdr o, mld_typeopdr ot
WHERE o.mld_statusopdr_key = 6 -- TV
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_kosten = 0 -- Kosten meerekenen=Nee
AND ot.mld_typeopdr_key != 220 -- Offerteaanvraag
AND NOT EXISTS -- Niet gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 141 -- Dispuut
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm')
UNION ALL
SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding,
o.mld_opdr_key
FROM mld_opdr o, mld_typeopdr ot
WHERE o.mld_statusopdr_key = 9 -- KV (ooit met kosten en Offerteaanvragen)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_kosten = 0 -- Kosten meerekenen=Nee
AND NOT EXISTS -- Niet gemarkeerd als dispuut!
(SELECT 1
FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 141 -- Dispuut
AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt
AND (fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm')
OR fac.gettrackingdate ('ORDOOK', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm'))
ORDER BY 2;
*/
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_verkoopfactuurkop_key NUMBER (10);
v_prijs NUMBER (9, 2);
v_ts_kenmerk_key NUMBER (10);
v_factuurschema_key NUMBER (10);
BEGIN
-- Op 10e dag van de maand (via scheduled task):
-- 1. Bevries vaste contractkosten in eigen tabel (incl. malus?).
-- 2. Zet "variabele" bestelopdrachten die voor de 1e zijn geleverd op AV.
-- 3. Zet "variabele" catering-reserveringen die voor de 1e hebben plaatsgevonden op AV.
-- 4. Zet "variabele" opdrachten die voor de 1e zijn afgerond op AV.
-- 5. Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV.
-- x. Doe niets met afgewezen/geannuleerde opdrachten?
v_count := 0;
/*
FOR rec IN c1
LOOP
BEGIN
v_errormsg := 'Fout toevoegen vaste contractkosten';
INSERT INTO fac_usrdata (fac_usrtab_key,
fac_usrdata_code,
fac_usrdata_omschr,
fac_usrdata_aanmaak,
fac_usrdata_vervaldatum,
fac_usrdata_prijs)
VALUES (161, -- VasteKostenMnd
rec.maand || '/' || TO_CHAR (rec.cnt_contract_key),
TO_CHAR (rec.prs_bedrijf_key) || '/' || rec.inkoopordernr, -- TODO: Of weg?
SYSDATE,
NULL,
rec.kosten);
v_count := v_count + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-CAV');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Vaste contractkosten bevroren: ' || TO_CHAR (v_count), '');
COMMIT;
v_count := 0;
FOR rec IN c2
LOOP
BEGIN
v_errormsg := 'Fout bijwerken ordernummer (BES).';
UPDATE bes_bestelling
SET bes_bestelling_ordernr = rec.maand || '/' || TO_CHAR (rec.cnt_contract_key)
WHERE bes_bestelling_key = rec.bes_bestelling_key;
v_errormsg := 'Fout bijwerken status (BES).';
BES.setbestelopdrstatus (rec.bes_bestelopdr_key, 7, 3);
BES.setbestellingstatus (rec.bes_bestelling_key, 7, 3); -- TODO: Soms >1 bestelopdrachten???
v_count := v_count + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-BAV');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Variabele bestelopdrachten bevroren: ' || TO_CHAR (v_count), '');
COMMIT;
-- Maak elke factuurrun voor elke reverse te billen res_rsv_xxx-regel een
-- fin_verkoopfactuur-regel aan onder dezelfde fin_verkoopfactuurkop (<28><>n
-- kop per maand)!
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
VALUES ('RES-billing' || TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm'))
RETURNING fin_verkoopfactuurkop_key
INTO v_verkoopfactuurkop_key;
COMMIT;
v_count := 0;
FOR rec IN c3
LOOP
BEGIN
IF rec.res_rsv_artikel_key IS NOT NULL
THEN -- Catering-regel
v_errormsg := 'Fout bepalen res_rsv_artikel_prijs';
SELECT res.getartikelprijs (rec.res_rsv_artikel_key)
INTO v_prijs
FROM DUAL;
IF rec.res_status_bo_key = 2
THEN
v_errormsg := 'Fout afmelden res_rsv_artikel';
UPDATE res_rsv_artikel
SET res_status_bo_key = 5,
res_rsv_artikel_prijs = v_prijs,
res_rsv_artikel_inkoopprijs =
(SELECT res_artikel_inkoopprijs
FROM res_artikel
WHERE res_artikel_key = rec.res_artikel_key),
res_rsv_artikel_btw =
(SELECT res_artikel_btw
FROM res_artikel
WHERE res_artikel_key = rec.res_artikel_key)
WHERE res_rsv_artikel_key = rec.res_rsv_artikel_key;
v_errormsg := 'Fout tracken afmelding catering';
fac.trackaction ('RESAFM', rec.res_rsv_ruimte_key, NULL, NULL, 'Catering afgemeld');
END IF;
IF rec.res_status_bo_key != 6
THEN
v_errormsg := 'Fout verwerken res_rsv_artikel';
UPDATE res_rsv_artikel
SET res_status_bo_key = 6 -- AV (en zet ook Verwerkt-date)
WHERE res_rsv_artikel_key = rec.res_rsv_artikel_key;
v_errormsg := 'Fout tracken verwerking catering';
fac.trackaction ('RESVER', rec.res_rsv_ruimte_key, NULL, NULL, 'Catering verwerkt');
END IF;
v_errormsg := 'Fout toevoegen verkoopfactuur';
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_bedrijf_key,
prs_debiteur_naam,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_maand)
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (rec.cnt_contract_key), -- Contract
SYSDATE,
rec.bro_id,
'', -- Er bestaat geen xml-node voor res_rsv_artikel!
rec.res_rsv_artikel_key,
rec.prs_bedrijf_key, -- Leverancier-key (crediteur)
rec.prs_bedrijf_naam, -- Leverancier-naam (crediteur)
v_prijs, -- Netto bedrag, want alle bedragen excl. BTW, toch?
SUBSTR (rec.maand, 1, 4) || SUBSTR (rec.maand, 6, 2));
v_count := v_count + 1;
COMMIT;
ELSE -- Ruimte-regel
IF rec.res_status_bo_key = 2
THEN
v_errormsg := 'Fout bepalen res_rsv_ruimte_prijs';
SELECT res.getruimteprijs (rec.res_rsv_ruimte_key)
INTO v_prijs
FROM DUAL;
v_errormsg := 'Fout afmelden res_rsv_ruimte';
UPDATE res_rsv_ruimte
SET res_status_bo_key = 5,
res_rsv_ruimte_prijs = v_prijs
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_errormsg := 'Fout tracken afmelding ruimte';
fac.trackaction ('RESAFM', rec.res_rsv_ruimte_key, NULL, NULL, NULL);
END IF;
-- Contract kan niet via RES-ordernr historisch worden opgeslagen,
-- want onder <20><>n res_rsv_ruimte kunnen de artikelen per catalogus
-- worden gefactureerd aan een verschillende leverancier!
--v_errormsg := 'Fout bijwerken ordernummer (RES).';
--UPDATE res_rsv_ruimte
-- SET res_rsv_ruimte_ordernr = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') || '/' || TO_CHAR (rec.cnt_contract_key)
-- WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-RAV');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Variabele cateringregels bevroren: ' || TO_CHAR (v_count), '');
COMMIT;
*/
v_count := 0;
-- Bepaal de key van het kenmerk om de timestamp op te slaan
SELECT mld_kenmerk_key
INTO v_ts_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_typeopdr ot
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = ot.mld_typeopdr_key
AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%';
FOR rec IN c4
LOOP
BEGIN
v_errormsg := 'Fout bijwerken ordernummer (MLD).';
UPDATE mld_opdr
SET mld_opdr_ordernr = rec.maand
WHERE mld_opdr_key = rec.mld_opdr_key;
v_errormsg := 'Fout bijwerken status (MLD).';
FLX.setflex('OPD', v_ts_kenmerk_key, rec.mld_opdr_key, TO_CHAR(SYSDATE, 'dd-mm-yyyy hh24:mi:ss'));
-- Om tot een goede factuurmatch te komen wordt het bedrag van de opdracht toegevoegd aan het factuurschema
-- van het variabele contract.
BEGIN
SELECT cnt_factuurschema_key
INTO v_factuurschema_key
FROM cnt_factuurschema f
WHERE f.cnt_contract_key = rec.cnt_contract_key
AND f.cnt_factuurschema_boekmaand = rec.maand;
UPDATE cnt_factuurschema
SET cnt_factuurschema_bedrag = cnt_factuurschema_bedrag + rec.kosten
WHERE cnt_factuurschema_key = v_factuurschema_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO cnt_factuurschema (cnt_contract_key, cnt_factuurschema_boekmaand, cnt_factuurschema_bedrag)
VALUES (rec.cnt_contract_key, rec.maand, rec.kosten);
END;
v_count := v_count + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-OAV1');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Variabele opdrachten bevroren: ' || TO_CHAR (v_count), '');
COMMIT;
/*
v_count := 0;
FOR rec IN c5
LOOP
BEGIN
v_errormsg := 'Fout bijwerken status (inclusief opdrachten).';
MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 3);
v_count := v_count + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-OAV2');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Inclusief opdrachten bevroren: ' || TO_CHAR (v_count), '');
COMMIT;
*/
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E', v_errormsg, 'Proces FACT_EXPORT afgebroken!');
COMMIT;
END;
/
CREATE OR REPLACE VIEW vbxx_v_noti_te_factureren
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS
WITH cp
AS (SELECT cp1.prs_bedrijf_key, cp1.prs_contactpersoon_email, p1.prs_perslid_email
FROM prs_v_aanwezigkenmerklink kl1, prs_kenmerk k, prs_contactpersoon cp1, prs_v_aanwezigperslid p1
WHERE kl1.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'FACTUURNOTI' -- Contactpersoon factuurnotificatie!
AND k.prs_kenmerk_verwijder IS NULL
AND kl1.prs_link_key = cp1.prs_contactpersoon_key
AND cp1.prs_contactpersoon_verwijder IS NULL
AND cp1.prs_perslid_key = p1.prs_perslid_key(+))
SELECT DISTINCT sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (REPLACE (sn.fac_srtnotificatie_oms, '##LEV##', v.prs_bedrijf_naam), '##MND##', v.maand),
r.fac_usrrap_key,
v.extra_key,
COALESCE (cp.prs_contactpersoon_email, cp.prs_perslid_email),
NULL
FROM vbxx_v_frozen_fact v,
cp cp,
fac_usrrap r,
fac_srtnotificatie sn
WHERE TO_CHAR (SYSDATE, 'dd') = '08' -- 8e van de maand!
AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
AND v.extra_key = cp.prs_bedrijf_key
AND UPPER (r.fac_usrrap_view_name) = 'VBXX_V_FROZEN_FACT'
AND sn.fac_srtnotificatie_code = 'CUST90'
UNION ALL
SELECT DISTINCT sn.fac_srtnotificatie_code,
NULL,
--gg.prs_perslid_key, -- Schiphol-contactpersonen
NULL,
REPLACE (sn.fac_srtnotificatie_oms, '##MND##', v.maand),
r.fac_usrrap_key,
NULL, -- Geen extra_key, dus de hele rapportage!
p.prs_perslid_email,
NULL
FROM vbxx_v_frozen_fact v,
fac_gebruikersgroep gg,
prs_v_aanwezigperslid p,
fac_groep g,
fac_usrrap r,
fac_srtnotificatie sn
WHERE TO_CHAR (SYSDATE, 'dd') = '08' -- 8e van de maand!
AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
AND gg.fac_groep_key = g.fac_groep_key
AND g.fac_groep_externid = 'FACTUURNOTI'
AND gg.prs_perslid_key = p.prs_perslid_key
AND UPPER (r.fac_usrrap_view_name) = 'VBXX_V_FROZEN_FACT'
AND sn.fac_srtnotificatie_code = 'CUST91';
--
-- Notificatie naar de personen die offertes mogen goedkeuren in het geval de laatste offerte van
-- een melding recentelijk is afgemeld. We notificeren mensen met ORDOAP en ORDBOF rechten omdat ORDOAP
-- rechten geen plaats scope hebben worden ook de ORDBOF leesrechten meegenomen.
-- We kijken naar meldingen waar geen openstaande offerteopdracht is.
CREATE OR REPLACE VIEW vbxx_v_noti_offerte_goedk
(
sender,
receiver,
text,
code,
key,
xkey
)
AS
WITH
ftracking
AS
( SELECT o.mld_melding_key
FROM fac_tracking ft,
fac_srtnotificatie fsn,
mld_opdr o,
mld_typeopdr ot
WHERE fsn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
AND fac_tracking_refkey = o.mld_opdr_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_isofferte = 1
AND fac_srtnotificatie_code = 'ORDAFM'
AND ft.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_OFFERTE_GOEDK')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_OFFERTE_GOEDK')
AND o.mld_statusopdr_key = 6
AND NOT EXISTS
(SELECT 1
FROM mld_opdr o2, mld_typeopdr ot2
WHERE o2.mld_typeopdr_key = ot2.mld_typeopdr_key
AND ot2.mld_typeopdr_isofferte = 1
AND o2.mld_statusopdr_key = 5
AND o.mld_melding_key = o2.mld_melding_key)
GROUP BY o.mld_melding_key)
SELECT NULL,
g.prs_perslid_key_verantw,
'Offerte(s) m.b.t. melding ' || m.mld_melding_key || ' zijn afgemeld en dienen beoordeeld te worden',
'CUST92',
m.mld_melding_key,
NULL
FROM mld_melding m,
mld_stdmelding std,
ftracking ft2,
alg_gebouw g,
alg_v_onroerendgoed aog
WHERE m.mld_melding_key = ft2.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
AND aog.alg_gebouw_key = g.alg_gebouw_key;
-- Notificatie naar de FM-er (behandelaar van de melding) dat alle blokken uit de melding zijn afgehandeld.
CREATE OR REPLACE VIEW vbxx_v_noti_kenm_blok_afgeh
(
SENDER,
RECEIVER,
TEXT,
CODE,
KEY,
XKEY
)
AS
WITH
ftracking
AS
( SELECT t.fac_tracking_refkey mld_melding_key
FROM fac_tracking t
WHERE fac_tracking_oms LIKE '%Onderdeel is behandeld%'
AND NOT EXISTS
(SELECT 1
FROM mld_kenmerkblokmelding kbm
WHERE mld_kenmerkblokmelding_afmelddatum IS NULL
AND ins_discipline_key IS NOT NULL
AND t.fac_tracking_refkey = kbm.mld_melding_key)
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_KENM_BLOK_AFGEH')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_KENM_BLOK_AFGEH')
GROUP BY fac_tracking_refkey)
SELECT NULL,
m.mld_melding_behandelaar2_key,
'(Klant)taken van melding ##KEY## zijn afgemeld en dienen beoordeeld te worden.',
'CUST93',
m.mld_melding_key,
NULL
FROM mld_melding m, ftracking ft2
WHERE m.mld_melding_key = ft2.mld_melding_key AND m.mld_melding_behandelaar2_key IS NOT NULL;
CREATE OR REPLACE VIEW vbxx_v_noti_kenm_blok_reminder
AS
WITH
bof_rechten
AS
(SELECT gg.prs_perslid_key, ins_discipline_key, gr.fac_gebruiker_alg_level_write alg_level_write
FROM fac_functie f,
fac_groeprechten gr,
fac_groep g,
fac_gebruikersgroep gg
WHERE f.fac_functie_code = 'WEB_MLDBOF'
AND f.fac_functie_key = gr.fac_functie_key
AND gr.fac_groep_key = g.fac_groep_key
AND g.fac_groep_key = gg.fac_groep_key)
SELECT DISTINCT
NULL sender,
COALESCE (kbm.prs_perslid_key, br.prs_perslid_key) receiver,
'Herinnering: Beoordeling kostenopgave van melding ' || m.mld_melding_key || ' (##DISC##/##STDMLD##)' text,
'CUST94' code,
m.mld_melding_key key,
NULL xkey
FROM mld_kenmerkblokmelding kbm,
fac_tracking t,
bof_rechten br,
fac_v_my_locations ml,
mld_melding m
WHERE kbm.mld_melding_key = t.fac_tracking_refkey
AND kbm.mld_kenmerkblokmelding_afmelddatum IS NULL
AND t.fac_tracking_oms LIKE 'Behandeling is toegewezen aan behandelteam Facility Management klant%'
AND kbm.mld_melding_key = m.mld_melding_key
AND br.alg_level_write = ml.niveau
AND ml.prs_perslid_key = br.prs_perslid_key
AND ml.alg_locatie_key = m.mld_alg_locatie_key
AND kbm.ins_discipline_key = br.ins_discipline_key
AND TRUNC (SYSDATE) - TRUNC (fac_tracking_datum) = 7;
--
-- INKOOPFACTUREN RICHTING EXACT
--
CREATE OR REPLACE VIEW vbxx_v_factuur_gegevens
AS
SELECT f.fin_factuur_key,
DECODE (
c.cnt_contract_key,
NULL, DECODE (
bo.bes_bestelopdr_key,
NULL, (SELECT sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key),
bo.bes_bestelopdr_id),
'C'
|| TO_CHAR (cnt_contract_nummer_intern)
|| DECODE (cnt_contract_versie, NULL, NULL, '.' || cnt_contract_versie))
opdracht_id,
f.fin_factuur_datum,
f.fin_factuur_nr,
COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))
prs_bedrijf_key,
DECODE (
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink kl, prs_kenmerk k
WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'ONDERDEELVEBEGO'
AND k.prs_kenmerk_verwijder IS NULL
AND kl.prs_link_key =
COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))),
'1', 63,
62)
dagboek,
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,
fr.fin_factuurregel_key,
f.fin_factuur_debiteur_nr,
f.fin_factuur_boekmaand,
prs_kostensoort_oms,
k.prs_kostensoort_refcode,
k.prs_kostensoort_opmerking,
k.prs_kostensoort_key,
g.alg_gebouw_code,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk ck
WHERE kc.cnt_contract_key = c.cnt_contract_key
AND kc.cnt_kenmerk_key = ck.cnt_kenmerk_key
AND ck.cnt_kenmerk_code = 'EXACT_CODE'
AND ck.cnt_kenmerk_verwijder IS NULL)
exact_code_contract,
(SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk gk
WHERE alg_onrgoed_key = g.alg_gebouw_key
AND aogk.alg_kenmerk_key = gk.alg_kenmerk_key
AND gk.alg_kenmerk_code = 'EXACT_CODE'
AND gk.alg_kenmerk_verwijder IS NULL)
exact_code_gebouw,
(SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key)
AND k.alg_kenmerk_code = 'AFWDAGBOEKNR'
AND k.alg_kenmerk_verwijder IS NULL)
afw_dagboek,
(SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key)
AND k.alg_kenmerk_code = 'AFWKSTDRCODE'
AND k.alg_kenmerk_verwijder IS NULL)
afw_kstdrcode,
o.mld_opdr_key,
c.cnt_contract_key,
bo.bes_bestelopdr_key,
( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn
-- met status ingevoerd, afgewezen of incompleet
SELECT DECODE (COUNT (*), 0, f.fin_factuur_statuses_key, 2)
FROM fin_factuur f_t,
cnt_contract c_t,
bes_bestelopdr b_t,
mld_opdr o_t
WHERE f_t.fin_factuur_verwijder IS NULL
AND f_t.mld_opdr_key = o_t.mld_opdr_key(+)
AND f_t.cnt_contract_key = c_t.cnt_contract_key(+)
AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+)
AND COALESCE (
o_t.mld_uitvoerende_keys,
COALESCE (
b_t.prs_bedrijf_key,
COALESCE (
c_t.cnt_prs_bedrijf_key,
(SELECT a.prs_bedrijf_key
FROM prs_v_afdeling a, prs_perslid p
WHERE o_t.mld_uitvoerende_keys = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key)))) =
COALESCE (
o.mld_uitvoerende_keys,
COALESCE (
bo.prs_bedrijf_key,
COALESCE (
c.cnt_prs_bedrijf_key,
(SELECT a.prs_bedrijf_key
FROM prs_v_afdeling a, prs_perslid p
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key))))
AND f.fin_factuur_nr = f_t.fin_factuur_nr
AND f_t.fin_factuur_statuses_key IN (1,
2,
3,
5) -- Afgewezen, Ingevoerd, Incompleet, Ter goedkeuring
AND f.fin_factuur_statuses_key = 6)
fin_factuur_statuses_key,
lk.prs_kostenplaats_nr
lev_kpn,
COALESCE(ml.alg_district_key, cl.alg_district_key) alg_district_key,
(SELECT alg_regio_key
FROM alg_district di
WHERE di.alg_district_key = COALESCE(ml.alg_district_key, cl.alg_district_key) ) alg_regio_key,
DECODE (
f.cnt_contract_key,
NULL, DECODE (
f.bes_bestelopdr_key,
NULL, (SELECT fac_usrdata_code
FROM fac_usrdata ud,
mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk
WHERE o.mld_opdr_key = ko.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR'
AND k.mld_kenmerk_verwijder IS NULL
AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key),
'B'),
(SELECT fac_usrdata_code
FROM fac_usrdata ud,
cnt_kenmerkcontract kc,
cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_kenmerk_code = 'TYPEFACTUUR'
AND k.cnt_kenmerk_verwijder IS NULL
AND FAC.safe_to_number (kc.cnt_kenmerkcontract_waarde) = ud.fac_usrdata_key))
typefactuur
FROM fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
mld_opdr o,
mld_melding m,
alg_locatie ml,
alg_locatie cl,
alg_gebouw g,
mld_typeopdr ot,
cnt_contract c,
bes_bestelopdr bo,
( SELECT fc.fin_factuur_key, MIN (cs.cnt_alg_plaats_key) alg_gebouw_key
FROM fin_factuur fc, cnt_contract_plaats cs
WHERE fc.cnt_contract_key = cs.cnt_contract_key
AND cnt_alg_plaats_code = 'G'
AND cnt_contract_plaats_verwijder IS NULL
GROUP BY fc.fin_factuur_key
UNION ALL
SELECT fo.fin_factuur_key, og.alg_gebouw_key
FROM fin_factuur fo,
mld_opdr o1,
mld_melding m1,
alg_v_allonroerendgoed og
WHERE fo.mld_opdr_key = o1.mld_opdr_key
AND o1.mld_melding_key = m1.mld_melding_key
AND m1.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
UNION ALL
SELECT fb.fin_factuur_key, MIN (g1.alg_gebouw_key) alg_gebouw_key
FROM fin_factuur fb,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_bestelling b,
alg_gebouw g1
WHERE fb.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.mld_adres_key_lev = g1.mld_adres_key
GROUP BY fb.fin_factuur_key) fg,
(SELECT mld_uitvoerende_key, DECODE (u.TYPE, 'B', mld_uitvoerende_key, a.prs_bedrijf_key) prs_bedrijf_key
FROM mld_v_uitvoerende u, prs_v_afdeling a, prs_perslid p
WHERE u.mld_uitvoerende_key = prs_perslid_key(+) AND p.prs_afdeling_key = a.prs_afdeling_key(+)) b_o,
prs_bedrijf b_c,
prs_bedrijf b_b,
prs_kostensoort k,
prs_kostensoortgrp kg,
prs_kostenplaats lk
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_alg_locatie_key = ml.alg_locatie_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.mld_uitvoerende_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_key = fg.fin_factuur_key(+)
AND fg.alg_gebouw_key = g.alg_gebouw_key(+)
AND g.alg_locatie_key = cl.alg_locatie_key(+)
AND f.fin_factuur_verwijder IS NULL;
CREATE OR REPLACE VIEW vbxx_v_export_exact_xml (
result,
result_order
)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT';
CREATE OR REPLACE VIEW vbxx_v_bron_export_exact_xml
(
fin_factuur_key,
opdracht_id,
factuur_nr, -- crediteur factuurnummer
datum, -- factuurdatum
crdnr, -- crediteurnummer
bedrag_txt,
bedrag,
bedrag_incl,
oms_regel, -- omschrijving in de detailregels
reknr, -- grootboekrekeningnr
kstplcode, -- kostenplaats kenmerk bij gebouw
kstdrcode, -- kostendrager afh van grootboek
btw_code,
dagboek,
oms_kop, -- omschrijving in de kopregel
fin_factuur_debiteur_nr, -- crediteur debiteurnummer
alg_district_key,
alg_regio_key,
fin_factuur_boekmaand,
fin_factuur_statuses_key
)
AS
SELECT fin_factuur_key,
opdracht_id,
fin_factuur_nr,
TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd')
datum,
prs_leverancier_nr crdnr,
REPLACE (TO_CHAR (bedrag), ',', '.')
bedrag_txt,
bedrag,
bedrag_incl,
SUBSTR (UPPER (b.prs_bedrijf_naam), 1, 3)
|| ','
|| SUBSTR(fin_factuur_boekmaand, 6,2)
|| ','
|| opdracht_id
oms_regel,
prs_kostensoort_refcode reknr,
COALESCE(exact_code_contract, exact_code_gebouw) kstplcode,
COALESCE(afw_kstdrcode,
CASE WHEN typefactuur = 'A' THEN '00'
WHEN typefactuur = 'B' THEN '10'
WHEN typefactuur = 'C' THEN '20'
WHEN typefactuur = 'D' THEN '30'
END ) kstdrcode,
fin_btwtabelwaarde_code
btw_code,
COALESCE(fg.afw_dagboek, fg.dagboek) dagboek,
SUBSTR(UPPER(b.prs_bedrijf_naam),1,3) || ',' ||
SUBSTR(fin_factuur_boekmaand,6,2) oms_kop,
fin_factuur_debiteur_nr,
alg_district_key,
alg_regio_key,
fin_factuur_boekmaand,
fin_factuur_statuses_key
FROM ( SELECT g.fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
SUM (fin_factuurregel_totaal)
bedrag,
SUM (fin_factuurregel_totaal + fin_factuurregel_btw)
bedrag_incl,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
exact_code_contract,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
g.alg_district_key,
g.alg_regio_key,
g.typefactuur,
g.fin_factuur_statuses_key
FROM vbxx_v_factuur_gegevens g,
vbxx_exp_factuur e
WHERE fin_factuur_statuses_key = 6
AND g.fin_factuur_key = e.fin_factuur_key
AND g.dagboek = e.dagboek
GROUP BY g.fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
exact_code_contract,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
g.alg_district_key,
g.alg_regio_key,
g.typefactuur,
g.fin_factuur_statuses_key) fg,
prs_bedrijf b
WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_leverancier_nr IS NOT NULL;
-- Views tbv de API koppeling met Exact
CREATE OR REPLACE VIEW vbxx_v_factuur_gegevens_api
AS
SELECT f.fin_factuur_key,
f.fin_factuur_externnr,
DECODE (
c.cnt_contract_key,
NULL, DECODE (
bo.bes_bestelopdr_key,
NULL, (SELECT sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key),
bo.bes_bestelopdr_id),
'C'
|| TO_CHAR (cnt_contract_nummer_intern)
|| DECODE (cnt_contract_versie, NULL, NULL, '.' || cnt_contract_versie))
opdracht_id,
f.fin_factuur_datum,
f.fin_factuur_nr,
flx.getflex('FIN', vbxx.get_kenmerk_key('FIN', NULL, 'BOEKSTUKNUMMER'), f.fin_factuur_key) boekstuknr,
COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))
prs_bedrijf_key,
DECODE (
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink kl, prs_kenmerk k
WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_code = 'ONDERDEELVEBEGO'
AND k.prs_kenmerk_verwijder IS NULL
AND kl.prs_link_key =
COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))),
'1', 63,
62)
dagboek,
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,
fr.fin_factuurregel_key,
fr.fin_factuurregel_id,
f.fin_factuur_debiteur_nr,
f.fin_factuur_boekmaand,
prs_kostensoort_oms,
k.prs_kostensoort_refcode,
k.prs_kostensoort_opmerking,
k.prs_kostensoort_key,
g.alg_gebouw_code,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk ck
WHERE kc.cnt_contract_key = c.cnt_contract_key
AND kc.cnt_kenmerk_key = ck.cnt_kenmerk_key
AND ck.cnt_kenmerk_code = 'EXACT_CODE'
AND ck.cnt_kenmerk_verwijder IS NULL)
exact_code_contract,
(SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk gk
WHERE alg_onrgoed_key = g.alg_gebouw_key
AND aogk.alg_kenmerk_key = gk.alg_kenmerk_key
AND gk.alg_kenmerk_code = 'EXACT_CODE'
AND gk.alg_kenmerk_verwijder IS NULL)
exact_code_gebouw,
(SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key)
AND k.alg_kenmerk_code = 'AFWDAGBOEKNR'
AND k.alg_kenmerk_verwijder IS NULL)
afw_dagboek,
(SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key)
AND k.alg_kenmerk_code = 'AFWKSTDRCODE'
AND k.alg_kenmerk_verwijder IS NULL)
afw_kstdrcode,
o.mld_opdr_key,
c.cnt_contract_key,
bo.bes_bestelopdr_key,
fin_factuur_statuses_key,
lk.prs_kostenplaats_nr
lev_kpn,
COALESCE(ml.alg_district_key, cl.alg_district_key) alg_district_key,
(SELECT alg_regio_key
FROM alg_district di
WHERE di.alg_district_key = COALESCE(ml.alg_district_key, cl.alg_district_key) ) alg_regio_key,
DECODE (
f.cnt_contract_key,
NULL, DECODE (
f.bes_bestelopdr_key,
NULL, (SELECT fac_usrdata_code
FROM fac_usrdata ud,
mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk
WHERE o.mld_opdr_key = ko.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR'
AND k.mld_kenmerk_verwijder IS NULL
AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key),
'B'),
(SELECT fac_usrdata_code
FROM fac_usrdata ud,
cnt_kenmerkcontract kc,
cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_kenmerk_code = 'TYPEFACTUUR'
AND k.cnt_kenmerk_verwijder IS NULL
AND FAC.safe_to_number (kc.cnt_kenmerkcontract_waarde) = ud.fac_usrdata_key))
typefactuur,
fin_factuur_flag
FROM fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
mld_opdr o,
mld_melding m,
alg_locatie ml,
alg_locatie cl,
alg_gebouw g,
mld_typeopdr ot,
cnt_contract c,
bes_bestelopdr bo,
( SELECT fc.fin_factuur_key, MIN (cs.cnt_alg_plaats_key) alg_gebouw_key
FROM fin_factuur fc, cnt_contract_plaats cs
WHERE fc.cnt_contract_key = cs.cnt_contract_key
AND cnt_alg_plaats_code = 'G'
AND cnt_contract_plaats_verwijder IS NULL
GROUP BY fc.fin_factuur_key
UNION ALL
SELECT fo.fin_factuur_key, og.alg_gebouw_key
FROM fin_factuur fo,
mld_opdr o1,
mld_melding m1,
alg_v_allonroerendgoed og
WHERE fo.mld_opdr_key = o1.mld_opdr_key
AND o1.mld_melding_key = m1.mld_melding_key
AND m1.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
UNION ALL
SELECT fb.fin_factuur_key, MIN (g1.alg_gebouw_key) alg_gebouw_key
FROM fin_factuur fb,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_bestelling b,
alg_gebouw g1
WHERE fb.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.mld_adres_key_lev = g1.mld_adres_key
GROUP BY fb.fin_factuur_key) fg,
(SELECT mld_uitvoerende_key, DECODE (u.TYPE, 'B', mld_uitvoerende_key, a.prs_bedrijf_key) prs_bedrijf_key
FROM mld_v_uitvoerende u, prs_v_afdeling a, prs_perslid p
WHERE u.mld_uitvoerende_key = prs_perslid_key(+) AND p.prs_afdeling_key = a.prs_afdeling_key(+)) b_o,
prs_bedrijf b_c,
prs_bedrijf b_b,
prs_kostensoort k,
prs_kostensoortgrp kg,
prs_kostenplaats lk
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_alg_locatie_key = ml.alg_locatie_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.mld_uitvoerende_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_key = fg.fin_factuur_key(+)
AND fg.alg_gebouw_key = g.alg_gebouw_key(+)
AND g.alg_locatie_key = cl.alg_locatie_key(+)
AND f.fin_factuur_verwijder IS NULL;
CREATE OR REPLACE VIEW vbxx_v_bron_export_exact_api
(
fin_factuur_key,
fin_factuur_externnr,
opdracht_id,
mld_opdr_key,
factuur_nr, -- crediteur factuurnummer
datum, -- factuurdatum
crdnr, -- crediteurnummer
bedrag_txt,
bedrag,
bedrag_incl,
oms_regel, -- omschrijving in de detailregels
reknr, -- grootboekrekeningnr
kstplcode, -- kostenplaats kenmerk bij gebouw
kstdrcode, -- kostendrager afh van grootboek
btw_code,
dagboek,
oms_kop, -- omschrijving in de kopregel
fin_factuur_debiteur_nr, -- crediteur debiteurnummer
alg_district_key,
alg_regio_key,
alg_regio_adm,
fin_factuur_boekmaand,
fin_factuur_statuses_key,
fin_factuurregel_key,
fin_factuurregel_id,
n_incompleet,
n_niet_akkoord,
factuur_flag,
boekstuknr
)
AS
SELECT fin_factuur_key,
fin_factuur_externnr,
opdracht_id,
mld_opdr_key,
fin_factuur_nr,
TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd')
datum,
prs_leverancier_nr crdnr,
REPLACE (TO_CHAR (bedrag), ',', '.')
bedrag_txt,
bedrag,
bedrag_incl,
SUBSTR (UPPER (b.prs_bedrijf_naam), 1, 3)
|| ','
|| SUBSTR(fin_factuur_boekmaand, 6,2)
|| ','
|| opdracht_id
oms_regel,
prs_kostensoort_refcode reknr,
COALESCE(exact_code_contract, exact_code_gebouw) kstplcode,
COALESCE(afw_kstdrcode,
CASE WHEN typefactuur = 'A' THEN '00'
WHEN typefactuur = 'B' THEN '10'
WHEN typefactuur = 'C' THEN '20'
WHEN typefactuur = 'D' THEN '30'
END ) kstdrcode,
fin_btwtabelwaarde_code
btw_code,
COALESCE(fg.afw_dagboek, fg.dagboek) dagboek,
SUBSTR(UPPER(b.prs_bedrijf_naam),1,3) || ',' ||
SUBSTR(fin_factuur_boekmaand,6,2) oms_kop,
fin_factuur_debiteur_nr,
alg_district_key,
alg_regio_key,
(SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_code = 'ADMINISTRATIE'
AND aogk.alg_onrgoed_key = fg.alg_regio_key) alg_regio_adm,
fin_factuur_boekmaand,
fg.fin_factuur_statuses_key,
fin_factuurregel_key,
fin_factuurregel_id,
(SELECT COUNT(DISTINCT(fg2.fin_factuur_key)) FROM vbxx_v_factuur_gegevens_api fg2
WHERE fg.prs_bedrijf_key = fg2.prs_bedrijf_key
AND fg.fin_factuur_nr = fg2.fin_factuur_nr
AND fg2.fin_factuur_statuses_key = 3) n_incompleet,
(SELECT COUNT(DISTINCT(fg2.fin_factuur_key)) FROM vbxx_v_factuur_gegevens_api fg2
WHERE fg.prs_bedrijf_key = fg2.prs_bedrijf_key
AND fg.fin_factuur_nr = fg2.fin_factuur_nr
AND fg2.fin_factuur_statuses_key <> 6) n_niet_akkoord,
fin_factuur_flag,
boekstuknr
FROM ( SELECT g.fin_factuur_key,
g.fin_factuur_externnr,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
SUM (fin_factuurregel_totaal)
bedrag,
SUM (fin_factuurregel_totaal + fin_factuurregel_btw)
bedrag_incl,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
exact_code_contract,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
g.alg_regio_key,
g.alg_district_key,
g.typefactuur,
g.fin_factuur_statuses_key,
g.fin_factuurregel_key,
g.fin_factuurregel_id,
g.fin_factuur_flag,
g.boekstuknr
FROM vbxx_v_factuur_gegevens_api g
GROUP BY g.fin_factuur_key,
g.fin_factuur_externnr,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
exact_code_contract,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
g.alg_district_key,
g.alg_regio_key,
g.typefactuur,
g.fin_factuur_statuses_key,
g.fin_factuurregel_key,
g.fin_factuurregel_id,
g.fin_factuur_flag,
boekstuknr) fg,
prs_bedrijf b
WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key;
-- Procedure om alle facturen te exporteren naar exact.
CREATE OR REPLACE PROCEDURE vbxx_select_exact_xml (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_dagboek IN VARCHAR2,
p_district_key IN NUMBER,
p_regio_key IN NUMBER DEFAULT NULL
)
AS
CURSOR c(c_dagboek VARCHAR2)
IS
SELECT x.crdnr, x.factuur_nr, MAX(x.datum) datum, MAX(x.oms_kop) oms_kop
FROM vbxx_v_bron_export_exact_xml x
WHERE c_dagboek = x.dagboek
AND (x.alg_district_key = p_district_key OR p_district_key IS NULL)
AND (x.alg_regio_key = p_regio_key OR p_regio_key IS NULL)
GROUP BY x.crdnr, x.factuur_nr;
CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2)
IS
SELECT *
FROM vbxx_v_bron_export_exact_xml
WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr')
AND factuur_nr = c_factuur_nr;
v_order_count NUMBER;
v_amount_sum NUMBER(10,2);
v_amount_sum_incl NUMBER(10,2);
v_count NUMBER;
v_sub_count NUMBER;
v_bestand VARCHAR2(12);
v_boekstuknummer NUMBER;
v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE;
v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE;
--v_boekmaand DATE;
v_bijlagen_key NUMBER;
v_bijlagen_filename FAC_BIJLAGEN.FAC_BIJLAGEN_FILENAME%TYPE;
v_guid VARCHAR2(50);
v_bkstknr_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE;
v_bijlage_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE;
BEGIN
v_order_count := 0;
v_amount_sum := 0;
v_amount_sum_incl := 0;
v_count := 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;
-- wat is de key van het kenmerk boekstuknummer?
SELECT fin_kenmerk_key
INTO v_bkstknr_kenmerk_key
FROM fin_kenmerk k
WHERE k.fin_kenmerk_code = 'BOEKSTUKNUMMER'
AND k.fin_kenmerk_verwijder IS NULL;
-- wat is de key van het kenmerk bijlage?
SELECT fin_kenmerk_key
INTO v_bijlage_kenmerk_key
FROM fin_kenmerk k
WHERE k.fin_kenmerk_code = 'FACTUURBESTAND'
AND k.fin_kenmerk_verwijder IS NULL;
IF p_regio_key IS NOT NULL
THEN
-- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan binnen de aangegeven regio
DELETE fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key
AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek
AND fin_factuur_key IN (SELECT fin_factuur_key
FROM fin_factuur
WHERE fin_factuur_statuses_key <> 7)
AND VBXX.bepaal_fin_regio(kf.fin_factuur_key) = p_regio_key;
-- verwijder de tijdelijke opslag met factuurnummers om in de verwerk te gebruiken
DELETE vbxx_exp_factuur e
WHERE e.dagboek = p_dagboek
AND VBXX.bepaal_fin_regio(e.fin_factuur_key) = p_regio_key;
-- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar
-- ## AAIT#36589
SELECT MAX(fin_kenmerkfactuur_waarde)
INTO v_boekstuknummer
FROM fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key
AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY')
AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek
AND VBXX.bepaal_fin_regio(kf.fin_factuur_key) = p_regio_key;
ELSE
-- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan binnen het aangegeven district
DELETE fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key
AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek
AND fin_factuur_key IN (SELECT fin_factuur_key
FROM fin_factuur
WHERE fin_factuur_statuses_key <> 7)
AND VBXX.bepaal_fin_district(kf.fin_factuur_key) = p_district_key;
-- verwijder de tijdelijke opslag met factuurnummers om in de verwerk te gebruiken
DELETE vbxx_exp_factuur e
WHERE e.dagboek = p_dagboek
AND e.alg_district_key = p_district_key;
-- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar
-- ## AAIT#36589
SELECT MAX(fin_kenmerkfactuur_waarde)
INTO v_boekstuknummer
FROM fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key
AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY')
AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek
AND VBXX.bepaal_fin_district(kf.fin_factuur_key) = p_district_key;
END IF;
-- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
-- deze keys gebruikt kunnen worden.
INSERT INTO vbxx_exp_factuur (fin_factuur_key, dagboek, alg_district_key)
( SELECT DISTINCT fg.fin_factuur_key, fg.dagboek, p_district_key
FROM vbxx_v_factuur_gegevens fg,
prs_bedrijf b
WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_leverancier_nr IS NOT NULL
AND fg.fin_factuur_statuses_key = 6
AND fg.fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum:
AND fg.fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan <20><>n jaar in de toekomst.
AND (fg.alg_district_key = p_district_key OR p_district_key IS NULL) -- oude klanten zijn gescoped op district
AND (fg.alg_regio_key = p_regio_key OR p_regio_key IS NULL) -- de rabobank is gescoped op regio
AND fg.dagboek = p_dagboek
);
IF v_boekstuknummer IS NULL
THEN
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || p_dagboek || '0000');
END IF;
-- header
vbxx.add_xml_row (v_bestand, '<?xml version="1.0" encoding="windows-1252"?>');
vbxx.add_xml_row (v_bestand, '<eExact>');
vbxx.add_xml_row (v_bestand, '<GLEntries>');
FOR rec IN c(p_dagboek)
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;
vbxx.add_xml_row (v_bestand, '<GLEntry status="E" entry="' || xml.char_to_html(v_boekstuknummer) || '">');
vbxx.add_xml_element (v_bestand, 'Description', rec.oms_kop);
vbxx.add_xml_element (v_bestand, 'Date', rec.datum);
vbxx.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD'));
vbxx.add_xml_row (v_bestand, '<Journal type="I" code="' || p_dagboek || '"/>');
v_sub_count := 1;
FOR rec1 IN c_sub (v_crdnr, v_factuur_nr)
LOOP
BEGIN
-- Eerst maar even een kenmerk voor het boekstuknummer aanmaken
FLX.setflex('FIN', v_bkstknr_kenmerk_key, rec1.fin_factuur_key, v_boekstuknummer);
-- De boekmaand wordt mee gegeven in de koppeling naar Exact. Maar voor de onderlegger
-- moet de boekmaand ook goed in Facilitor staan.
--UPDATE fin_factuur
-- SET fin_factuur_boekmaand = TO_CHAR(v_boekmaand, 'YYYYMM')
-- WHERE fin_factuur_key = rec1.fin_factuur_key;
vbxx.add_xml_row (v_bestand, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
vbxx.add_xml_element (v_bestand, 'Date', rec1.datum);
-- Het is niet gelukt om de boekmaand mee te sturen
-- vbxx.add_xml_element (v_bestand, 'FinYear', TO_CHAR(v_boekmaand, 'YYYY') );
-- vbxx.add_xml_element (v_bestand, 'FinPeriod', TO_CHAR(v_boekmaand, 'MM') );
vbxx.add_xml_row (v_bestand, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
vbxx.add_xml_element (v_bestand, 'Description', rec1.oms_regel);
vbxx.add_xml_row (v_bestand, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
vbxx.add_xml_row (v_bestand, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
vbxx.add_xml_row (v_bestand, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
vbxx.add_xml_row (v_bestand, '<Item code=""/>');
vbxx.add_xml_row (v_bestand, '<Amount>');
vbxx.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt);
vbxx.add_xml_row (v_bestand, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
vbxx.add_xml_row (v_bestand, '</Amount>');
vbxx.add_xml_row (v_bestand, '<Payment>');
vbxx.add_xml_element (v_bestand, 'Reference', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr );
vbxx.add_xml_element (v_bestand, 'InvoiceNumber', rec1.fin_factuur_key); -- of moet dit v_boekstuknummer worden????
vbxx.add_xml_row (v_bestand, '</Payment>');
vbxx.add_xml_row (v_bestand, '<FinReferences>');
vbxx.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr);
vbxx.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD'));
vbxx.add_xml_row (v_bestand, '</FinReferences>');
-- Voeg de bijlage toe
SELECT MAX(fac_bijlagen_key)
INTO v_bijlagen_key
FROM fac_v_bijlagen
WHERE fac_bijlagen_module = 'FIN'
AND fac_bijlagen_refkey = rec1.fin_factuur_key
AND fac_bijlagen_kenmerk_key = v_bijlage_kenmerk_key;
IF v_bijlagen_key IS NOT NULL
THEN
SELECT fac_bijlagen_filename
INTO v_bijlagen_filename
FROM fac_v_bijlagen
WHERE fac_bijlagen_key = v_bijlagen_key;
v_guid := sys_guid();
vbxx.add_xml_row (v_bestand, '<DocumentAttachment ID="{' || substr(v_guid,1,8) || '-' || substr(v_guid,8,4) || '-' || substr(v_guid,12,4) || '-' || substr(v_guid,16,4) || '-' || substr(v_guid,20,12) || '}" publish="0">');
vbxx.add_xml_row (v_bestand, '<DocumentType number="7"/>');
vbxx.add_xml_element (v_bestand, 'Subject', xml.char_to_html(v_boekstuknummer));
vbxx.add_xml_element (v_bestand, 'OurRef', xml.char_to_html(v_boekstuknummer));
vbxx.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr);
vbxx.add_xml_row (v_bestand, '<Account code="' || xml.char_to_html(rec1.crdnr) || '"/>');
vbxx.add_xml_element (v_bestand, 'FCLTattachment', v_bijlagen_key);
vbxx.add_xml_row (v_bestand, '</DocumentAttachment>');
END IF;
vbxx.add_xml_row (v_bestand, '</FinEntryLine>');
v_sub_count := v_sub_count + 1;
v_amount_sum := v_amount_sum + rec1.bedrag;
v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl;
END;
END LOOP;
IF v_sub_count = 1
THEN
fac.writelog (p_applname, 'E', 'Fout tijdens Exact export. Factuurnummer: ' || v_factuur_nr || ' Crdnr: ' || v_crdnr,'');
END IF;
vbxx.add_xml_row (v_bestand, '</GLEntry>');
v_order_count := v_order_count + 1;
END;
END LOOP;
vbxx.add_xml_row (v_bestand, '</GLEntries>');
vbxx.add_xml_row (v_bestand, '</eExact>');
fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, '');
END;
/
CREATE OR REPLACE VIEW vbxx_v_export_verwerk_exact (
result,
result_order
)
AS
SELECT 'Lijst met bevroren facturen:' fac_rapport_regel, 0 fac_rapport_volgnr
FROM DUAL
UNION ALL
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'VW_EXACT';
CREATE OR REPLACE PROCEDURE vbxx_select_verwerk_exact (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_dagboek IN VARCHAR2,
p_district_key IN NUMBER,
p_regio_key IN NUMBER DEFAULT NULL
)
AS
CURSOR c_fact
IS
SELECT DISTINCT f.fin_factuur_key, fg.mld_opdr_key
FROM vbxx_exp_factuur f,
vbxx_v_factuur_gegevens fg
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.fin_factuur_statuses_key = 6
AND f.dagboek = p_dagboek
AND (fg.alg_district_key = p_district_key OR p_district_key IS NULL)
AND (fg.alg_regio_key = p_regio_key OR p_regio_key IS NULL);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanvrager NUMBER;
v_bestelling_key NUMBER;
v_bestand VARCHAR2(12);
v_logdate DATE;
v_volgnr NUMBER;
v_statusopdr_key NUMBER;
BEGIN
v_errormsg := 'Geen akties';
v_aanvrager := 3; -- Facilitor
v_logdate := SYSDATE;
v_bestand := 'VW_EXACT';
v_volgnr := 1;
-- Eerst opruiming
DELETE fac_rapport
WHERE fac_rapport_node = v_bestand;
FOR rec1 IN c_fact
LOOP
BEGIN
UPDATE fin_factuur f
SET fin_factuur_statuses_key = 7
WHERE f.fin_factuur_key = rec1.fin_factuur_key;
fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
-- als opdrachtkey IS NOT NULL
IF rec1.mld_opdr_key IS NOT NULL
THEN
SELECT mld_statusopdr_key
INTO v_statusopdr_key
FROM mld_opdr
WHERE mld_opdr_key = rec1.mld_opdr_key;
--als status != afgemeld (6) en afgerond (9)
IF v_statusopdr_key <> 6 AND v_statusopdr_key <> 9
THEN
-- set status op geleverd
MLD.setopdrachtstatus (rec1.mld_opdr_key, 6, NULL);
END IF;
-- als status != afgerond (9)
IF v_statusopdr_key <> 9
THEN
-- set status op 9
MLD.setopdrachtstatus (rec1.mld_opdr_key, 9, NULL);
END IF;
END IF;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel)
VALUES (v_bestand,
v_volgnr,
rec1.fin_factuur_key);
v_volgnr := v_volgnr + 1;
END;
END LOOP;
-- verwijder de enties uit de tijdelijke tabel.
IF p_district_key IS NOT NULL
THEN
DELETE vbxx_exp_factuur e
WHERE e.dagboek = p_dagboek
AND e.alg_district_key = p_district_key;
ELSE
DELETE vbxx_exp_factuur e
WHERE e.dagboek = p_dagboek
AND alg_district_key IN (SELECT d.alg_district_key FROM alg_district d WHERE d.alg_regio_key = p_regio_key);
END IF;
END;
/
CREATE OR REPLACE PROCEDURE vbxx_verwerk_exact_api (
p_factuur_nr IN VARCHAR2,
p_crdnr IN VARCHAR2
)
AS
CURSOR c_fact
IS
SELECT DISTINCT f.fin_factuur_key, f.mld_opdr_key
FROM vbxx_v_bron_export_exact_api f
WHERE f.factuur_nr = p_factuur_nr
AND f.crdnr = p_crdnr
AND f.fin_factuur_statuses_key = 6; -- goedgekeurd
v_aanvrager NUMBER;
v_statusopdr_key NUMBER;
BEGIN
v_aanvrager := 3; -- Facilitor
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);
-- als opdrachtkey IS NOT NULL
IF rec1.mld_opdr_key IS NOT NULL
THEN
SELECT mld_statusopdr_key
INTO v_statusopdr_key
FROM mld_opdr
WHERE mld_opdr_key = rec1.mld_opdr_key;
--als status != afgemeld (6) en afgerond (9)
IF v_statusopdr_key <> 6 AND v_statusopdr_key <> 9
THEN
-- set status op geleverd
MLD.setopdrachtstatus (rec1.mld_opdr_key, 6, NULL);
END IF;
-- als status != afgerond (9)
IF v_statusopdr_key <> 9
THEN
-- set status op 9
MLD.setopdrachtstatus (rec1.mld_opdr_key, 9, NULL);
END IF;
END IF;
END;
END LOOP;
END;
/
--
-- Verkoopfacturen
--
CREATE OR REPLACE VIEW vbxx_v_kosten_doorbelasting
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key
meldingnummer,
m.mld_melding_externnr,
m.mld_melding_key,
l.alg_locatie_omschrijving
meldinglocatie,
di.alg_district_omschrijving
district,
r.alg_regio_omschrijving
regio,
g.alg_gebouw_code
gebouw_code,
pf.prs_perslid_naam_full
melder,
sd.ins_srtdiscipline_omschrijving
vakgroeptype,
d.ins_discipline_omschrijving
vakgroep,
std.mld_stdmelding_omschrijving
standaardmelding,
ksm.prs_kostensoort_oms
melding_nen_omschrijving,
ksm.prs_kostensoort_refcode
melding_nen_code,
CASE
WHEN m.mld_melding_status = 5 AND m.mld_melding_afgerond = 1
THEN
'Afgerond'
ELSE
ms.mld_statuses_omschrijving
END
meldingstatus,
m.mld_melding_datum
meldingdatum,
MLD.getmeldingstatusdate (m.mld_melding_key, 5)
afgemeld,
m.mld_melding_onderwerp
onderwerp,
m.mld_melding_omschrijving
vomschrijving,
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
ot.mld_typeopdr_omschrijving
opdrachttype,
ot.mld_typeopdr_key
opdrachttype_key,
tf.fac_usrdata_omschr
type_factuur,
o.mld_statusopdr_key,
so.mld_statusopdr_omschrijving
opdrachtstatus,
o.mld_opdr_omschrijving
opdrachtomschrijving,
b.prs_bedrijf_naam
opdrachtuitvoerende,
o.mld_opdr_kosten
opdrachtkosten,
(SELECT SUM(ft.fin_factuur_totaal)
FROM fin_factuur ft
WHERE ft.fin_factuur_verwijder IS NULL
AND ft.fin_factuur_statuses_key = 7
AND ft.mld_opdr_key = o.mld_opdr_key)
factuurbedrag,
COALESCE(f.fin_factuurregel_totaal, rbbtw.bedrag) factuurregeltotaal,
VBXX.get_opslag_perc (o.mld_opdr_key)
opslag,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 0, COALESCE(f.fin_factuurregel_totaal, rbbtw.bedrag, o.mld_opdr_kosten) * ((100 + VBXX.get_opslag_perc (o.mld_opdr_key)) / 100))
kostenplusopslag,
btw.fin_btwtabelwaarde_oms btwtabelwaarde_oms,
COALESCE(btw.fin_btwtabelwaarde_perc, rbbtw.btw) btwtabelwaarde_perc,
COALESCE(f.fin_factuurregel_btw, ROUND((rbbtw.bedrag * rbbtw.btw)/100,2)) factuurregel_btw,
COALESCE ( (SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_code = 'BOEKMAAND'),
TO_CHAR (
ADD_MONTHS (SYSDATE,
COALESCE ((SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET'
AND k.alg_kenmerk_niveau = 'E' -- Regio
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = r.alg_regio_key),
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET'
AND k.alg_kenmerk_niveau = 'D'
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = l.alg_district_key),
0)),
'yyyymm'))
boekmaand,
aog.alg_gebouw_naam
meldinggebouw,
DECODE (
(SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'FINAKKOORD'
AND k.mld_kenmerk_verwijder IS NULL),
1, 'Ja',
'Nee')
pro_forma_goedgekeurd,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 'Ja', 'Nee')
nietdoorbelasten,
o.mld_opdr_key,
l.alg_district_key,
di.alg_regio_key,
l.alg_locatie_key fclt_3d_locatie_key,
COALESCE(kso.prs_kostensoort_oms, ksm.prs_kostensoort_oms) opdracht_nen_code,
COALESCE(kso.prs_kostensoort_refcode, ksm.prs_kostensoort_refcode) opdracht_nen_exact_code,
COALESCE(kso.prs_kostensoort_opmerking, ksm.prs_kostensoort_opmerking) opdracht_nen_omschrijving,
kso.prs_kostensoort_oms
afw_opdracht_nen_omschrijving,
kso.prs_kostensoort_refcode
afw_opdracht_nen_code,
kin.mld_kenmerkopdr_waarde klantinkoopnr,
k.prs_kostenplaats_nr,
k.prs_kostenplaats_omschrijving
FROM prs_v_perslid_fullnames_all pf,
prs_kostensoort ksm,
mld_statuses ms,
mld_opdr o,
mld_typeopdr ot,
mld_statusopdr so,
prs_bedrijf b,
alg_locatie l,
alg_regio r,
alg_district di,
alg_gebouw g,
prs_kostensoort kso,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
alg_v_allonrgoed_gegevens aog,
prs_kostenplaats k,
(SELECT f.fin_factuur_key, f.mld_opdr_key, fr.fin_btwtabelwaarde_key, SUM(fr.fin_factuurregel_btw) fin_factuurregel_btw, SUM(fr.fin_factuurregel_totaal) fin_factuurregel_totaal
FROM fin_factuurregel fr,
fin_factuur f
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_statuses_key = 7
GROUP BY f.fin_factuur_key, f.fin_factuur_totaal, f.mld_opdr_key, fr.fin_btwtabelwaarde_key) f,
( SELECT o.mld_opdr_key,
COALESCE (bedrag, mld_opdr_kosten) bedrag,
COALESCE (btw, 21) btw
FROM (SELECT ko.mld_opdr_key,
FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) bedrag,
DECODE (sk.mld_srtkenmerk_code, 'BEDRAGNUL', 0, 'BEDRAGHOOG', 21, 'BEDRAGLAAG', 9) btw
FROM mld_srtkenmerk sk, mld_kenmerk k, mld_kenmerkopdr ko
WHERE sk.mld_srtkenmerk_code IN ('BEDRAGNUL', 'BEDRAGHOOG', 'BEDRAGLAAG')
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key) k,
mld_opdr o,
mld_typeopdr ot
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_upper LIKE 'REVERSED%'
AND o.mld_opdr_key = k.mld_opdr_key(+)) rbbtw,
fin_btwtabelwaarde btw,
(SELECT fac_usrdata_code, fac_usrdata_omschr, mld_opdr_key
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk,
fac_usrdata ud
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR'
AND k.mld_kenmerk_verwijder IS NULL
AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = fac_usrdata_key) tf,
(SELECT ko.mld_opdr_key, NULL bedrag
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk,
mld_opdr o
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING'
AND k.mld_kenmerk_verwijder IS NULL) ok,
(SELECT mld_opdr_key, mld_kenmerkopdr_waarde
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_code = 'NIETDOORBELASTEN'
AND k.mld_kenmerk_verwijder IS NULL) nb,
(SELECT mld_opdr_key, mld_kenmerkopdr_waarde
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_code = 'KLANTINKOOPNR'
AND k.mld_kenmerk_verwijder IS NULL) kin
WHERE 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 std.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = o.mld_melding_key
AND m.prs_perslid_key = pf.prs_perslid_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND aog.alg_gebouw_key = g.alg_gebouw_key(+)
AND l.alg_district_key = di.alg_district_key
AND di.alg_regio_key = r.alg_regio_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+)
AND o.mld_opdr_key = tf.mld_opdr_key(+)
-- AND tf.fac_usrdata_code <> 'A'
AND o.mld_opdr_key = ok.mld_opdr_key(+)
AND o.mld_opdr_key = nb.mld_opdr_key(+)
AND o.mld_opdr_key = kin.mld_opdr_key(+)
AND COALESCE(o.prs_kostenplaats_key, m.prs_kostenplaats_key) = k.prs_kostenplaats_key(+)
AND o.mld_opdr_key = f.mld_opdr_key(+)
AND o.mld_opdr_key = rbbtw.mld_opdr_key(+)
AND f.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key(+);
CREATE OR REPLACE VIEW vbxx_v_kosten_doorb_frozen
AS
SELECT fin_verkoopfactuur_omschr meldingnummer,
fin_verkoopfactuur_n4 mld_melding_key,
l.alg_locatie_omschrijving meldinglocatie,
di.alg_district_omschrijving district,
fin_verkoopfactuur_c8 gebouw_code,
pf.prs_perslid_naam_full melder,
fin_verkoopfactuur_c3 soortmelding,
fin_verkoopfactuur_c4 productgroep,
fin_verkoopfactuur_c5 subproductgroep,
fin_verkoopfactuur_c1 melding_nen_omschrijving,
fin_verkoopfactuur_c2 melding_nen_code,
ms.mld_statuses_omschrijving meldingstatus,
'Gefactureerd' facturatiestatus,
m.mld_melding_datum meldingdatum,
MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld,
m.mld_melding_onderwerp onderwerp,
m.mld_melding_omschrijving vomschrijving,
fin_verkoopfactuur_id opdrachtnummer,
ot.mld_typeopdr_omschrijving opdrachttype,
so.mld_statusopdr_omschrijving opdrachtstatus,
o.mld_opdr_omschrijving opdrachtomschrijving,
COALESCE(vf.prs_kostensoort_oms, fin_verkoopfactuur_c1) opdracht_nen_omschrijving,
b.prs_bedrijf_naam opdrachtuitvoerende,
fin_verkoopfactuur_bedrag opdrachtkosten,
fin_verkoopfactuur_c6 soortopslag,
fin_verkoopfactuur_n2 opslag,
fin_verkoopfactuur_n3 kostenplusopslag,
fin_verkoopfactuur_n1 geenopslag,
fin_verkoopfactuur_maand boekmaand,
mld_opdr_key,
kso.prs_kostensoort_oms afw_opdracht_nen_omschrijving,
kso.prs_kostensoort_refcode afw_opdracht_nen_code,
l.alg_locatie_key fclt_x_locatie
FROM fin_verkoopfactuur vf,
prs_v_perslid_fullnames_all pf,
mld_statuses ms,
mld_opdr o,
mld_typeopdr ot,
mld_statusopdr so,
prs_bedrijf b,
alg_locatie l,
alg_district di,
mld_melding m,
prs_kostensoort kso
WHERE m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = vf.fin_verkoopfactuur_n4
AND o.mld_opdr_key = vf.fin_verkoopfactuur_refkey
AND m.prs_perslid_key = pf.prs_perslid_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = di.alg_district_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+)
--
-- PRO_FORMA facturen
--
-- Rapportage om de financiele kenmerken bij het district of de regio op te vragen.
CREATE OR REPLACE VIEW vbxx_klant_fin_gegevens
AS
SELECT *
FROM ( SELECT alg_regio_omschrijving,
alg_district_omschrijving,
(SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key and k.alg_kenmerk_niveau = o.alg_onrgoed_niveau AND k.alg_kenmerk_code = 'BOEKMNDOFFSET' AND aogk.alg_onrgoed_key = o.alg_onrgoed_key) offset,
(SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key and k.alg_kenmerk_niveau = o.alg_onrgoed_niveau AND k.alg_kenmerk_code = 'BOEKMAAND' AND aogk.alg_onrgoed_key = o.alg_onrgoed_key) boekmaand,
(SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key and k.alg_kenmerk_niveau = o.alg_onrgoed_niveau AND k.alg_kenmerk_code = 'DATUMPROFORMA' AND aogk.alg_onrgoed_key = o.alg_onrgoed_key) datum_proforma,
(SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key and k.alg_kenmerk_niveau = o.alg_onrgoed_niveau AND k.alg_kenmerk_code = 'EXPROFORMA' AND aogk.alg_onrgoed_key = o.alg_onrgoed_key) datum_export
FROM (SELECT alg_regio_omschrijving, alg_district_omschrijving, alg_district_key alg_onrgoed_key, 'D' alg_onrgoed_niveau from alg_district d, alg_regio r where r.alg_regio_key = d.alg_regio_key
UNION ALL
SELECT alg_regio_omschrijving, to_char(null) alg_district_omschrijving, alg_regio_key onrgoed_key, 'E' alg_onrgoed_niveau from alg_regio
) o
)
WHERE offset IS NOT NULL;
CREATE OR REPLACE VIEW vbxx_v_export_pro_forma (
result,
result_order,
alg_district_key,
alg_regio_key
)
AS
SELECT 'meldingnummer;' ||
'meldinglocatie;' ||
'melder;' ||
'vakgroeptype;' ||
'vaktgroep;' ||
'standaardmelding;' ||
'melding_nen_omschrijving;' ||
'melding_nen_code;' ||
'meldingstatus;' ||
'meldingdatum;' ||
'afgemeld;' ||
'onderwerp;' ||
'vomschrijving;' ||
'opdrachtnummer;' ||
'opdrachttype;' ||
'opdrachtstatus;' ||
'opdrachtomschrijving;' ||
'opdracht_nen_omschrijving;' ||
'opdracht_nen_code;' ||
'opdrachtuitvoerende;' ||
'opdrachtkosten;' ||
'factuurbedrag;' ||
'opslag;' ||
'kostenplusopslag;' ||
'boekmaand;' ||
'pro_forma_goedgekeurd;' ||
'niet_doorbelasten;' ||
'meldinggebouw;' ||
'klantinkoopnr', -1, -1 alg_district_key, -1 alg_regio_key
FROM DUAL
UNION ALL
SELECT meldingnummer || ';' ||
meldinglocatie || ';' ||
melder || ';' ||
vakgroeptype || ';' ||
vakgroep || ';' ||
standaardmelding || ';' ||
melding_nen_omschrijving || ';' ||
melding_nen_code || ';' ||
meldingstatus || ';' ||
TO_CHAR(meldingdatum, 'DD-MM-YYYY') || ';' ||
TO_CHAR(afgemeld, 'DD-MM-YYYY') || ';' ||
'"' || REPLACE(onderwerp, '"') || '"' || ';' ||
'"' || TO_CHAR(SUBSTR(REPLACE(vomschrijving, '"'),1,300)) || '"' || ';' ||
opdrachtnummer || ';' ||
opdrachttype || ';' ||
opdrachtstatus || ';' ||
'"' || SUBSTR(REPLACE(opdrachtomschrijving, '"'),1,300) || '"' || ';' ||
opdracht_nen_code || ';' ||
opdracht_nen_omschrijving || ';' ||
opdrachtuitvoerende || ';' ||
REPLACE(opdrachtkosten, '.', ',') || ';' ||
REPLACE(factuurbedrag, '.', ',') || ';' ||
opslag || ';' ||
REPLACE(kostenplusopslag, '.', ',') || ';' ||
boekmaand || ';' ||
pro_forma_goedgekeurd || ';' ||
nietdoorbelasten || ';' ||
meldinggebouw || ';' ||
klantinkoopnr,
mld_melding_key,
alg_district_key,
alg_regio_key
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9
AND (UPPER(opdrachttype) like 'REVERSED%' OR factuurbedrag IS NOT NULL);
-- Procedure om pro-forma factuur klaar te zetten.
CREATE OR REPLACE PROCEDURE vbxx_select_pro_forma (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_regio_key IN NUMBER,
p_district_key IN NUMBER
)
AS
CURSOR c
IS
SELECT mld_opdr_key, opdrachttype_key
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9 -- afgerond.
AND (UPPER(opdrachttype) like 'REVERSED%' OR factuurbedrag IS NOT NULL) -- ReversedBilling OF er is een factuur gekoppeld.
AND (alg_district_key = p_district_key OR alg_regio_key = p_regio_key);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_boekmaand VARCHAR2 (10);
v_gvf_kenmerk_key NUMBER (10);
v_datum_pro_forma_kenmerk_key NUMBER(10);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
IF p_regio_key IS NULL
THEN
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key -- boekmaand offset
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET'
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
SELECT k.alg_kenmerk_key
INTO v_datum_pro_forma_kenmerk_key
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = 'DATUMPROFORMA'
AND k.alg_kenmerk_niveau = 'D' -- district
AND k.alg_kenmerk_verwijder IS NULL;
ALG.upsertkenmerk (v_datum_pro_forma_kenmerk_key, p_district_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly datum pro forma
ELSE -- regio_key is gevuld
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key -- boekmaand offset
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET'
AND k.alg_kenmerk_niveau = 'E' -- regio
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = r.alg_regio_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_regio r
WHERE r.alg_regio_key = p_regio_key;
SELECT k.alg_kenmerk_key
INTO v_datum_pro_forma_kenmerk_key
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = 'DATUMPROFORMA'
AND k.alg_kenmerk_niveau = 'E' -- regio
AND k.alg_kenmerk_verwijder IS NULL;
ALG.upsertkenmerk (v_datum_pro_forma_kenmerk_key, p_regio_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly datum pro forma
END IF;
FOR rec IN c
LOOP
BEGIN
SELECT mld_kenmerk_key
INTO v_gvf_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'FINAKKOORD'
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_typeopdr_key = rec.opdrachttype_key;
-- zet de opdracht op 'Gereed voor facturatie'
FLX.setflex('OPD', v_gvf_kenmerk_key, rec.mld_opdr_key, 1); -- Facturatiestatus naar 'Gereed voor facturatie'
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
-- Dan is het een opdrachttype dat dit kenmerk niet heeft.
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'Fout bij aanmaken pro forma factuur' || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E', rec.mld_opdr_key || v_errormsg, '');
COMMIT;
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE vbxx_select_pro_forma_verwerk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_regio_key IN NUMBER,
p_district_key IN NUMBER
)
AS
CURSOR c
IS
SELECT *
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9 -- Afgerond
AND pro_forma_goedgekeurd = 'Ja'
AND (alg_district_key = p_district_key OR alg_regio_key = p_regio_key);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_boekmaand VARCHAR2 (10);
v_boekmaand_kenmerk_key NUMBER(10);
v_exp_proforma_kenmerk_key NUMBER(10);
v_onrgoed_key NUMBER(10);
v_onrgoed_niveau VARCHAR2(1);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
-- YASK#68837 We halen de boekmaand niet meer uit het kenmerk bij het district maar we gaan deze
-- opnieuw berekenen.
IF p_regio_key IS NULL
THEN
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET' -- boekmaand offset
AND k.alg_kenmerk_niveau = 'D'
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
ELSE
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_code = 'BOEKMNDOFFSET' -- boekmaand offset
AND k.alg_kenmerk_niveau = 'E' -- regio
AND k.alg_kenmerk_verwijder IS NULL
AND alg_onrgoed_key = r.alg_regio_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_regio r
WHERE r.alg_regio_key = p_regio_key;
END IF;
FOR rec IN c
LOOP
BEGIN
-- bevries de factuurgegevens in de verkooptabel.
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_aanmaak,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostensoort_oms,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_n3,
fin_verkoopfactuur_n4,
fin_verkoopfactuur_n5,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_c5,
fin_verkoopfactuur_c6,
fin_verkoopfactuur_c7,
fin_verkoopfactuur_c8)
VALUES (SYSDATE,
rec.opdrachtnummer,
SYSDATE,
rec.meldingnummer,
'opdracht',
rec.mld_opdr_key,
SUBSTR(rec.opdracht_nen_omschrijving,1,60),
rec.opdrachtkosten,
v_boekmaand,
rec.opslag,
rec.kostenplusopslag,
rec.mld_melding_key,
rec.alg_district_key,
rec.melding_nen_omschrijving,
rec.melding_nen_code,
rec.vakgroeptype,
rec.vakgroep,
rec.standaardmelding,
rec.nietdoorbelasten,
rec.opdracht_nen_omschrijving,
rec.gebouw_code);
MLD.setopdrachtstatus (rec.mld_opdr_key, 7, NULL); -- Verwerkt
-- We slaan bij de opdracht de boekmaand op waarop deze opdracht op de klantfactuur is geplaatst.
SELECT mld_kenmerk_key
INTO v_boekmaand_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_typeopdr_key = rec.opdrachttype_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'BOEKMAAND'
AND k.mld_kenmerk_verwijder IS NULL;
FLX.setflex('OPD', v_boekmaand_kenmerk_key, rec.mld_opdr_key, v_boekmaand);
END;
END LOOP;
IF p_regio_key IS NULL
THEN
v_onrgoed_key := p_district_key;
v_onrgoed_niveau := 'D';
ELSE
v_onrgoed_key := p_regio_key;
v_onrgoed_niveau := 'E';
END IF;
SELECT alg_kenmerk_key
INTO v_exp_proforma_kenmerk_key
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = 'EXPROFORMA'
AND k.alg_kenmerk_niveau = v_onrgoed_niveau
AND k.alg_kenmerk_verwijder IS NULL;
ALG.upsertkenmerk (v_exp_proforma_kenmerk_key, v_onrgoed_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly export datum pro forma
SELECT alg_kenmerk_key
INTO v_boekmaand_kenmerk_key
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = 'BOEKMAAND'
AND k.alg_kenmerk_niveau = v_onrgoed_niveau
AND k.alg_kenmerk_verwijder IS NULL;
ALG.upsertkenmerk (v_boekmaand_kenmerk_key, v_onrgoed_key ,v_boekmaand); -- Readonly boekmaand laatste export veld.
END;
/
--
-- MAREON
--
CREATE OR REPLACE PROCEDURE vbxx_import_fin_factuur_marx (p_import_key IN NUMBER)
AS
v_seq_of_columns VARCHAR(255);
BEGIN
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28';
fac_import_factuur_body(p_import_key, v_seq_of_columns);
END;
/
CREATE OR REPLACE PROCEDURE vbxx_update_fin_factuur_marx (p_import_key IN NUMBER)
AS
-- Voor Correctie ORDERNR om standaard update-procedure goed te laten lopen.
--- 0. Bug - Als uit Mareo/Scanning geen order-referentie meekomt en er zijn meerdere factuurregels, dan wordt er vanuit fac_update_factuur niet 1 maar meerdere factuurnr's aangemaakt. Oplossing: Ordernr vullen.
--- 0.1 Verzamelfactuur-indicatie (2022-maart actief): Vanuit Mareon wordt deze met een "(*)" achter de referentie meegegeven, bijvoorbeeld C5602.5(*).
--- 0.2 Orderreferentie-opschoning: Vanuit scanning komt de orderreferentie soms mee inclusief 'extra tekst'. Bijv CO284IN<49>T of CO534.7HEERLEN. Voor goede verwerking gaan we de tekst achteraan de orderreferentie weghalen.
--- Uitgezet: We willen ook bestellingen matchen
--- 3. Als ordernr is C (= contract) echter zonder versienummer - Dan wordt in standaard update altijd automatisch het hoogste versienummer gepakt.
--- Ivm overlap 'jaarovergangen' is dat niet altijd juist en moet de vanuit Mareon geimporteerde factuur nog status 'te controleren' meekrijgen voordat deze automatisch de financiele-interface in gaat.
--- 4. Ordernr beginnende met "BE" of "B" wordt niet als Bestelling herkend. Daarom gaan we deze prefix in de import-tabel weghalen.
---
--- Foutcodes: In het kenmerk FOUTCODE wordt een bitwise foutcode bijgehouden. Hieronder staat de uitleg per bitje
--- bit 0: bijlage kon niet opgeslagen worden.
--- bit 1: orderreferentie niet gevonden
--- bit 2: fout in bedrijfsherkenning
--- bit 3: overige fout uit import
--- bit 4: dubbele factuur
--- bit 5: verzamelfactuur
--- bit 6: IBAN niet correct
--- bit 7: IBAN niet gevuld bij leverancier
--- bit 8: Proces fout (Oracle foutmelding)
--- bit 9: Ordernummer niet aanwezig via scanning
--- bit 10: 3 weg matching maar verplichting niet afgemeld
--- bit 11: Bijlage niet aanwezig
--- bit 12: Kostensoort is niet ingevuld.
CURSOR ccor_0
IS
SELECT ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND ordernr IS NULL
GROUP BY ordernr ;
CURSOR ccor_0_1
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND INSTR(ordernr,'(*)') > 1
GROUP BY factuurnr, ordernr ;
CURSOR ccor_0_2
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND REGEXP_INSTR(REVERSE(ordernr), '\d') > 1
GROUP BY factuurnr, ordernr ;
CURSOR ccor_3
IS
SELECT factuurnr, ordernr, SUBSTR(ordernr,2) cnt_contract_nummer_intern
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND SUBSTR(UPPER(ordernr),1,1) = 'C'
AND INSTR(ordernr,'.')=0
GROUP BY factuurnr, ordernr ;
CURSOR ccor_4
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND ( SUBSTR (ordernr, 1, 1) = 'B'
AND fac.safe_to_number (SUBSTR (ordernr, 2, 1)) IS NOT NULL)
OR (SUBSTR (ordernr, 1, 2) = 'BE')
GROUP BY factuurnr, ordernr ;
CURSOR cfactuur
IS
SELECT i.fin_factuur_key, factuurdatum, i.kenmerk1, i.kenmerk2, i.kenmerk3, i.kenmerk6, i.kenmerk7, i.kenmerk8, i.kenmerk9, i.kenmerk10, i.kenmerk11, i.kenmerk12, i.kenmerk13, i.factuurnr, i.ordernr, i.fac_imp_file_index, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key, f.prs_kostensoort_key
FROM fac_imp_factuur i, fin_factuur f
WHERE i.fin_factuur_key IS NOT NULL
AND i.fac_import_key = p_import_key
AND f.fin_factuur_key = i.fin_factuur_key
--AND kenmerk1 IS NOT NULL -- Incl bijlage
;
CURSOR cfactuurregel
IS
SELECT f.fin_factuur_key, fr.fin_factuurregel_key, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key
FROM fac_imp_factuur i, fin_factuurregel fr, fin_factuur f
WHERE i.fac_import_key = p_import_key
AND i.fin_factuurregel_key = fr.fin_factuurregel_key
AND fr.fin_factuur_key = f.fin_factuur_key;
v_aanduiding VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
c_kenmerk_key_bijlage NUMBER(10);
c_kenmerk_key_soort VARCHAR(1) := 'F'; -- fin_kenmerk_kenmerktype = M(foldermap) of F(enkelvoudig bestand)
v_contract_versies NUMBER(10);
c_kenmerk_key_gebouw NUMBER(10);
v_opdracht_key NUMBER(10);
v_aanduiding_controle VARCHAR2 (1000); -- Voor logging op bijbehorende controle zodat men weet wat men moet controleren
v_fin_factuur_key NUMBER(10);
v_locatie_code ALG_LOCATIE.ALG_LOCATIE_CODE%TYPE;
v_gebouw_key ALG_GEBOUW.ALG_GEBOUW_KEY%TYPE;
v_perslid_key PRS_PERSLID.PRS_PERSLID_KEY%TYPE;
v_dubbele_facturen NUMBER(10);
v_perslid_key_beh CNT_CONTRACT.PRS_PERSLID_KEY_BEH%TYPE;
v_foutcode NUMBER(10);
v_fin_factuur_boekmaand_nu VARCHAR(7); -- Ingelezen factuur in format tekst "jaar-mnd" (2022-05)
v_gebroken_boekjaar NUMBER(1) := 0 ;
v_cnt_looptijd_mnd NUMBER(10);
v_cnt_deel_betaald_1 NUMBER(10); -- Deel van contract wat reeds betaald is
v_cnt_deel_betaald_2 NUMBER(10); -- Deel van contract wat betaald is als de mareon-factuur ook verwerkt is
v_cnt_deel_betaald_tekst VARCHAR2 (200); -- Tekst voor in tijdelijke kenmerveld om te kijken of bepaling boekmaand correct is
-- v_cnt_deel_betaald NUMBER(10); -- METHODE 1: Deel van contract betaald met deze factuur
-- v_fin_factuur_boekmaand VARCHAR(7); -- METHODE 1: De nieuwe boekmaand op de geimporteerde Mareon-factuur
v_fin_factuur_boekmaand_2 VARCHAR(7); -- De nieuwe boekmaand op de geimporteerde Mareon-factuur - METHODE 2
v_fin_factuur_boekmaand_tekst VARCHAR2 (1000); -- Tekst voor in tijdelijke kenmerkveld om te kijken of bepaling boekmaand correct is
c_kenmerk_key_boekmaand NUMBER(10);
v_cnt_termijn_type VARCHAR(1);
v_cnt_termijn_aantal NUMBER(3);
v_cnt_soort VARCHAR2 (200);
v_factuur_datum_boekmaand NUMBER(10);
v_factuur_datum_boekmaand_jr NUMBER(10);
v_factuur_datum_boekmaand_prev VARCHAR(2);
v_factuur_datum_boekmaand_nu VARCHAR(2);
v_fin_factuur_boekmaand_laatst VARCHAR(7);
v_fin_factuur_boekmaand_prev VARCHAR(7);
v_verdeelperiode_offset NUMBER;
v_factuur_opmerking FIN_FACTUUR.FIN_FACTUUR_OPMERKING%TYPE;
v_factuur_note_omschrijving FIN_FACTUUR_NOTE.FIN_FACTUUR_NOTE_OMSCHRIJVING%TYPE;
v_factuur_note_key FIN_FACTUUR_NOTE.FIN_FACTUUR_NOTE_KEY%TYPE;
v_bedrijf_iban FIN_KENMERKFACTUUR.FIN_KENMERKFACTUUR_WAARDE%TYPE;
v_bedrijf_key PRS_BEDRIJF.PRS_BEDRIJF_KEY%TYPE;
v_factmatchmode MLD_DISC_PARAMS.MLD_DISC_PARAMS_FACTMATCHMODE%TYPE;
v_statusopdr_key MLD_OPDR.MLD_STATUSOPDR_KEY%TYPE;
PROCEDURE track_error (p_error_str IN VARCHAR2, p_foutcode IN NUMBER, p_factuur_key IN NUMBER, p_perslid_key IN NUMBER)
IS
v_kenmerk_key_foutcode FIN_KENMERK.FIN_KENMERK_KEY%TYPE;
v_foutcode NUMBER(10);
v_verschil NUMBER(10);
BEGIN
--Hebben we deze tracking nodig? De fouten komen ook in de notities te staan.
--fac.trackaction ('FINUPD', p_factuur_key, p_perslid_key, NULL, p_error_str);
BEGIN
SELECT fin_factuur_note_omschrijving, fin_factuur_note_key
INTO v_factuur_note_omschrijving, v_factuur_note_key
FROM fin_factuur_note
WHERE fin_factuur_key = p_factuur_key;
UPDATE fin_factuur_note
SET fin_factuur_key = p_factuur_key,
prs_perslid_key = p_perslid_key,
fin_factuur_note_omschrijving = fin_factuur_note_omschrijving || CHR (13) || CHR (10) || p_error_str
WHERE fin_factuur_note_key = v_factuur_note_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO fin_factuur_note (fin_factuur_key, prs_perslid_key, fin_factuur_note_omschrijving)
VALUES (p_factuur_key, p_perslid_key, 'Factuur import:' || CHR (13) || CHR (10) || p_error_str);
END;
-- nog reden vullen:
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3
WHERE fin_factuur_key = p_factuur_key;
IF p_foutcode IS NOT NULL
THEN
SELECT k.fin_kenmerk_key
INTO v_kenmerk_key_foutcode
FROM fin_kenmerk k
WHERE k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL;
v_foutcode := COALESCE(FAC.SAFE_TO_NUMBER(FLX.getflex ('FIN', v_kenmerk_key_foutcode, p_factuur_key)),0);
v_verschil := BITAND(v_foutcode, p_foutcode);
v_foutcode := v_foutcode - v_verschil;
v_foutcode := v_foutcode + p_foutcode;
FLX.setflex ('FIN', v_kenmerk_key_foutcode, p_factuur_key, v_foutcode);
END IF;
END;
PROCEDURE setkenmerkfactuur (p_factuur_key IN NUMBER, p_kenmerk_code IN VARCHAR2, p_kenmerkwaarde IN VARCHAR2)
IS
v_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE;
BEGIN
SELECT fin_kenmerk_key
INTO v_kenmerk_key
FROM fin_kenmerk
WHERE fin_kenmerk_code = p_kenmerk_code;
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (p_factuur_key, v_kenmerk_key, p_kenmerkwaarde);
EXCEPTION WHEN OTHERS
THEN
RETURN;
END;
BEGIN
v_errorhint := 'Zoek de persoon van de import: ' || p_import_key;
SELECT prs_perslid_key
INTO v_perslid_key
FROM fac_import
WHERE fac_import_key = p_import_key;
v_errorhint := 'Voorbereiding 0: ' || p_import_key;
-- Voor draaien standaard factuur-update gaan we eerst op fac_imp_factuur een aantal correcties doorvoeren
FOR rec IN ccor_0
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = '00000' -- Geen ordernr vanuit scanning
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
v_errorhint := 'Voorbereiding 1: ' || p_import_key;
FOR rec IN ccor_0_1
LOOP
BEGIN
UPDATE fac_imp_factuur
SET kenmerk3 = 'verzamelfactuur'
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
v_errorhint := 'Voorbereiding 2: ' || p_import_key;
FOR rec IN ccor_0_2
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = SUBSTR(ordernr,1,LENGTH(ordernr)-(REGEXP_INSTR(REVERSE(ordernr), '\d')-1))
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
v_errorhint := 'Voorbereiding 3: ' || p_import_key;
FOR rec IN ccor_3
LOOP
BEGIN
IF fac.safe_to_number(rec.cnt_contract_nummer_intern) IS NOT NULL THEN
SELECT count(*)
INTO v_contract_versies
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = rec.cnt_contract_nummer_intern ;
-- Als er meer dan 1 versie is, dan moet factuur ter controle. We gaan hiervoor een kenmerkveld vullen...
IF v_contract_versies > 1 THEN
UPDATE fac_imp_factuur
SET kenmerk2 = 'ter controle'
WHERE fac_import_key = p_import_key ;
END IF;
END IF;
END;
END LOOP;
v_errorhint := 'Voorbereiding 4: ' || p_import_key;
FOR rec IN ccor_4
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = REPLACE(ordernr,'BE','')
WHERE fac_import_key = p_import_key ;
UPDATE fac_imp_factuur
SET ordernr = REPLACE(ordernr,'B','')
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
v_errorhint := 'Update factuur: ' || p_import_key;
-- Nu kunnen we de standaard FCLT verwerk import facturen draaien
fac_update_factuur (p_import_key);
v_errorhint := 'Bepalen kenmerk factuurbestand: ' || p_import_key;
-- CUST: post processing voor verwerking van het PDF document
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_bijlage
FROM fin_kenmerk
WHERE fin_kenmerk_code = 'FACTUURBESTAND'
AND fin_kenmerk_verwijder IS NULL;
v_errorhint := 'Bepalen kenmerk gebouw bij factuurregel: ' || p_import_key;
-- CUST: Voor vullen van het gebouwkenmerk op factuurregelniveau
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_gebouw
FROM fin_kenmerk
WHERE fin_kenmerk_code = 'GEBOUW'
AND fin_kenmerk_verwijder IS NULL;
-- We gaan nu beginnen met het verder verwerken van de factuur..
v_errorhint := 'Verwerken factuurgegevens: ' || p_import_key;
FOR rec IN cfactuur
LOOP
BEGIN
v_errorhint := 'Verwerken van de factuur';
SELECT REPLACE(fin_factuur_opmerking, '@@', CHR (13) || CHR (10))
INTO v_factuur_opmerking
FROM fin_factuur
WHERE fin_factuur_key = rec.fin_factuur_key;
IF v_factuur_opmerking IS NOT NULL
THEN
track_error (v_factuur_opmerking, NULL, rec.fin_factuur_key, v_perslid_key); -- Overnemen van de opmerking in de notitie.
UPDATE fin_factuur
SET fin_factuur_opmerking = NULL
WHERE fin_factuur_key = rec.fin_factuur_key;
END IF;
-- Als er een bijlage-flexprop en een bijlage is, dan gaan we deze PDF hier inzetten....
v_errorhint := 'Verwerken bijlage van de factuur';
IF c_kenmerk_key_bijlage IS NOT NULL AND rec.kenmerk1 IS NOT NULL
THEN
BEGIN
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES('IMPORT:' || TO_CHAR (p_import_key),
'flexcode',
'FIN:'
|| TO_CHAR (rec.fin_factuur_key) -- We kunnen niet meerdere imports tegelijk aan!
|| ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key
|| c_kenmerk_key_soort -- 'F of M'
);
-- FSN#33363: Zelf de insert in fin_kenmerkfactuur doen van het bestandskenmerk (FSN#33105 verzorgt dit niet namelijk)
-- Aanvulling JM: Voor F-enkelvoudig bestand wel nodig om kenmerk aan te maken, voor M-folder hoeft/moet dit niet
IF c_kenmerk_key_soort = 'F'
THEN
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_bijlage, rec.kenmerk1);
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding_controle := 'Van factuur met key ' || rec.fin_factuur_key || ' is de bestandsnaam niet bewaard (regel ' || rec.fac_imp_file_index || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding_controle,
'Factuurnr:' || rec.factuurnr || ' / Bestandsnaam: ' || rec.kenmerk1
);
track_error (v_aanduiding_controle, 1, rec.fin_factuur_key, v_perslid_key); -- bit 0
END;
COMMIT;
END IF;
v_errorhint := 'Controle of er een factuur als bijlage aanwezig is';
IF rec.kenmerk1 IS NULL
THEN
v_aanduiding_controle := 'Van factuur met key ' || rec.fin_factuur_key || ' is de bestandsnaam niet gevonden (regel ' || rec.fac_imp_file_index || ')';
track_error (v_aanduiding_controle, POWER(2,11), rec.fin_factuur_key, v_perslid_key); -- bit 11
END IF;
-- Fout gemeldt door Mareon
v_errorhint := 'Bedrijfsherkenning';
IF rec.kenmerk6 = '3'
THEN
v_foutcode := 0;
IF rec.kenmerk7 LIKE '%Intern bedrijf is niet (goed) vastgesteld%'
THEN v_foutcode := POWER(2,2);
ELSE v_foutcode := POWER(2,3);
END IF;
v_aanduiding_controle := 'ERROR: ' || REPLACE(rec.kenmerk7, '@@', CHR(13)||CHR(10));
track_error (v_aanduiding_controle, v_foutcode, rec.fin_factuur_key, v_perslid_key);
END IF;
-- Mareon_bron tonen in Facilitor bij Factuur
setkenmerkfactuur(rec.fin_factuur_key, 'MAREON_BRON', rec.kenmerk9);
-- BTW nummer tonen in Facilitor bij Factuur
setkenmerkfactuur(rec.fin_factuur_key, 'BTWNR', rec.kenmerk10);
-- KVK nummer tonen in Facilitor bij Factuur
setkenmerkfactuur(rec.fin_factuur_key, 'KVKNR', rec.kenmerk11);
-- IBAN tonen in Facilitor bij Factuur
setkenmerkfactuur(rec.fin_factuur_key, 'IBAN', rec.kenmerk12);
-- G rekening IBAN tonen in Facilitor bij Factuur
setkenmerkfactuur(rec.fin_factuur_key, 'GIBAN', rec.kenmerk13);
-- Incomplete facturen, zonder orderreferentie, gaan we ook op controle zetten
IF (rec.mld_opdr_key IS NULL AND rec.cnt_contract_key IS NULL AND rec.bes_bestelopdr_key IS NULL)
THEN
IF rec.ordernr = '00000'
THEN
v_aanduiding_controle := 'ERROR: Factuur incompleet i.v.m. ontbrekende orderreferentie vanuit scanning';
track_error (v_aanduiding_controle, 512, rec.fin_factuur_key, v_perslid_key); -- bit 9
ELSE
v_aanduiding_controle := 'ERROR: Factuur incompleet i.v.m. niet gevonden orderreferentie:' || rec.ordernr;
track_error (v_aanduiding_controle, 2, rec.fin_factuur_key, v_perslid_key); -- bit 1
END IF;
ELSE
v_errorhint := 'IBAN controle';
SELECT COALESCE(o.mld_uitvoerende_keys, bo.prs_bedrijf_key, c.cnt_prs_bedrijf_key, -1)
INTO v_bedrijf_key
FROM fin_factuur f,
mld_opdr o,
bes_bestelopdr bo,
cnt_contract c
WHERE f.mld_opdr_key = o.mld_opdr_key(+)
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
AND f.cnt_contract_key = c.cnt_contract_key(+)
AND f.fin_factuur_key = rec.fin_factuur_key;
SELECT FLX.getflex('PRS', k.prs_kenmerk_key, v_bedrijf_key, 'B', 1)
INTO v_bedrijf_iban
FROM prs_kenmerk k
WHERE k.prs_kenmerk_code = 'IBAN';
IF v_bedrijf_iban IS NULL
THEN
v_aanduiding_controle := 'ERROR: IBAN niet ingevuld bij leverancier.' ;
track_error (v_aanduiding_controle, POWER(2,7), rec.fin_factuur_key, v_perslid_key);
ELSE
IF COALESCE(UPPER(REPLACE(rec.kenmerk12, ' ')), 'QueQeLeQue') <> UPPER(REPLACE(v_bedrijf_iban, ' '))
THEN
-- dan gaan we ook de iban controleren
v_aanduiding_controle := 'ERROR: IBAN van de factuur: ' || UPPER(REPLACE(rec.kenmerk12, ' ')) || ' komt niet overeen met IBAN bij leverancier: ' || UPPER(REPLACE(v_bedrijf_iban, ' ')) || '!' ;
track_error (v_aanduiding_controle, POWER(2,6), rec.fin_factuur_key, v_perslid_key);
END IF;
END IF;
IF rec.prs_kostensoort_key IS NULL
THEN
v_aanduiding_controle := 'ERROR: Kostensoort niet ingevuld bij de factuur' ;
track_error (v_aanduiding_controle, POWER(2,12), rec.fin_factuur_key, v_perslid_key);
END IF;
-- Controle of er al een factuur ontvangen is met hetzelfde factuurnummer en referentie
-- 1 Afgewezen
-- 2 Ingevoerd
-- 3 Incompleet
-- 5 Ter goedkeuring
-- 6 Akkoord
-- 7 Verwerkt
v_errorhint := 'Controle op dubbele facturen';
IF rec.mld_opdr_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM mld_opdr oa, fin_factuur f
WHERE oa.mld_opdr_key = f.mld_opdr_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.mld_opdr_key = oa.mld_opdr_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
-- Nu we er toch zijn gaan we controleren of driewegmatching aanstaat voor de vakgroep.
-- SELECT mld_disc_params_factmatchmode, mld_statusopdr_key
-- INTO v_factmatchmode, v_statusopdr_key
-- FROM mld_disc_params dp, mld_stdmelding std, mld_melding m, mld_opdr o
-- WHERE o.mld_opdr_key = rec.mld_opdr_key
-- AND o.mld_melding_key = m.mld_melding_key
-- AND m.mld_stdmelding_key = std.mld_stdmelding_key
-- AND std.mld_ins_discipline_key = dp.mld_ins_discipline_key;
--
-- IF v_factmatchmode = 3 AND v_statusopdr_key IN (1,2,3,4,5,8,10) -- afgewezen, niet akkoord, ter fiattering, gefiatteerd, toegekend, geaccepteerd, tergoedkeuring
-- THEN
-- v_aanduiding_controle := 'ERROR: 3 weg matching maar verplichting niet afgemeld.' ;
-- track_error (v_aanduiding_controle, POWER(2,10), rec.fin_factuur_key, v_perslid_key);
-- END IF;
END IF;
IF rec.bes_bestelopdr_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM bes_bestelopdr oa, fin_factuur f
WHERE oa.bes_bestelopdr_key = f.bes_bestelopdr_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.bes_bestelopdr_key = oa.bes_bestelopdr_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
END IF;
IF rec.cnt_contract_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM cnt_contract ca, fin_factuur f
WHERE ca.cnt_contract_key = f.cnt_contract_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.cnt_contract_key = ca.cnt_contract_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
BEGIN
SELECT FAC.safe_to_number(FLX.getflex('CNT', k.cnt_kenmerk_key, rec.cnt_contract_key, 1))
INTO v_verdeelperiode_offset
FROM cnt_contract c, cnt_kenmerk k
WHERE c.ins_discipline_key = k.cnt_srtcontract_key
AND k.cnt_kenmerk_niveau = 'S'
AND k.cnt_kenmerk_code = 'VERDEELPERIODE_OFFSET'
AND c.cnt_contract_key = rec.cnt_contract_key;
UPDATE fin_factuur
SET fin_factuur_boekmaand = TO_CHAR(ADD_MONTHS(fin_factuur_datum, COALESCE(v_verdeelperiode_offset, 0)), 'yyyy-mm')
WHERE fin_factuur_key = rec.fin_factuur_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
NULL;
-- Niet erg als de waarde leeg is of het kenmerk niet gedefinieerd is. Dan hoeven we niets te doen.
END;
-- Bij YKPN wordt de beheerder van het contract als eerste goedkeurder aangewezen.
-- Voor de andere omgevingen wordt dit in het fin_set_approver proces uitgezocht.
IF vbxx.get_user = 'YKPN'
THEN
-- De beheerder van het contract gaat als eerste goedkeurder ingevuld worden.
-- Tenminste als deze rechten heeft op WEB_FINGOE
SELECT MAX(prs_perslid_key_beh)
INTO v_perslid_key_beh
FROM cnt_contract c, fac_v_webgebruiker g, fac_functie f
WHERE c.prs_perslid_key_beh = g.prs_perslid_key
AND g.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_FINGOE'
AND cnt_contract_key = rec.cnt_contract_key;
IF v_perslid_key_beh IS NOT NULL
THEN
UPDATE fin_factuur
SET prs_perslid_key_goedkeur = v_perslid_key_beh
WHERE fin_factuur_key = rec.fin_factuur_key;
END IF;
END IF;
END IF;
IF v_dubbele_facturen <> 0
THEN
v_aanduiding_controle := 'ERROR: Dubbele facturen gevonden!' ;
track_error (v_aanduiding_controle, POWER(2,4), rec.fin_factuur_key, v_perslid_key);
END IF;
-- tot slot nog nette logging
v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding);
-- Bij YKPN gaan we nog niet het generieke proces af trappen.
IF vbxx.get_user <> 'YKPN' AND vbxx.get_user <> 'HEIN'
THEN
vbxx.fin_set_approver(rec.fin_factuur_key);
END IF;
END IF;
END;
END LOOP;
-- We gaan nu beginnen met het verder verwerken van de factuur..
FOR rec IN cfactuurregel
LOOP
BEGIN
v_errorhint := 'Controle van de facuurregel';
-- vul de locatiecode in de factuurregel
IF rec.mld_opdr_key IS NOT NULL
THEN
BEGIN
SELECT l.alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key)
INTO v_locatie_code, v_gebouw_key
FROM mld_opdr o, mld_melding m, alg_locatie l
WHERE o.mld_opdr_key = rec.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
END;
END IF;
-- vul de locatiecode in de factuurregel
IF rec.bes_bestelopdr_key IS NOT NULL
THEN
BEGIN
SELECT l.alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key)
INTO v_locatie_code, v_gebouw_key
FROM bes_bestelopdr o, mld_adres a, alg_locatie l
WHERE o.bes_bestelopdr_key = rec.bes_bestelopdr_key
AND o.mld_adres_key_lev = a.mld_adres_key
AND a.alg_locatie_key = l.alg_locatie_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
END;
END IF;
-- vul de locatiecode in de factuurregel
IF rec.cnt_contract_key IS NOT NULL
THEN
BEGIN
SELECT alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key)
INTO v_locatie_code, v_gebouw_key
FROM alg_district d, alg_locatie l, fin_factuurregel fr
WHERE d.alg_district_key = l.alg_district_key
AND d.alg_regio_key IN (2, 3) -- binnenland / buitenland
AND l.alg_locatie_verwijder IS NULL
AND fr.fin_factuurregel_omschrijving LIKE '%' || l.alg_locatie_code || '%'
AND fr.fin_factuurregel_key = rec.fin_factuurregel_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
WHEN TOO_MANY_ROWS
THEN
v_locatie_code := 'Meerdere';
END;
END IF;
UPDATE fin_factuurregel fr
SET fr.fin_factuurregel_referentie = v_locatie_code
WHERE fr.fin_factuurregel_key = rec.fin_factuurregel_key;
IF v_gebouw_key IS NOT NULL AND c_kenmerk_key_gebouw IS NOT NULL
THEN
INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key,
fin_factuurregel_key,
fin_kenmerkfactregel_waarde)
VALUES (c_kenmerk_key_gebouw,
rec.fin_factuurregel_key,
v_gebouw_key);
END IF;
-- Zijn er regels niet goed geimporteerd? Dat kan voorkomen als bijvoorbeeld de combinatie btw tarief en verlegd
-- niet leiden tot een eenduidige Exact code
IF rec.fin_factuurregel_key IS NULL
THEN
SELECT (SELECT MAX (f.fin_factuur_key)
FROM fac_imp_factuur f
WHERE f.fac_import_key = fr.fac_import_key) factuur_key
INTO v_fin_factuur_key
FROM fac_imp_factuur fr
WHERE fr.fac_import_key = p_import_key
AND fr.fin_factuurregel_key IS NULL;
IF v_fin_factuur_key IS NOT NULL
THEN
v_aanduiding_controle := 'ERROR: Fouten in ge<67>mporteerde factuur op ' || to_char(SYSDATE, 'DD-MM-YYYY');
track_error (v_aanduiding_controle, POWER(2,5), rec.fin_factuur_key, v_perslid_key);
END IF;
END IF;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
-- ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint || CHR(10) ||
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')' ;
SELECT MAX(i.fin_factuur_key) fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr
INTO v_fin_factuur_key, v_errorhint
FROM fac_imp_factuur i, fin_factuur f
WHERE i.fac_import_key = p_import_key
AND i.fin_factuur_key = f.fin_factuur_key (+)
GROUP BY i.fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr ;
IF v_fin_factuur_key IS NOT NULL
THEN
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3
WHERE fin_factuur_key = v_fin_factuur_key ;
track_error ('Bij factuurimport is volgende Errormessage gemeld: ' || v_errormsg || CHR (13) || CHR (10) ||
'Actie 1: Informeren Facilitor' || CHR (13) || CHR (10) ||
'Actie 2: Factuur gewoon oppakken: Aanvullen, doorzetten, etc', POWER(2,8), v_fin_factuur_key, v_perslid_key);
v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ;
fac.trackaction ('FINUPD', v_fin_factuur_key, v_perslid_key, NULL, v_aanduiding);
END IF;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' - ' || v_aanduiding);
COMMIT;
END;
/
--- bit 0: bijlage kon niet opgeslagen worden.
--- bit 1: niet gevonden orderreferentie
--- bit 2: fout in bedrijfsherkenning
--- bit 3: overige fout uit import
--- bit 4: dubbele factuur
--- bit 5: verzamelfactuur
--- bit 6: IBAN niet correct
--- bit 7: IBAN niet gevuld bij leverancier
--- bit 8: Proces fout (Oracle foutmelding)
--- bit 9: ontbrekende orderreferentie uit scanning
--- bit 10: 3 weg matching maar verplichting niet afgemeld
--- bit 11: Geen factuurbijlage aangetroffen.
CREATE OR REPLACE VIEW vbxx_v_fac_scan_result_detail
AS
SELECT f.fin_factuur_key factuur_key,
(SELECT MAX(n.fin_factuur_note_omschrijving)
FROM fin_factuur_note n
WHERE n.fin_factuur_key = f.fin_factuur_key
AND n.fin_factuur_note_omschrijving LIKE 'Factuur import:%') || CHR(13) || CHR(10) || fin_factuur_opmerking
fin_factuur_opmerking,
FAC.gettrackingdate ('FINNEW', f.fin_factuur_key) fin_factuur_aanmaak,
bi.foutmelding,
b.prs_bedrijf_naam
FROM fin_factuur f,
(SELECT kf.fin_factuur_key, 'bijlage kon niet opgeslagen worden' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 1) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'niet gevonden orderreferentie' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 2) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'fout in bedrijfsherkenning' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 4) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'overige fout uit import' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 8) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'dubbele factuur' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 16) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'verzamelfactuur' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 32) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'IBAN nummer' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 64) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'IBAN niet ingevuld bij leverancier' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 128) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'proces fout' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 256) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'geen orderreferentie uit scanning' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 512) <> 0
UNION ALL
SELECT kf.fin_factuur_key, '3 weg matching maar verplichting niet afgemeld' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 1024) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'Geen factuurbijlage aangetroffen' foutmelding
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 2048) <> 0) bi,
(SELECT fo.fin_factuur_key, mld_uitvoerende_keys prs_bedrijf_key
FROM mld_opdr o, fin_factuur fo
WHERE fo.mld_opdr_key = o.mld_opdr_key
UNION ALL
SELECT fb.fin_factuur_key, bo.prs_bedrijf_key
FROM bes_bestelopdr bo, fin_factuur fb
WHERE fb.bes_bestelopdr_key = bo.bes_bestelopdr_key
UNION ALL
SELECT fc.fin_factuur_key, c.cnt_prs_bedrijf_key
FROM cnt_contract c, fin_factuur fc
WHERE fc.cnt_contract_key = c.cnt_contract_key) fbed,
prs_bedrijf b
WHERE f.fin_factuur_key = bi.fin_factuur_key AND f.fin_factuur_key = fbed.fin_factuur_key(+)
AND fbed.prs_bedrijf_key = b.prs_bedrijf_key(+);
CREATE OR REPLACE VIEW vbxx_v_fac_scan_result_trend
AS
SELECT f.fin_factuur_key factuur_key,
FAC.gettrackingdate ('FINNEW', f.fin_factuur_key) fin_factuur_aanmaak,
waarde,
kfb.fin_kenmerkfactuur_waarde
FROM fin_factuur f,
(SELECT kf.fin_factuur_key, 1 waarde
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_code = 'FOUTCODE'
AND k.fin_kenmerk_verwijder IS NULL
AND fin_kenmerkfactuur_waarde <> '0') kff,
(SELECT fin_factuur_key, fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf, fin_kenmerk k
WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key
AND k.fin_kenmerk_verwijder IS NULL
AND k.fin_kenmerk_code = 'MAREON_BRON') kfb
WHERE f.fin_factuur_key = kff.fin_factuur_key(+)
AND f.fin_factuur_key = kfb.fin_factuur_key(+)
AND fin_factuur_bron = 1;
-- YAXX#88421 Mogelijkheden voor fiattering en goedkeuring in Purchase to Pay proces
CREATE OR REPLACE VIEW vbxx_v_rap_factuur_verplichting
AS
WITH
factuur_totaal
AS
(SELECT f.fin_factuur_key,
DECODE (
f.cnt_contract_key,
NULL, DECODE (
f.mld_opdr_key,
NULL, TO_NUMBER (NULL),
(SELECT SUM (f2.fin_factuur_totaal)
FROM fin_factuur f2
WHERE f.mld_opdr_key = f2.mld_opdr_key
AND f2.fin_factuur_datum <= f.fin_factuur_datum
AND f2.fin_factuur_verwijder IS NULL
AND f2.fin_factuur_statuses_key NOT IN (1, 3))),
(SELECT SUM (f2.fin_factuur_totaal)
FROM fin_factuur f2
WHERE f.cnt_contract_key = f2.cnt_contract_key
AND f2.fin_factuur_boekmaand = f.fin_factuur_boekmaand
AND f2.fin_factuur_verwijder IS NULL
AND f2.fin_factuur_statuses_key NOT IN (1, 3))) factuurtotaal
FROM fin_factuur f)
SELECT f.fin_factuur_key,
f.fin_factuur_datum,
f.fin_factuur_boekmaand,
(SELECT t.fac_tracking_datum
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_tracking_refkey = f.fin_factuur_key
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'FINNEW')
fin_factuur_aanmaak,
fs.fin_factuur_statuses_omschr
factuur_status,
DECODE (f.fin_factuur_flag, 1, 'Ja', 'Nee')
dispuut,
(SELECT b.prs_bedrijf_naam
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = COALESCE (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key))
leverancier,
(SELECT r.alg_regio_omschrijving
FROM alg_regio r, alg_district d, alg_locatie l
WHERE r.alg_regio_key = d.alg_regio_key
AND d.alg_district_key = l.alg_district_key
AND l.alg_locatie_key = COALESCE (cs.alg_locatie_key, m.mld_alg_locatie_key))
regio,
DECODE (o.mld_opdr_key,
NULL, 'C' || c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0'),
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr)
verplichting,
f.fin_factuur_totaal
factuurbedrag,
COALESCE (
o.mld_opdr_kosten,
(SELECT fs.cnt_factuurschema_bedrag
FROM cnt_factuurschema fs
WHERE fs.cnt_contract_key = c.cnt_contract_key AND fs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand))
verplichting_bedrag,
c.cnt_contract_kosten
totaal_contract,
(SELECT SUM (f.fin_factuur_totaal)
FROM fin_factuur f2
WHERE f2.cnt_contract_key = c.cnt_contract_key)
gefactureerd_contract,
ft.factuurtotaal,
DECODE (
SIGN (
ft.factuurtotaal
- COALESCE (
o.mld_opdr_kosten,
(SELECT fs.cnt_factuurschema_bedrag
FROM cnt_factuurschema fs
WHERE fs.cnt_contract_key = c.cnt_contract_key
AND fs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand))),
-1, 'Groen',
0, 'Groen',
'Rood')
kleur
FROM fin_factuur f,
fin_factuur_statuses fs,
cnt_contract c,
mld_opdr o,
mld_melding m,
bes_bestelopdr bo,
bes_bestelopdr_item boi,
factuur_totaal ft,
( SELECT cnt_contract_key, MAX (alg_locatie_key) alg_locatie_key
FROM (SELECT cnt_contract_key, cnt_alg_plaats_key alg_locatie_key
FROM cnt_contract_plaats cp
WHERE cp.cnt_alg_plaats_code = 'L'
UNION
SELECT cnt_contract_key, alg_locatie_key
FROM cnt_contract_plaats cp, alg_gebouw g
WHERE cp.cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key = g.alg_gebouw_key)
GROUP BY cnt_contract_key) cs
WHERE f.cnt_contract_key = c.cnt_contract_key(+)
AND c.cnt_contract_key = cs.cnt_contract_key(+)
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.mld_melding_key = m.mld_melding_key(+)
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key(+)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
AND f.fin_factuur_key = ft.fin_factuur_key;
CREATE OR REPLACE VIEW vbxx_v_rap_error_log
AS
SELECT COALESCE (imp_log_applicatie, ia.fac_import_app_oms) applicatie,
imp_log_datum,
imp_log_status,
imp_log_omschrijving,
imp_log_hint
FROM imp_log i, fac_import im, fac_import_app ia
WHERE i.fac_import_key = im.fac_import_key(+)
AND im.fac_import_app_key = ia.fac_import_app_key(+);
/*
reversed billing verstuurd
begin vbxx_select_fact('FACT', sysdate); end;
*/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile