Files
Customer/VBXX/vbxx.sql
2024-11-19 16:25:43 +00:00

5456 lines
232 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;
PROCEDURE set_opslag_perc (p_opdr_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_opdr_district (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);
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;
END;
/
CREATE OR REPLACE PACKAGE BODY VBXX
AS
FUNCTION get_user RETURN VARCHAR2
AS
BEGIN
RETURN SUBSTR (USER, 1, 4);
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_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_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 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_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
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 o.mld_opdr_key = p_opdr_key;
-- Controleer of het leveranciersnummer 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
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;
-- 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
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
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
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
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;
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_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 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;
RETURN v_district_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 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_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_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_funccodegk_kenmerk_key fin_kenmerk.fin_kenmerk_key%TYPE;
v_funccodegk VARCHAR2(10);
v_new_funccodegk VARCHAR2(10);
v_ggk_bedrag NUMBER(12,2);
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Als er een match was op de factuur hoeven we niets te doen. We laten alleen facturen goedkeuren als er een mismatch
-- in het verplichtingsbedrag is en het factuurbedrag.
IF vbxx.matchfactuur(p_factuur_key) <> -1 AND 1=0 -- Voorlopig besloten dat alle facturen gecontroleerd moeten worden.
THEN
RETURN;
END IF;
v_errorhint := 'Bepaal factuurbedrag en goedkeurder.';
-- De goedkeurder gebruiken we later om te kijken of deze de factuur al heeft goedgekeurd
SELECT fin_factuur_statuses_key, fin_factuur_totaal, prs_perslid_key_goedkeur
INTO v_factuur_statuses_key, v_factuur_totaal, v_perslid_key_goedkeur
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
-- Als de factuurstatus ingevoerd is hoeven we nog niets te doen. De factuur moet eerst gefiatteerd worden door iemand
-- met FINBOF rechten.
IF v_factuur_statuses_key = 2 -- 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;
-- Nu bepalen we de locatie van de factuur. Adh daarvan kunnen we bepalen wie hier rechten op heeft.
v_errorhint := 'Bepaal locatie.';
SELECT alg_locatie_key
INTO v_locatie_key
FROM ( 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,
alg_gebouw g
WHERE fg.alg_gebouw_key = g.alg_gebouw_key AND fg.fin_factuur_key = p_factuur_key;
v_errorhint := 'Bepaal kenmerk_key van FUNCCODEGK.';
SELECT fin_kenmerk_key
INTO v_funccodegk_kenmerk_key
FROM fin_kenmerk
WHERE fin_kenmerk_code = 'FUNCCODEGK';
v_funccodegk := FLX.getflex ('FIN', v_funccodegk_kenmerk_key, p_factuur_key);
dbms_output.put_line ('v_funccodegk:' || v_funccodegk);
CASE WHEN v_funccodegk IS NULL 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
-- Nu de volgende in de reeks uitnodigen
v_perslid_key_goedkeur := vbxx.get_first_aut_user(v_locatie_key, v_new_funccodegk);
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
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
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 o.mld_typeopdr_key = 22 -- Mandaatopdracht
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;
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;
END;
/
--
-- 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 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 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;
--
-- Overzicht om de rechten van de groepen te kunnen tonen.
--
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 (1000);
v_aanduiding VARCHAR2 (1000); -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_skipfield VARCHAR2 (100);
-- De importvelden
v_imp_opslag_key NUMBER (10);
v_begin_txt VARCHAR2 (100);
v_eind_txt VARCHAR2 (100);
v_locatie_code VARCHAR2 (100);
v_srtdiscipline_omschrijving VARCHAR2 (100);
v_discipline_omschrijving VARCHAR2 (100);
v_kostensoort_refcode VARCHAR2 (100);
v_opslag_txt VARCHAR2 (100);
v_leverancier_nr VARCHAR2 (100);
v_locatie_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;
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_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_refcode);
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);
-- 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_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_refcode) = 'NEN CODE' OR UPPER (v_kostensoort_refcode) = 'PRS_KOSTENSOORT_REFCODE')
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')
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_locatie_code
|| ' | '
|| v_srtdiscipline_omschrijving
|| ' | '
|| v_discipline_omschrijving
|| ' | '
|| v_kostensoort_refcode
|| ' | '
|| v_leverancier_nr
|| ' | '
|| v_opslag_txt
|| ' | '
|| v_begin_txt
|| ' | '
|| v_eind_txt;
v_errorhint := 'Controleer locatie';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE alg_locatie_verwijder IS NULL
AND UPPER (alg_locatie_code) =
UPPER (TRIM (v_locatie_code));
BEGIN
v_errorhint := 'Controleer vakgroeptype';
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_srtdiscipline_key := NULL;
END;
BEGIN
v_errorhint := 'Controleer vakgroep';
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
AND UPPER (ins_discipline_omschrijving) =
UPPER (TRIM (v_discipline_omschrijving));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_discipline_key := NULL;
END;
BEGIN
v_errorhint := 'Controleer nen code';
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE UPPER (prs_kostensoort_refcode) =
UPPER (TRIM (v_kostensoort_refcode));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostensoort_key := NULL;
END;
BEGIN
v_errorhint := 'Controleer leverancier';
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_bedrijf_key := NULL;
END;
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');
INSERT INTO vbxx_imp_opslag (
imp_opslag_key,
alg_locatie_key,
ins_srtdiscipline_key,
ins_discipline_key,
prs_kostensoort_key,
prs_bedrijf_key,
opslag,
ingangsdatum,
einddatum,
imp_opslag_aanmaak)
VALUES (v_imp_opslag_key + 1,
v_locatie_key,
v_srtdiscipline_key,
v_discipline_key,
v_kostensoort_key,
v_bedrijf_key,
v_opslag,
v_begin,
v_eind,
SYSDATE);
ELSE
IF rec1.fac_imp_file_index = 1 THEN
fac.imp_writelog (p_import_key,
'I',
'Geen geldige header aangetroffen',
v_locatie_code
|| ' | '
|| v_srtdiscipline_omschrijving
|| ' | '
|| v_discipline_omschrijving
|| ' | '
|| v_kostensoort_refcode
|| ' | '
|| 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,
l.alg_locatie_code,
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_omschrijving,
prs_kostensoort_refcode,
prs_leverancier_nr,
o.opslag,
o.ingangsdatum,
o.einddatum,
o.imp_opslag_aanmaak,
o.imp_opslag_verwijder
FROM vbxx_imp_opslag o,
alg_locatie l,
ins_srtdiscipline sd,
mld_discipline d,
prs_kostensoort k,
prs_bedrijf b
WHERE o.alg_locatie_key = l.alg_locatie_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) = 'REVERSEDBILLINGOPDRACHT'
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 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 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) = 'REVERSEDBILLINGOPDRACHT'
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 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 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) = 'REVERSEDBILLINGOPDRACHT'
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 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 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,
bps
)
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,
'X' bps -- X=Don't care!
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?
DECODE (c.cnt_contract_nummer_intern, 30, 'O', 'X') bps -- 30=Maatwerk-contract met Eurest Catering
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,
DECODE (c.cnt_contract_nummer_intern, 30, 'O', 'X')
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?
DECODE (x.cnt_contract_nummer_intern, 30, 'O', 'X') bps -- 30=Maatwerk-contract met Eurest Catering
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,
DECODE (x.cnt_contract_nummer_intern, 30, 'O', 'X')
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?
DECODE (c.cnt_contract_nummer_intern, 30, DECODE (m.mld_alg_onroerendgoed_keys, 8023, 'B', 'O'), 'X') bps -- 30=Maatwerk-contract met Eurest Catering/8023=Restaurant BPS (TERM-T1-3-R3236)
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 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?
DECODE (c.cnt_contract_nummer_intern, 30, DECODE (m.mld_alg_onroerendgoed_keys, 8023, 'B', 'O'), 'X') bps -- 30=Maatwerk-contract met Eurest Catering/8023=Restaurant BPS (TERM-T1-3-R3236)
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,
bps
)
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),
bps
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,
bps;
/*
-- 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,
bps
)
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)),
v.bps
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,
v.bps;
-- 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,
bps
)
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,
v.bps
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,
bps
)
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,
v.bps
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,
bps
)
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,
v.bps
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,
bps
)
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,
v.bps
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,
bps
)
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,
v.bps
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 kfsg_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,
bps
)
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,
v.bps
FROM kfsg_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_typeopdr_key = ot.mld_typeopdr_key
AND UPPER(ot.mld_typeopdr_omschrijving) = 'REVERSEDBILLINGOPDRACHT';
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 hh: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_contactpersoon cp1, prs_v_aanwezigperslid p1
WHERE kl1.prs_kenmerk_key = 1020 -- Contactpersoon factuurnotificatie!
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,
--63681, -- Maartje Vreijling
--cp.prs_perslid_key, -- Leverancier-contactpersonen (met noti-vinkje)
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 kfsg_v_frozen_fact v,
cp cp,
fac_usrrap r,
fac_srtnotificatie sn
WHERE TO_CHAR (SYSDATE, 'dd') = '11' -- Op de ochtend na 10e 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) = 'KFSG_V_FROZEN_FACT'
AND sn.fac_srtnotificatie_code = 'CUST01'
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 kfsg_v_frozen_fact v,
fac_gebruikersgroep gg,
prs_v_aanwezigperslid p,
fac_usrrap r,
fac_srtnotificatie sn
WHERE TO_CHAR (SYSDATE, 'dd') = '11' -- Op de ochtend na 10e van de maand!
AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
AND gg.fac_groep_key = 281 -- Schiphol Finance/Control
AND gg.prs_perslid_key = p.prs_perslid_key
AND UPPER (r.fac_usrrap_view_name) = 'KFSG_V_FROZEN_FACT'
AND sn.fac_srtnotificatie_code = 'CUST02';
*/
--
-- 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 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_opmerking,
f.fin_factuur_boekmaand,
prs_kostensoort_oms,
k.prs_kostensoort_refcode,
k.prs_kostensoort_opmerking,
k.prs_kostensoort_key,
g.alg_gebouw_code,
(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')
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')
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')
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,
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 FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key),
'B'),
'A')
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,
fin_factuur_boekmaand
)
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,
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,
fin_factuur_boekmaand
FROM ( SELECT g.fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
SUM (fin_factuurregel_totaal)
bedrag,
SUM (fin_factuurregel_totaal + fin_factuurregel_btw)
bedrag_incl,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
e.alg_district_key,
g.typefactuur
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_factuur_opmerking,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_opmerking,
mld_opdr_key,
cnt_contract_key,
exact_code_gebouw,
fin_factuur_boekmaand,
g.dagboek,
g.afw_dagboek,
g.afw_kstdrcode,
e.alg_district_key,
g.typefactuur) fg,
prs_bedrijf b
WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_leverancier_nr IS NOT NULL;
-- 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
)
AS
CURSOR c(c_dagboek VARCHAR2)
IS
SELECT crdnr, factuur_nr, MAX(datum) datum, MAX(oms_kop) oms_kop
FROM vbxx_v_bron_export_exact_xml
WHERE c_dagboek = dagboek
AND (alg_district_key = p_district_key OR p_district_key = -1)
GROUP BY crdnr, 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;
-- Bepaling boekmaand
--IF TO_NUMBER(TO_CHAR(SYSDATE, 'DD')) < 11
--THEN
-- v_boekmaand := TRUNC(ADD_MONTHS(SYSDATE,-1));
--ELSE
-- v_boekmaand := TRUNC(SYSDATE);
--END IF;
-- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan
DELETE fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = 1
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;
-- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
-- deze keys gebruikt kunnen worden.
DELETE vbxx_exp_factuur
WHERE dagboek = p_dagboek
AND alg_district_key = p_district_key;
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 = -1) -- Multi-client heeft een district key. Bij single client is deze -1
AND dagboek = p_dagboek
);
-- 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';
-- 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';
-- 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;
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
)
AS
CURSOR c_fact
IS
SELECT DISTINCT f.fin_factuur_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 (f.alg_district_key = p_district_key OR p_district_key = -1);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanvrager NUMBER;
v_bestelling_key NUMBER;
v_bestand VARCHAR2(12);
v_logdate DATE;
v_volgnr NUMBER;
BEGIN
v_errormsg := 'Geen akties';
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);
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.
DELETE vbxx_exp_factuur
WHERE dagboek = p_dagboek
AND (alg_district_key = p_district_key OR p_district_key = -1);
END;
/
--
-- Verkoopfacturen
--
CREATE OR REPLACE VIEW vbxx_v_kosten_doorbelasting
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key
meldingnummer,
m.mld_melding_key,
l.alg_locatie_omschrijving
meldinglocatie,
di.alg_district_omschrijving
district,
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,
COALESCE (kso.prs_kostensoort_oms, ksm.prs_kostensoort_oms)
opdracht_nen_omschrijving,
b.prs_bedrijf_naam
opdrachtuitvoerende,
o.mld_opdr_kosten
opdrachtkosten,
ok.bedrag
factuurbedrag,
VBXX.get_opslag_perc (o.mld_opdr_key)
opslag,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 0, COALESCE(ok.bedrag, o.mld_opdr_kosten) * ((100 + VBXX.get_opslag_perc (o.mld_opdr_key)) / 100))
kostenplusopslag,
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 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'),
1, 'Ja',
'Nee')
pro_forma_goedgekeurd,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 'Ja', 'Nee')
nietdoorbelasten,
o.mld_opdr_key,
l.alg_district_key,
kso.prs_kostensoort_oms
afw_opdracht_nen_omschrijving,
kso.prs_kostensoort_refcode
afw_opdracht_nen_code,
kin.mld_kenmerkopdr_waarde klantinkoopnr
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_district di,
prs_kostensoort kso,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
alg_v_allonrgoed_gegevens aog,
(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 FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = fac_usrdata_key) tf,
( SELECT f.mld_opdr_key, SUM (fin_factuur_totaal) bedrag
FROM fin_factuur f
WHERE f.fin_factuur_statuses_key = 7
GROUP BY f.mld_opdr_key
UNION ALL
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') 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') 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') 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 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 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(+);
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,
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
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
--
CREATE OR REPLACE VIEW vbxx_v_export_pro_forma (
result,
result_order,
alg_district_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;' ||
'opdrachtuitvoerende;' ||
'opdrachtkosten;' ||
'opslag;' ||
'kostenplusopslag;' ||
'boekmaand;' ||
'pro_forma_goedgekeurd;' ||
'niet_doorbelasten;' ||
'meldinggebouw;', -1, alg_district_key
FROM alg_district
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_omschrijving || ';' ||
opdrachtuitvoerende || ';' ||
REPLACE(opdrachtkosten, '.', ',') || ';' ||
opslag || ';' ||
REPLACE(kostenplusopslag, '.', ',') || ';' ||
boekmaand || ';' ||
pro_forma_goedgekeurd || ';' ||
nietdoorbelasten || ';' ||
meldinggebouw,
mld_melding_key,
alg_district_key
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9;
-- 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_district_key IN NUMBER
)
AS
CURSOR c
IS
SELECT mld_opdr_key, opdrachttype_key
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9
AND (alg_district_key = p_district_key OR p_district_key = -1);
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;
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 alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
SELECT alg_kenmerk_key
INTO v_datum_pro_forma_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_code = 'DATUMPROFORMA';
ALG.upsertkenmerk (v_datum_pro_forma_kenmerk_key, p_district_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly datum pro forma
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_typeopdr_key = rec.opdrachttype_key;
-- zet de opdracht op 'Gereed voor facturatie'
FLX.setflex('OPD', rec.mld_opdr_key, v_gvf_kenmerk_key, 1); -- Facturatiestatus naar 'Gereed voor facturatie'
EXCEPTION
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_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 p_district_key = -1);
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);
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.
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 alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
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)
VALUES (SYSDATE,
rec.opdrachtnummer,
SYSDATE,
rec.meldingnummer,
'opdracht',
rec.mld_opdr_key,
rec.opdracht_nen_omschrijving,
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
);
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';
FLX.setflex('OPD', v_boekmaand_kenmerk_key, rec.mld_opdr_key, v_boekmaand);
END;
END LOOP;
SELECT alg_kenmerk_key
INTO v_exp_proforma_kenmerk_key
FROM alg_kenmerk k
WHERE k.alg_kenmerk_code = 'EXPROFORMA';
ALG.upsertkenmerk (v_exp_proforma_kenmerk_key, p_district_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';
ALG.upsertkenmerk (v_boekmaand_kenmerk_key, p_district_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: ontbrekende orderreferentie
--- bit 2: fout in bedrijfsherkenning
--- bit 3: overige fout uit import
--- bit 4: dubbele factuur
--- bit 5: verzamelfactuur
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.factuurnr, 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
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_controle NUMBER(10);
c_kenmerk_key_verzamel NUMBER(10);
c_kenmerk_key_mareon_bron 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);
PROCEDURE track_error (p_error_str IN VARCHAR2, p_foutcode IN NUMBER, p_factuur_key IN NUMBER, p_perslid_key IN NUMBER)
IS
v_factuur_opmerking FIN_FACTUUR.FIN_FACTUUR_OPMERKING%TYPE;
v_kenmerk_key_foutcode FIN_KENMERK.FIN_KENMERK_KEY%TYPE;
v_foutcode NUMBER(10);
v_verschil NUMBER(10);
BEGIN
fac.trackaction ('FINUPD', p_factuur_key, p_perslid_key, NULL, p_error_str);
SELECT fin_factuur_opmerking
INTO v_factuur_opmerking
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
IF v_factuur_opmerking IS NOT NULL
THEN
v_factuur_opmerking := SUBSTR(v_factuur_opmerking || CHR (13) || CHR (10) || p_error_str, 1, 250);
ELSE
v_factuur_opmerking := SUBSTR(p_error_str,1,250);
END IF;
-- nog reden vullen:
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = v_factuur_opmerking
WHERE fin_factuur_key = p_factuur_key;
SELECT fin_kenmerk_key
INTO v_kenmerk_key_foutcode
FROM fin_kenmerk
WHERE fin_kenmerk_code = 'FOUTCODE';
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;
BEGIN
SELECT prs_perslid_key
INTO v_perslid_key
FROM fac_import
WHERE fac_import_key = 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;
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;
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;
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;
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;
-- Nu kunnen we de standaard FCLT verwerk import facturen draaien
fac_update_factuur (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;
-- CUST: Voor verwerking Contracten die qua versienr nog gecontroleerd moeten worden het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_controle
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_code = 'EXTRACONTROLE'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Verzamelfactuur-indicatie het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_verzamel
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_code = 'VERZAMELFACTUUR'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Mareon-bron het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_mareon_bron
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = 'C'
AND fin_kenmerk_code = 'MAREON_BRON'
AND fin_kenmerk_verwijder IS NULL;
-- 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..
FOR rec IN cfactuur
LOOP
BEGIN
-- Als er een bijlage-flexprop en een bijlage is, dan gaan we deze PDF hier inzetten....
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;
-- 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
v_aanduiding_controle := 'ERROR: Factuur incompleet i.v.m. ontbrekende orderreferentie (vanuit scanning)' ;
track_error (v_aanduiding_controle, 2, rec.fin_factuur_key, v_perslid_key); -- bit 1
END IF;
-- Fout gemeldt door Mareon
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
IF rec.kenmerk9 IS NOT NULL AND c_kenmerk_key_mareon_bron IS NOT NULL
THEN
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_mareon_bron, rec.kenmerk9);
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
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;
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;
-- 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;
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);
END;
END LOOP;
-- We gaan nu beginnen met het verder verwerken van de factuur..
FOR rec IN cfactuurregel
LOOP
BEGIN
-- 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
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 :=
'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,
fin_factuur_opmerking = SUBSTR('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', 1, 250)
WHERE fin_factuur_key = v_fin_factuur_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: ontbrekende orderreferentie
--- bit 2: fout in bedrijfsherkenning
--- bit 3: overige fout uit import
--- bit 4: dubbele factuur
--- bit 5: verzamelfactuur
CREATE OR REPLACE VIEW vbxx_v_fac_scan_result_detail
AS
SELECT f.fin_factuur_key factuur_key,
f.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 BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 1) <> 0
UNION ALL
SELECT kf.fin_factuur_key, 'ontbrekende 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 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 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 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 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 BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 32) <> 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 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_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;
/*
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