-- -- $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); PROCEDURE set_opslag_perc_cat (p_rsv_artikel_key IN NUMBER); FUNCTION get_opslag_perc (p_opdr_key IN NUMBER) RETURN NUMBER; FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER) RETURN VARCHAR2; FUNCTION bepaal_fin_district (p_fin_key IN NUMBER) RETURN NUMBER; FUNCTION bepaal_fin_regio (p_fin_key IN NUMBER) RETURN NUMBER; FUNCTION bepaal_opdr_district (p_opdr_key IN NUMBER) RETURN NUMBER; FUNCTION bepaal_opdr_regio (p_opdr_key IN NUMBER) RETURN NUMBER; FUNCTION bepaal_fin_gebouw (p_fin_key IN NUMBER) RETURN NUMBER; PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER); PROCEDURE update_verkoopprijs; PROCEDURE fin_set_approver (p_factuur_key IN NUMBER); PROCEDURE set_mandaatbedrag (p_opdr_key IN NUMBER); 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_district_key ALG_DISTRICT.ALG_DISTRICT_KEY%TYPE; v_regio_key ALG_REGIO.ALG_REGIO_KEY%TYPE; v_srtdiscipline_key INS_SRTDISCIPLINE.INS_SRTDISCIPLINE_KEY%TYPE; v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE; v_kostensoort_key PRS_KOSTENSOORT.PRS_KOSTENSOORT_KEY%TYPE; v_bedrijf_key MLD_OPDR.MLD_UITVOERENDE_KEYS%TYPE; v_melding_datum MLD_MELDING.MLD_MELDING_DATUM%TYPE; v_opslag_kenmerk_key MLD_KENMERK.MLD_KENMERK_KEY%TYPE; v_kenmerkopdr_key MLD_KENMERKOPDR.MLD_KENMERKOPDR_KEY%TYPE; BEGIN -- Bepaal de key van het kenmerk opslagpercentage SELECT mld_kenmerk_key INTO v_opslag_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'OPSLAGPERC' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = o.mld_typeopdr_key AND o.mld_opdr_key = p_opdr_key; IF v_opslag_kenmerk_key IS NULL THEN -- Dit opdrachttype kent geen opslagpercentage. RETURN; END IF; -- Als het verkooppercentage al is ingevuld gaan we dit niet meer aanpassen. SELECT MAX(mld_kenmerkopdr_key) INTO v_kenmerkopdr_key FROM mld_kenmerkopdr ko WHERE ko.mld_kenmerk_key = v_opslag_kenmerk_key AND ko.mld_opdr_key = p_opdr_key; IF v_kenmerkopdr_key IS NOT NULL THEN -- percentage is al eerder bepaald. Dan kan het ook door de behandelaar aangepast zijn. -- Dan gaan we het niet meer aanpassen. RETURN; END IF; -- In het geval er materiaal regels aan de opdracht zitten rekenen we geen opslag. -- De materiaal regels bevatten namelijk een prijs incl opslag. -- Als de kostensoort bij de opdracht ingevuld is dan is dit de waarde die we gebruiken. SELECT count(*) INTO v_opdr_mat FROM mld_opdr_materiaal om WHERE om.mld_opdr_key = p_opdr_key; IF v_opdr_mat > 0 THEN RETURN; END IF; SELECT di.alg_regio_key, di.alg_district_key, m.mld_alg_locatie_key, sd.ins_srtdiscipline_key, d.ins_discipline_key, COALESCE(o.prs_kostensoort_key, std.prs_kostensoort_key), mld_melding_datum, mld_uitvoerende_keys INTO v_regio_key, v_district_key, v_locatie_key, v_srtdiscipline_key, v_discipline_key, v_kostensoort_key, v_melding_datum, v_bedrijf_key FROM mld_melding m, mld_opdr o, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd, alg_locatie l, alg_district di WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = di.alg_district_key AND o.mld_opdr_key = p_opdr_key; -- Controleer of het leveranciersnummer is ingevuld in de opslag tabel. Dan -- gelden deze als eerste. -- Controleer of de NEN code en bedrijf is ingevuld in de opslag tabel. Dan -- geldt deze altijd. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key = v_bedrijf_key AND prs_kostensoort_key = v_kostensoort_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- Controleer of de vakgroep icm vakgroeptype en bedrijf is ingevuld in de opslag tabel. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key = v_bedrijf_key AND ins_discipline_key = v_discipline_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- alleen het bedrijf is ingevuld. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key = v_bedrijf_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- bedrijf is niet gevuld -- Controleer of de NEN code is ingevuld in de opslag tabel. Dan -- geldt deze altijd. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key IS NULL AND prs_kostensoort_key = v_kostensoort_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum+1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- Controleer of de vakgroep icm vakgroeptype is ingevuld in de opslag tabel. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key IS NULL AND ins_discipline_key = v_discipline_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- Controleer of de vakgroeptype is ingevuld in de opslag tabel. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key IS NULL AND ins_srtdiscipline_key = v_srtdiscipline_key AND ins_discipline_key IS NULL AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; -- Dan houden we nog één optie over en dat is een lege regel. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND prs_bedrijf_key IS NULL AND ins_srtdiscipline_key IS NULL AND ins_discipline_key IS NULL AND prs_kostensoort_key IS NULL AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_melding_datum >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_melding_datum < einddatum +1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_melding_datum BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN MLD.upsertopdrachtkenmerk (v_opslag_kenmerk_key, p_opdr_key, v_opslag); RETURN; END IF; RETURN; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN; END; PROCEDURE set_opslag_perc_cat (p_rsv_artikel_key IN NUMBER) AS v_geen_opslag NUMBER; v_opslag NUMBER; v_regio_key ALG_REGIO.ALG_REGIO_KEY%TYPE; v_district_key ALG_DISTRICT.ALG_DISTRICT_KEY%TYPE; v_locatie_key ALG_LOCATIE.ALG_LOCATIE_KEY%TYPE; v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE; v_rsv_ruimte_van RES_RSV_RUIMTE.RES_RSV_RUIMTE_VAN%TYPE; v_opslag_kenmerk_key RES_KENMERK.RES_KENMERK_KEY%TYPE; PROCEDURE upsertkenmerk (p_kenmerk_key IN NUMBER, p_opslag IN NUMBER) AS v_kenmerkartikel_key RES_KENMERKARTIKEL.RES_KENMERKARTIKEL_KEY%TYPE; BEGIN SELECT res_kenmerkartikel_key INTO v_kenmerkartikel_key FROM res_kenmerkartikel WHERE res_kenmerkartikel_verwijder IS NULL AND res_kenmerk_key = p_kenmerk_key AND res_rsv_artikel_key = p_rsv_artikel_key; UPDATE res_kenmerkartikel SET res_kenmerkartikel_waarde = TO_CHAR(p_opslag) WHERE res_kenmerkartikel_key = v_kenmerkartikel_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO res_kenmerkartikel (res_rsv_artikel_key, res_kenmerk_key, res_kenmerkartikel_waarde) VALUES (p_rsv_artikel_key, p_kenmerk_key, TO_CHAR(p_opslag)); END; BEGIN -- Bepaal de locatie en de catalogus SELECT ab.alg_regio_key, ab.alg_district_key, ab.alg_locatie_key, ra.res_discipline_key, rrr.res_rsv_ruimte_van INTO v_regio_key, v_district_key, v_locatie_key, v_discipline_key, v_rsv_ruimte_van FROM res_rsv_artikel rra, res_artikel ra, res_rsv_ruimte rrr, res_v_rsv_ruimte_2_alg_ruimte r2a, alg_v_onrgoed_boom ab WHERE rra.res_artikel_key = ra.res_artikel_key AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+) AND ab.alg_ruimte_key = COALESCE(rrr.alg_ruimte_key, r2a.alg_ruimte_key) AND rra.res_rsv_artikel_key = p_rsv_artikel_key; BEGIN SELECT res_kenmerk_key INTO v_opslag_kenmerk_key FROM res_kenmerk WHERE res_discipline_key = v_discipline_key AND res_kenmerk_niveau = 'D' AND res_kenmerk_code = 'OPSLAGPERC'; EXCEPTION WHEN NO_DATA_FOUND THEN v_opslag_kenmerk_key := NULL; END; -- Controleer of het locatienummer en de catalogus is ingevuld in de opslag tabel. Dan -- geldt deze als eerste. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE (alg_locatie_key = v_locatie_key OR (alg_locatie_key IS NULL AND alg_district_key = v_district_key) OR (alg_locatie_key IS NULL AND alg_district_key IS NULL AND alg_regio_key = v_regio_key) ) AND ins_discipline_key = v_discipline_key AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_rsv_ruimte_van >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van < einddatum+1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = (1 + v_opslag / 100) * res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key; upsertkenmerk (v_opslag_kenmerk_key, v_opslag); RETURN; END IF; -- Controleer of de catalogus is ingevuld in de opslag tabel. SELECT MAX(opslag) INTO v_opslag FROM vbxx_imp_opslag WHERE ins_discipline_key = v_discipline_key AND alg_locatie_key IS NULL AND ( (ingangsdatum IS NULL AND einddatum IS NULL) OR (ingangsdatum IS NOT NULL AND einddatum IS NULL AND v_rsv_ruimte_van >= ingangsdatum) OR (ingangsdatum IS NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van < einddatum+1) OR (ingangsdatum IS NOT NULL AND einddatum IS NOT NULL AND v_rsv_ruimte_van BETWEEN ingangsdatum AND einddatum+1) ) AND imp_opslag_verwijder IS NULL; IF v_opslag IS NOT NULL THEN UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = (1 + v_opslag / 100) * res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key; upsertkenmerk (v_opslag_kenmerk_key, v_opslag); RETURN; END IF; RETURN; EXCEPTION WHEN NO_DATA_FOUND THEN UPDATE res_rsv_artikel SET res_rsv_artikel_prijs = res_rsv_artikel_inkoopprijs WHERE res_rsv_artikel_key = p_rsv_artikel_key; RETURN; END; FUNCTION get_opslag_perc (p_opdr_key IN NUMBER) RETURN NUMBER AS v_opslag_kenmerk_key NUMBER; v_opslag NUMBER(5,2); BEGIN SELECT mld_kenmerk_key INTO v_opslag_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'OPSLAGPERC' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = o.mld_typeopdr_key AND o.mld_opdr_key = p_opdr_key; v_opslag := COALESCE(flx.getflex ('OPD', v_opslag_kenmerk_key, p_opdr_key),0); RETURN v_opslag; END; -- Gaan we deze nog gebruiken? FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER) RETURN VARCHAR2 AS v_geen_opslag NUMBER; v_srtopslag ALG_KENMERK.ALG_KENMERK_OMSCHRIJVING%TYPE; v_locatie_key ALG_LOCATIE.ALG_LOCATIE_KEY%TYPE; v_srtdiscipline_key INS_SRTDISCIPLINE.INS_SRTDISCIPLINE_KEY%TYPE; v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE; v_kostensoort_key PRS_KOSTENSOORT.PRS_KOSTENSOORT_KEY%TYPE; BEGIN SELECT alg_kenmerk_omschrijving INTO v_srtopslag FROM alg_onrgoedkenmerk aogk, alg_kenmerk ak, mld_melding m, mld_opdr o, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND aogk.alg_kenmerk_key = ak.alg_kenmerk_key AND aogk.alg_kenmerk_key = DECODE (sd.ins_srtdiscipline_omschrijving, 'Projecten', 1002, DECODE (d.ins_discipline_omschrijving, 'Schoonmaak', 1003, 1000)) AND aogk.alg_onrgoed_key = m.mld_alg_locatie_key AND o.mld_melding_key = m.mld_melding_key AND o.mld_opdr_key = p_opdr_key; RETURN v_srtopslag; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL; END; -- deze functie bepaald aan de hand van de factuur_key het district en daarmee de administratie -- waaronder deze factuur geboekt gaat worden. FUNCTION bepaal_fin_district (p_fin_key IN NUMBER) RETURN NUMBER AS v_district_key NUMBER; BEGIN SELECT MIN(l.alg_district_key) INTO v_district_key FROM fin_factuur f, mld_opdr o, mld_melding m, alg_locatie l WHERE f.fin_factuur_key = p_fin_key AND f.mld_opdr_key = o.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key; IF v_district_key IS NOT NULL THEN RETURN v_district_key; END IF; SELECT MIN (alg_district_key) INTO v_district_key FROM fin_factuur f, cnt_contract_plaats cp, alg_locatie l WHERE f.fin_factuur_key = p_fin_key AND f.cnt_contract_key = cp.cnt_contract_key AND ( cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key IN (SELECT alg_gebouw_key FROM alg_gebouw g WHERE g.alg_locatie_key = l.alg_locatie_key) OR (cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = l.alg_locatie_key)); RETURN v_district_key; END; -- deze functie bepaald aan de hand van de factuur_key de regio en daarmee de administratie -- waaronder deze factuur geboekt gaat worden. FUNCTION bepaal_fin_regio (p_fin_key IN NUMBER) RETURN NUMBER AS v_regio_key NUMBER; BEGIN SELECT MIN(alg_regio_key) INTO v_regio_key FROM alg_district WHERE alg_district_key = bepaal_fin_district(p_fin_key); RETURN v_regio_key; END; -- deze functie bepaald aan de hand van de opdracht het district FUNCTION bepaal_opdr_district (p_opdr_key IN NUMBER) RETURN NUMBER AS v_district_key NUMBER; BEGIN SELECT alg_district_key INTO v_district_key FROM mld_opdr o, mld_melding m, alg_locatie l WHERE o.mld_opdr_key = p_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key; RETURN v_district_key; END; -- deze functie bepaald aan de hand van de opdracht de regio FUNCTION bepaal_opdr_regio (p_opdr_key IN NUMBER) RETURN NUMBER AS v_regio_key NUMBER; BEGIN SELECT alg_regio_key INTO v_regio_key FROM mld_opdr o, mld_melding m, alg_locatie l, alg_district d WHERE o.mld_opdr_key = p_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key; RETURN v_regio_key; END; -- deze functie bepaald aan de hand van de factuur_key het gebouw. FUNCTION bepaal_fin_gebouw (p_fin_key IN NUMBER) RETURN NUMBER AS v_gebouw_key NUMBER; BEGIN SELECT alg_gebouw_key INTO v_gebouw_key FROM fin_factuur f, mld_opdr o, mld_melding m, alg_v_onroerendgoed aog WHERE f.fin_factuur_key = p_fin_key AND f.mld_opdr_key = o.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys; RETURN v_gebouw_key; END; -- Vul het kenmerk verkoopprijs (key 201) bij de opdracht PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER) AS v_opdr_kosten NUMBER; v_verkoopprijs NUMBER; v_opslag NUMBER; v_typeopdr_key NUMBER; v_opslag_kenmerk_key NUMBER; v_verkoop_kenmerk_key NUMBER; BEGIN -- Bepaal de key van het kenmerk opslagpercentage SELECT mld_kenmerk_key INTO v_opslag_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'OPSLAGPERC' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = o.mld_typeopdr_key AND o.mld_opdr_key = p_opdr_key; -- Bepaal de key van het kenmerk verkoopprijs SELECT mld_kenmerk_key INTO v_verkoop_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'VERKOOPPRIJS' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = o.mld_typeopdr_key AND o.mld_opdr_key = p_opdr_key; SELECT mld_opdr_kosten, mld_typeopdr_key INTO v_opdr_kosten, v_typeopdr_key FROM mld_opdr o WHERE mld_opdr_key = p_opdr_key; v_opslag := COALESCE(flx.getflex ('OPD', v_opslag_kenmerk_key, p_opdr_key),0); v_verkoopprijs := v_opdr_kosten * ((100 + v_opslag) /100); MLD.upsertopdrachtkenmerk (v_verkoop_kenmerk_key, p_opdr_key, v_verkoopprijs); EXCEPTION WHEN NO_DATA_FOUND THEN -- waarschijnlijk een opdrachttype zonder verkoopprijs en/of opslagpercentage RETURN; END; -- Als een opdracht de ter (her)fiattering ligt wordt afgewezen, zal de verkoopprijs al aangepast zijn. Deze -- procedure controleert 's-nachts of er afkeuringen geweest zijn en past dan de verkoopprijs aan. PROCEDURE update_verkoopprijs AS CURSOR c IS SELECT * FROM fac_tracking WHERE fac_srtnotificatie_key = 99 -- ORDGNO opdracht goedkeuring is afgekeurd. AND fac_tracking_datum > SYSDATE - 1; BEGIN FOR rec IN c LOOP BEGIN vbxx.set_verkoopprijs (rec.fac_tracking_refkey); END; END LOOP; END; FUNCTION get_first_aut_user (p_locatie_key IN NUMBER, p_functie_code IN VARCHAR2) RETURN number AS v_perslid_key NUMBER(10); BEGIN SELECT DISTINCT MAX(g.prs_perslid_key) INTO v_perslid_key FROM fac_v_webgebruiker g, fac_functie f, prs_perslid p, prs_v_afdeling d WHERE EXISTS ( SELECT 1 FROM fac_v_webgebruiker g1, fac_functie f1 WHERE g1.prs_perslid_key = p.prs_perslid_key AND g1.fac_functie_key = f1.fac_functie_key AND f1.fac_functie_code = 'WEB_FINGOE') AND g.fac_functie_key = f.fac_functie_key AND g.prs_perslid_key = p.prs_perslid_key AND ( g.fac_gebruiker_alg_level_write = -1 OR ( g.fac_gebruiker_alg_level_write < 9 AND p_locatie_key IN (SELECT alg_locatie_key FROM fac_v_my_locations WHERE prs_perslid_key = p.prs_perslid_key AND niveau = fac_gebruiker_alg_level_write))) AND fac_functie_code = p_functie_code; RETURN v_perslid_key; END; PROCEDURE fin_set_approver (p_factuur_key IN NUMBER) AS v_count NUMBER; v_perslid_key_goedkeur fin_factuur.prs_perslid_key_goedkeur%TYPE; v_factuur_statuses_key fin_factuur.fin_factuur_statuses_key%TYPE; v_factuur_totaal fin_factuur.fin_factuur_totaal%TYPE; v_perslid_naam_goedkeur VARCHAR2 (100); v_locatie_key alg_locatie.alg_locatie_key%TYPE; v_regio_key alg_regio.alg_regio_key%TYPE; v_funccodegk_kenmerk_key fin_kenmerk.fin_kenmerk_key%TYPE; v_kenmerk_fg alg_onrgoedkenmerk.alg_onrgoedkenmerk_waarde%TYPE; v_contract_key NUMBER(10); v_contract_mngr_key NUMBER(10); v_funccodegk VARCHAR2(10); v_new_funccodegk VARCHAR2(10); v_ggk_bedrag NUMBER(12,2); v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Om foutmeldingen te voorkomen controleren we eerst of er wel een verplichting gekoppeld is. SELECT count(*) INTO v_count FROM fin_factuur f WHERE f.fin_factuur_key = p_factuur_key AND ( f.mld_opdr_key IS NOT NULL OR f.cnt_contract_key IS NOT NULL OR f.bes_bestelopdr_key IS NOT NULL); IF v_count = 0 THEN RETURN; END IF; -- Nu bepalen we de locatie van de factuur. Adh daarvan kunnen we bepalen wie hier rechten op heeft. v_errorhint := 'Bepaal locatie.'; SELECT l.alg_locatie_key, d.alg_regio_key INTO v_locatie_key, v_regio_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, alg_locatie l, alg_district d WHERE fg.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND fg.fin_factuur_key = p_factuur_key; v_errorhint := 'Bepaal de instelling of we gaan goedkeuren op deze locatie.'; BEGIN SELECT FLX.getflex ('ALG', k.alg_kenmerk_key, v_regio_key, 'E',1) INTO v_kenmerk_fg FROM alg_kenmerk k WHERE alg_kenmerk_code = 'FACT_AUTO_GOEDKEUREN'; EXCEPTION WHEN NO_DATA_FOUND THEN v_kenmerk_fg := 0; END; -- 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 v_kenmerk_fg = 1 -- Als de factuur matched en 'Facturen zonder afwijking automatisch goedkeuren' staat aan bij de regio THEN UPDATE fin_factuur SET fin_factuur_statuses_key = 5 WHERE fin_factuur_key = p_factuur_key; -- Voeg tracking toe dat de factuur automatisch is goedgekeurd. fac.trackaction('FINGOE', p_factuur_key, NULL, NULL, NULL); RETURN; END IF; v_errorhint := 'Bepaal factuurbedrag en goedkeurder.'; -- De goedkeurder gebruiken we later om te kijken of deze de factuur al heeft goedgekeurd SELECT f.fin_factuur_statuses_key, f.fin_factuur_totaal, f.prs_perslid_key_goedkeur, f.cnt_contract_key, c.prs_perslid_key_eig INTO v_factuur_statuses_key, v_factuur_totaal, v_perslid_key_goedkeur, v_contract_key, v_contract_mngr_key FROM fin_factuur f, cnt_contract c WHERE f.cnt_contract_key = c.cnt_contract_key(+) AND fin_factuur_key = p_factuur_key; -- Bij contracten gaat deze eerst langs de contract eigenaar. -- Nu kijken we of deze wel rechten op FINGOE heeft. Anders kan deze niet de goedkeurder worden. -- Dan volgen we maar het normale pad en moet de Facility manager goedkeuren. IF v_contract_mngr_key IS NOT NULL THEN SELECT count(*) INTO v_count FROM fac_v_webgebruiker g, fac_functie f WHERE g.prs_perslid_key = v_contract_mngr_key AND g.fac_functie_key = f.fac_functie_key AND f.fac_functie_code = 'WEB_FINGOE'; IF v_count = 0 THEN v_contract_mngr_key := NULL; END IF; END IF; -- Als de factuurstatus incompleet of ingevoerd is hoeven we nog niets te doen. De factuur moet eerst gefiatteerd worden door iemand -- met FINBOF rechten. -- Dat geldt echter niet voor contracten die goedgekeurd moeten worden. Deze worden automatisch naar status ter goedkeuring gezet -- en de contracteigenaar moet dan als eerste goedkeuren. IF v_factuur_statuses_key = 3 OR (v_factuur_statuses_key = 2 AND v_contract_mngr_key IS NULL) -- incompleet of ingevoerd THEN RETURN; END IF; -- Controleer of deze functionaris de factuur ook daadwerkelijk heeft goedgekeurd v_errorhint := 'Bepaal of de factuur al goedgekeurd is.'; SELECT COUNT (*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'FINGOE' AND t.prs_perslid_key = v_perslid_key_goedkeur AND t.fac_tracking_refkey = p_factuur_key; v_errorhint := 'Bepaal kenmerk_key van FUNCCODEGK.'; SELECT k.fin_kenmerk_key INTO v_funccodegk_kenmerk_key FROM fin_kenmerk k WHERE k.fin_kenmerk_code = 'FUNCCODEGK' AND k.fin_kenmerk_verwijder IS NULL; v_funccodegk := FLX.getflex ('FIN', v_funccodegk_kenmerk_key, p_factuur_key); dbms_output.put_line ('v_funccodegk:' || v_funccodegk); -- De contracteigenaar moet altijd als eerste de factuur goedkeuren ongeacht het bedrag. Hier gebruiken we WEB_FINGOE voor CASE WHEN v_funccodegk IS NULL AND v_contract_mngr_key IS NOT NULL THEN v_ggk_bedrag := 0; v_new_funccodegk := 'WEB_FINGOE'; WHEN v_funccodegk IS NULL OR v_funccodegk = 'WEB_FINGOE' THEN v_ggk_bedrag := 15000; v_new_funccodegk := 'WEB_USER61'; WHEN v_funccodegk = 'WEB_USER61' THEN v_ggk_bedrag := 50000; v_new_funccodegk := 'WEB_USER62'; WHEN v_funccodegk = 'WEB_USER62' THEN v_ggk_bedrag := 100000; v_new_funccodegk := 'WEB_USER63'; WHEN v_funccodegk = 'WEB_USER63' THEN v_ggk_bedrag := 300000; v_new_funccodegk := 'WEB_USER64'; WHEN v_funccodegk = 'WEB_USER64' THEN v_ggk_bedrag := 10000000; v_new_funccodegk := NULL; END CASE; dbms_output.put_line ('v_ggk_bedrag: ' || v_ggk_bedrag); dbms_output.put_line ('v_new_funccodegk: ' || v_new_funccodegk); IF v_count > 0 OR v_funccodegk IS NULL THEN IF v_factuur_totaal > v_ggk_bedrag THEN -- Als het om de eerste goedkeuring op een contract gaat dan moet deze eerst naar de contracteigenaar IF v_funccodegk IS NULL and v_contract_mngr_key IS NOT NULL THEN v_perslid_key_goedkeur := v_contract_mngr_key; ELSE -- Nu de volgende in de reeks uitnodigen v_perslid_key_goedkeur := vbxx.get_first_aut_user(v_locatie_key, v_new_funccodegk); END IF; dbms_output.put_line ('v_perslid_key_goedkeur: ' || v_perslid_key_goedkeur); v_errorhint := 'Set status en goedkeurder'; IF v_perslid_key_goedkeur IS NOT NULL THEN UPDATE fin_factuur SET fin_factuur_statuses_key = 5 WHERE fin_factuur_key = p_factuur_key; UPDATE fin_factuur SET prs_perslid_key_goedkeur = v_perslid_key_goedkeur WHERE fin_factuur_key = p_factuur_key; -- We vermelden in het kenmerk wat het niveau is van de huidige goedkeuring FLX.setflex ('FIN', v_funccodegk_kenmerk_key, p_factuur_key, v_new_funccodegk); -- We sturen een notificatie naar de persoon die de factuur moet goedkeuren. fac.putnotificationsrtprio(NULL, v_perslid_key_goedkeur, 'FIN2GO', p_factuur_key, 'Uw goedkeuring is vereist voor factuur '|| p_factuur_key, NULL, NULL, NULL, NULL, 2, NULL); END IF; END IF; -- fin_factuur_totaal > v_ggk_bedrag END IF; EXCEPTION WHEN NO_DATA_FOUND THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('VBXX.fin_set_approver', 'E', v_errormsg || ' (' || p_factuur_key || ')' , v_errorhint); END; PROCEDURE set_mandaatbedrag (p_opdr_key IN NUMBER) AS v_mandaatbedrag NUMBER; v_opdr_kosten NUMBER(10,2); BEGIN -- Mandaatbedrag is nu in de core opgenomen YASK#84687 RETURN; SELECT prs_kenmerklink_waarde, o.mld_opdr_kosten INTO v_mandaatbedrag, v_opdr_kosten FROM prs_kenmerklink kl, prs_kenmerk k, prs_bedrijf b, mld_opdr o, mld_typeopdr ot WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND b.prs_bedrijf_key = kl.prs_link_key AND kl.prs_kenmerk_key = k.prs_kenmerk_key AND k.prs_kenmerk_code = 'MANDAATBEDRAG' AND k.prs_kenmerk_verwijder IS NULL AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND ( UPPER(ot.mld_typeopdr_omschrijving) like 'MANDAAT%' -- Mandaatopdracht OR UPPER(ot.mld_typeopdr_omschrijving) like 'REVERSED%') -- ReversedBilling AND o.mld_opdr_key = p_opdr_key; IF v_opdr_kosten IS NULL THEN UPDATE mld_opdr SET mld_opdr_kosten = v_mandaatbedrag WHERE mld_opdr_key = p_opdr_key; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN -- hej, dan is er geen mandaatbedrag gedefinieerd bij het bedrijf en hoeven we dus ook niets te doen. RETURN; END; 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) || ''); 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; / -- -- Export views om data van meldingsnotities en opdrachtnotities te exporteren. -- CREATE OR REPLACE VIEW vbxx_v_rap_melding_note AS SELECT n.mld_melding_key melding, l.alg_locatie_omschrijving locatie, g.alg_gebouw_omschrijving gebouw, d.ins_discipline_omschrijving vakgroep, m.mld_melding_datum melding_datum, mld_melding_note_aanmaak notitie_aanmaak, mld_melding_note_wijzigdatum notitie_laatste_wijziging, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = n.prs_perslid_key) notitie_aangemaakt_door, mld_melding_note_omschrijving notitie, DECODE (BITAND (mld_melding_note_flag, 1), 1, 'Naar FrondEnd ') || DECODE (BITAND (mld_melding_note_flag, 64), 64, ' (gemailde notitie) ') flag FROM mld_melding_note n, mld_melding m, alg_locatie l, alg_v_allonrgoed_gegevens aogg, alg_gebouw g, mld_stdmelding std, mld_discipline d WHERE n.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND m.mld_alg_onroerendgoed_keys = aogg.alg_onroerendgoed_keys(+) AND aogg.alg_gebouw_key = g.alg_gebouw_key(+) AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key ORDER BY melding; CREATE OR REPLACE VIEW vbxx_v_rap_opdr_note AS SELECT o.mld_melding_key melding, o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht, b.prs_bedrijf_naam leverancier, l.alg_locatie_omschrijving locatie, g.alg_gebouw_omschrijving gebouw, d.ins_discipline_omschrijving vakgroep, m.mld_melding_datum melding_datum, mld_opdr_note_aanmaak notitie_aanmaak, mld_opdr_note_wijzigdatum notitie_laatste_wijziging, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = n.prs_perslid_key) notitie_aangemaakt_door, mld_opdr_note_omschrijving notitie, DECODE (BITAND (mld_opdr_note_flag, 1), 1, 'Naar FrondEnd ') || DECODE (BITAND (mld_opdr_note_flag, 4), 4, 'Naar Uitvoerende ') || DECODE (BITAND (mld_opdr_note_flag, 32), 32, ' (onbeantwoorde vraag aan FE) ') || DECODE (BITAND (mld_opdr_note_flag, 64), 64, ' (gemailde notitie) ') flag FROM mld_opdr_note n, mld_opdr o, prs_bedrijf b, mld_melding m, alg_locatie l, alg_v_allonrgoed_gegevens aogg, alg_gebouw g, mld_stdmelding std, mld_discipline d WHERE n.mld_opdr_key = o.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND m.mld_alg_onroerendgoed_keys = aogg.alg_onroerendgoed_keys(+) AND aogg.alg_gebouw_key = g.alg_gebouw_key(+) AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key ORDER BY melding, mld_opdr_bedrijfopdr_volgnr; leverancier, vakgroep, locatie & gebouw , datum gemeld en natuurlijk opdrachtnummer. -- -- View om het factuurschema zichtbaar te maken in de contracten xml. We voegen een standaard rapport toe aan -- de contracten. Vervolgens kunnen we dan in de xsl het factuurschema eruit halen. In afwachting van de echte oplossing: -- CARG#85884 Factuurschema ontbreekt in contract-XML, graag toevoegen -- CREATE OR REPLACE VIEW vbxx_v_factuurschema AS SELECT cnt_contract_key, cnt_factuurschema_boekmaand, cnt_factuurschema_bedrag, cnt_factuurschema_opmerking FROM cnt_factuurschema; CREATE OR REPLACE VIEW vbxx_v_rap_technadres AS SELECT b.prs_bedrijf_key bedrijf_key, b.prs_bedrijf_naam bedrijf_naam, p.prs_bedrijfadres_url url FROM prs_bedrijfadres p, prs_bedrijf b WHERE UPPER(p.prs_bedrijfadres_url) LIKE 'HTTP%' AND b.prs_bedrijf_key = p.prs_bedrijf_key AND b.prs_bedrijf_verwijder IS NULL; -- -- View om bedrijven op te schonen. Het rapport geeft in één oogopslag inzicht in de recente activiteiten van het bedrijf -- CREATE OR REPLACE VIEW vbxx_v_rap_bedrijf_gegevens AS SELECT prs_bedrijf_naam, prs_bedrijf_key, prs_bedrijf_aanmaak aanmaak, prs_bedrijf_leverancier l, prs_bedrijf_uitvoerende u, prs_bedrijf_contract c, (SELECT COUNT (DISTINCT prs_dienst_key) FROM prs_bedrijfdienstlocatie bdl WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key) n_diensten, (SELECT COUNT (*) FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key) n_tech_adres, (SELECT COUNT (*) FROM mld_opdr o WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key) n_opdr, (SELECT COUNT (*) FROM mld_opdr o WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_opdr_datumbegin > SYSDATE - (2 * 365)) n_opdr_2jr, (SELECT MAX (mld_opdr_datumbegin) FROM mld_opdr o WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_opdr_datumbegin > SYSDATE - (2 * 365)) opdr_datum_max, (SELECT COUNT (*) FROM cnt_contract c WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) n_contract, (SELECT COUNT (*) FROM cnt_contract c WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND cnt_contract_looptijd_tot > SYSDATE AND cnt_contract_status <> 1) n_contract_nu, (SELECT COUNT (*) FROM bes_bestelopdr bo WHERE bo.prs_bedrijf_key = b.prs_bedrijf_key) n_bestellingen, (SELECT COUNT (*) FROM bes_bestelopdr bo WHERE bo.prs_bedrijf_key = b.prs_bedrijf_key AND bes_bestelopdr_datum > SYSDATE - (2 * 365)) n_bestellingen_2jr FROM prs_bedrijf b WHERE prs_bedrijf_verwijder IS NULL AND (prs_bedrijf_intern <> 1 OR prs_bedrijf_intern IS NULL); -- View om notificaties naar bedrijven te sturen die opdrachten hebben die al 5 dagen geleden afgemeld hadden moeten zijn. -- Ze krijgen dan een mail met een link naar het knoppenscherm. CUST04 wordt hier nu gebruikt voor KFHT. Als het bij een andere -- omgeving aangepast moet worden zal er een DECODE op de user gedaan moeten worden. -- Notificaties mogen niet bij alle flags verzonden worden. -- lcl_mld_flag1 - Wacht op reactie melder -- lcl_mld_flag2 - Wacht op offerte -- lcl_mld_flag3 - Wacht op onderdelen -- lcl_mld_flag4 - Wacht op reactie FM/CM -- lcl_mld_flag5 - Wacht op reactie CSM -- lcl_mld_flag6 - Wacht op klant akkoord -- De notificatie wordt alleen verzonden als er geen flag staat of flag 2 of 3 CREATE OR REPLACE VIEW vbxx_v_noti_mld_opdr_reminder ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY, XEMAIL, XMOBILE ) AS SELECT 'CUST04', NULL, NULL, 'Facilitor opdrachtnr. ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr || ' - HERINNERING', o.mld_opdr_key, NULL, prs_bedrijf_email, NULL FROM ins_srtdiscipline sd, mld_discipline d, mld_stdmelding std, mld_melding m, mld_opdr o, prs_bedrijf b, prs_kenmerklink kl, prs_kenmerk k WHERE prs_kenmerk_code = 'AFMELDSCHERM' AND m.mld_melding_key = o.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND k.prs_kenmerk_key = kl.prs_kenmerk_key AND k.prs_kenmerk_verwijder IS NULL AND kl.prs_link_key = b.prs_bedrijf_key AND b.prs_bedrijf_key = o.mld_uitvoerende_keys AND b.prs_bedrijf_email IS NOT NULL AND o.mld_statusopdr_key IN (5, 8) -- Toegekend, Geaccepteerd. AND COALESCE(m.mld_melding_flag, 0) IN (0,2,3) AND TRUNC (o.mld_opdr_einddatum) <= TRUNC (SYSDATE) - 5; -- Power BI views. De beschrijving van de views staat in z:\Project\Implementaties\Customers\YAxx\Doc\YAXX#74390 Datalake\ -- Wijzigingen ook daarin aanpassen. CREATE OR REPLACE VIEW vbxx_v_bimelding AS SELECT m.mld_melding_key, m.mld_melding_externnr, mld_meldbron_omschrijving, m.mld_melding_start_key, m.mld_alg_locatie_key alg_locatie_key, og.alg_gebouw_key, og.alg_verdieping_key, og.alg_ruimte_key, k.prs_kostenplaats_nr, k.prs_kostenplaats_omschrijving, m.prs_perslid_key, m.mld_melding_behandelaar_key, std.mld_stdmelding_omschrijving, d.ins_discipline_omschrijving, sd.ins_srtdiscipline_prefix, sd.ins_srtdiscipline_omschrijving, (SELECT mld_statuses_omschrijving FROM mld_statuses sta WHERE sta.mld_statuses_key = m.mld_melding_status) mld_melding_status, m.mld_melding_datum, m.mld_melding_einddatum, m.mld_melding_acceptdatum_std, m.mld_melding_einddatum_std, m.mld_melding_t_uitvoertijd.tijdsduur mld_melding_uitvoertijd_duur, m.mld_melding_t_uitvoertijd.eenheid mld_melding_uitvoertijd_eenh, m.mld_melding_t_accepttijd.tijdsduur mld_melding_accepttijd_duur, m.mld_melding_t_accepttijd.eenheid mld_melding_accepttijd_eenh, m.t_doorlooptijd.tijdsduur mld_melding_doorlooptijd_duur, m.t_doorlooptijd.eenheid mld_melding_doorlooptijd_eenh, DECODE(mld_melding_spoed, 1, 'Kritiek', 2, 'Hoog', 3, 'Normaal', 4, 'Laag', 'Onbekend') mld_melding_prioritieit, mld.getmeldingstatusdate (m.mld_melding_key, 4) mld_melding_geaccepteerd, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1)) mld_melding_afgemeld, m.mld_melding_onderwerp, m.mld_melding_omschrijving, m.mld_melding_opmerking, m.mld_melding_parentkey, m.mld_melding_satisfaction, m.mld_melding_satisfaction_op, (SELECT MAX(fac_tracking_datum) FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_tracking_refkey = m.mld_melding_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_xmlnode = 'melding') last_changed FROM ( SELECT m1.*, CASE WHEN m1.mld_melding_einddatum > COALESCE (fac.gettrackingdate ('MLDAFM', m1.mld_melding_key), fac.gettrackingdate ('MLDREJ', m1.mld_melding_key), SYSDATE) THEN 1 ELSE 0 END plan_uitvoertijd_sla, CASE WHEN m1.mld_melding_indult = 1 OR std1.mld_stdmelding_slabewaken = 0 THEN 1 ELSE 0 END sla_nvt, DECODE (m1.mld_melding_t_uitvoertijd.eenheid, 'D', m1.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (m1.mld_melding_t_uitvoertijd.eenheid, 'U', m1.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkuren, DECODE (m1.mld_melding_t_respijt.eenheid, 'D', m1.mld_melding_t_respijt.tijdsduur, NULL) sla_respijtdgn, DECODE (m1.mld_melding_t_respijt.eenheid, 'U', m1.mld_melding_t_respijt.tijdsduur, NULL) sla_respijturen, CASE WHEN m1.mld_melding_spoed = 3 THEN std1.mld_stdmelding_t_accepttijd WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr1 WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr2 WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr4 END sla_accpt, --m.mld_melding_datum datum, CASE WHEN std1.mld_stdmelding_planbaar = 2 THEN TO_DATE(NULL) ELSE m1.mld_melding_einddatum END einddatum, --mld_melding_einddatum_std einddatum_std, --mld_melding_acceptdatum_std acceptdatum, COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 5), mld.getmeldingstatusdate (m1.mld_melding_key, 1)) afgemeld, COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 4), mld.getmeldingstatusdate (m1.mld_melding_key, 1)) accepted, mld.getactualuitvoer (m1.mld_melding_key) t_doorlooptijd FROM mld_melding m1, mld_stdmelding std1 WHERE m1.mld_stdmelding_key = std1.mld_stdmelding_key) m, alg_v_allonrgoed_gegevens og, mld_meldbron mb, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd, prs_kostenplaats k WHERE m.mld_meldbron_key = mb.mld_meldbron_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key and d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND m.fac_activiteit_key IS NULL; CREATE OR REPLACE VIEW vbxx_v_bimeldingkenmerk AS SELECT mld_melding_key, COALESCE(k.mld_kenmerk_omschrijving, sk.mld_srtkenmerk_omschrijving) mld_kenmerk_omschrijving, DECODE (sk.mld_srtkenmerk_kenmerktype, 'R', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1), 'S', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1), flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key)) mld_kenmerk_waarde FROM mld_kenmerk k, mld_srtkenmerk sk, mld_kenmerkmelding km WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND km.mld_kenmerk_key = k.mld_kenmerk_key; -- -- 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 (4000); v_aanduiding VARCHAR2 (1000); -- Import line v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_skipfield VARCHAR2 (100); v_ongeldig NUMBER; -- De importvelden v_imp_opslag_key NUMBER (10); v_begin_txt VARCHAR2 (100); v_eind_txt VARCHAR2 (100); v_locatie_code VARCHAR2 (100); v_district_omschrijving VARCHAR2 (100); v_regio_omschrijving VARCHAR2 (100); v_srtdiscipline_omschrijving VARCHAR2 (100); v_discipline_omschrijving VARCHAR2 (100); v_kostensoort_oms VARCHAR2 (100); v_opslag_txt VARCHAR2 (100); v_leverancier_nr VARCHAR2 (100); v_opmerking VARCHAR2 (2000); v_locatie_key NUMBER (10); v_district_key NUMBER (10); v_regio_key NUMBER (10); v_srtdiscipline_key NUMBER (10); v_discipline_key NUMBER (10); v_kostensoort_key NUMBER (10); v_bedrijf_key NUMBER (10); v_opslag NUMBER (8, 4); v_begin DATE; v_eind DATE; v_null_date DATE; header_found BOOLEAN; BEGIN -- Eerst opruiming -- Init header_found := FALSE; v_fielddelimitor := ';'; FOR rec1 IN c_cursor LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := v_newline; v_ongeldig := 0; IF SUBSTR (v_newline, 1, 3) = '?' THEN -- EF BB BF aangetroffen fac.imp_writelog (p_import_key, 'W', 'Byte Order Mark aangetroffen', 'Bestand heeft onbehandeld UTF-8 formaat.'); v_newline := SUBSTR (v_newline, 4); END IF; fac.imp_getfield (v_newline, v_fielddelimitor, v_regio_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_district_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtdiscipline_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_discipline_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_kostensoort_oms); fac.imp_getfield (v_newline, v_fielddelimitor, v_leverancier_nr); fac.imp_getfield (v_newline, v_fielddelimitor, v_opslag_txt); fac.imp_getfield (v_newline, v_fielddelimitor, v_begin_txt); fac.imp_getfield (v_newline, v_fielddelimitor, v_eind_txt); fac.imp_getfield (v_newline, v_fielddelimitor, v_opmerking); -- Skip until a valid header is found -- De headers in de Excel export zijn ander dan in de csv export daarom controleren we op beiden. IF (UPPER (v_regio_omschrijving) = 'REGIO' OR UPPER (v_regio_omschrijving) = 'ALG_REGIO_OMSCHRIJVING') AND (UPPER (v_district_omschrijving) = 'DISTRICT' OR UPPER (v_district_omschrijving) = 'ALG_DISTRICT_OMSCHRIJVING') AND (UPPER (v_locatie_code) = 'LOCATIE' OR UPPER (v_locatie_code) = 'ALG_LOCATIE_CODE') AND (UPPER (v_srtdiscipline_omschrijving) = 'VAKGROEPTYPE' OR UPPER (v_srtdiscipline_omschrijving) = 'INS_SRTDISCIPLINE_OMSCHRIJVING') AND (UPPER (v_discipline_omschrijving) = 'VAKGROEP' OR UPPER (v_discipline_omschrijving) = 'INS_DISCIPLINE_OMSCHRIJVING') AND (UPPER (v_kostensoort_oms) = 'KOSTENSOORT' OR UPPER (v_kostensoort_oms) = 'PRS_KOSTENSOORT_OMS') AND (UPPER (v_leverancier_nr) = 'LEVERANCIERNUMMER' OR UPPER (v_leverancier_nr) = 'PRS_LEVERANCIER_NR') AND UPPER (v_opslag_txt) = 'OPSLAG' AND UPPER (v_begin_txt) = 'INGANGSDATUM' AND (UPPER (v_eind_txt) = 'VERVALDATUM' OR UPPER (v_eind_txt) = 'EINDDATUM') AND UPPER (v_opmerking) = 'OPMERKING' THEN -- Sla de kopregel over. header_found := TRUE; UPDATE vbxx_imp_opslag SET imp_opslag_verwijder = SYSDATE WHERE imp_opslag_verwijder IS NULL; ELSIF (header_found) THEN -- voeg nieuwe records toe -- en wijzig bestaande records v_aanduiding := v_regio_omschrijving || ' | ' || v_district_omschrijving || ' | ' || v_locatie_code || ' | ' || v_srtdiscipline_omschrijving || ' | ' || v_discipline_omschrijving || ' | ' || v_kostensoort_oms || ' | ' || v_leverancier_nr || ' | ' || v_opslag_txt || ' | ' || v_begin_txt || ' | ' || v_eind_txt; v_errorhint := 'Regio niet gevonden: ' || v_regio_omschrijving; v_regio_key := NULL; IF v_regio_omschrijving IS NOT NULL THEN BEGIN SELECT alg_regio_key INTO v_regio_key FROM alg_regio WHERE alg_regio_verwijder IS NULL AND UPPER (alg_regio_omschrijving) = UPPER (TRIM (v_regio_omschrijving)); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'District niet gevonden: ' || v_district_omschrijving; v_district_key := NULL; IF v_district_omschrijving IS NOT NULL THEN BEGIN SELECT alg_district_key INTO v_district_key FROM alg_district d, alg_regio r WHERE d.alg_regio_key = r.alg_regio_key AND d.alg_district_verwijder IS NULL AND UPPER (alg_district_omschrijving) = UPPER (TRIM (v_district_omschrijving)) AND (v_regio_key IS NULL OR r.alg_regio_key = v_regio_key); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'Locatie niet gevonden: ' || v_locatie_code; v_locatie_key := NULL; IF v_locatie_code IS NOT NULL THEN BEGIN SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie l, alg_district d, alg_regio r WHERE l.alg_district_key = d.alg_district_key AND d.alg_regio_key = r.alg_regio_key AND l.alg_locatie_verwijder IS NULL AND UPPER (l.alg_locatie_code) = UPPER (TRIM (v_locatie_code)) AND (v_district_key IS NULL OR d.alg_district_key = v_district_key); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'Vakgroeptype niet gevonden: ' || v_srtdiscipline_omschrijving; v_srtdiscipline_key := NULL; IF v_srtdiscipline_omschrijving IS NOT NULL THEN BEGIN SELECT ins_srtdiscipline_key INTO v_srtdiscipline_key FROM ins_srtdiscipline WHERE ins_srtdiscipline_verwijder IS NULL AND UPPER (ins_srtdiscipline_omschrijving) = UPPER (TRIM (v_srtdiscipline_omschrijving)); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'Vakgroep niet gevonden: ' || v_discipline_omschrijving; v_discipline_key := NULL; IF v_discipline_omschrijving IS NOT NULL THEN BEGIN SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND (ins_srtdiscipline_key = v_srtdiscipline_key OR v_srtdiscipline_key IS NULL) AND UPPER (ins_discipline_omschrijving) = UPPER (TRIM (v_discipline_omschrijving)); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'Kostensoort code niet gevonden: ' || v_kostensoort_oms; v_kostensoort_key := NULL; IF v_kostensoort_oms IS NOT NULL THEN BEGIN SELECT prs_kostensoort_key INTO v_kostensoort_key FROM prs_kostensoort WHERE UPPER (prs_kostensoort_oms) = UPPER (TRIM (v_kostensoort_oms)); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END IF; v_errorhint := 'Leverancier niet gevonden: ' || v_leverancier_nr; v_bedrijf_key := NULL; IF v_leverancier_nr IS NOT NULL THEN BEGIN -- vinden we dit bedrijf via het kenmerk AFWLEVERANCIERNR? SELECT prs_link_key INTO v_bedrijf_key FROM prs_kenmerklink kl, prs_kenmerk k WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key AND k.prs_kenmerk_code = 'AFWLEVERANCIERNR' AND UPPER(kl.prs_kenmerklink_waarde) = UPPER(v_leverancier_nr); EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN SELECT prs_bedrijf_key INTO v_bedrijf_key FROM prs_bedrijf WHERE prs_bedrijf_verwijder IS NULL AND UPPER (prs_leverancier_nr) = UPPER (TRIM (v_leverancier_nr)); EXCEPTION WHEN NO_DATA_FOUND THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_errorhint, ''); END; END; END IF; v_errorhint := 'Controleer opslag'; v_opslag_txt := REPLACE (v_opslag_txt, ',', '.'); v_opslag := TO_NUMBER (v_opslag_txt); v_errorhint := 'Controleer ingangsdatum'; v_begin := TO_DATE (v_begin_txt, 'dd-mm-yyyy'); v_errorhint := 'Controleer vervaldatum'; v_eind := TO_DATE (v_eind_txt, 'dd-mm-yyyy'); IF v_ongeldig = 0 THEN INSERT INTO vbxx_imp_opslag ( imp_opslag_key, alg_locatie_key, alg_district_key, alg_regio_key, ins_srtdiscipline_key, ins_discipline_key, prs_kostensoort_key, prs_bedrijf_key, opslag, ingangsdatum, einddatum, imp_opslag_aanmaak, opmerking) VALUES (v_imp_opslag_key + 1, v_locatie_key, v_district_key, v_regio_key, v_srtdiscipline_key, v_discipline_key, v_kostensoort_key, v_bedrijf_key, v_opslag, v_begin, v_eind, SYSDATE, SUBSTR(v_opmerking, 1,200)); END IF; ELSE IF rec1.fac_imp_file_index = 1 THEN fac.imp_writelog (p_import_key, 'I', 'Geen geldige header aangetroffen', v_regio_omschrijving || ' | ' || v_district_omschrijving || ' | ' || v_locatie_code || ' | ' || v_srtdiscipline_omschrijving || ' | ' || v_discipline_omschrijving || ' | ' || v_kostensoort_oms || ' | ' || v_leverancier_nr || ' | ' || v_opslag_txt || ' | ' || v_begin_txt || ' | ' || v_eind_txt); END IF; END IF; COMMIT; END; END LOOP; IF NOT header_found THEN fac.imp_writelog ( p_import_key, 'E', 'Geen geldige header aangetroffen', 'Bestand is geen geldig opslag importbestand.'); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_errorhint || ' - ' || v_aanduiding); END; / -- De update functie doet eigenlijk niets maar anders komt er een foutmelding bij de update. CREATE OR REPLACE PROCEDURE vbxx_update_opslag (p_import_key IN NUMBER) AS BEGIN NULL; END; / CREATE OR REPLACE VIEW vbxx_v_imp_opslag AS SELECT o.imp_opslag_key, r.alg_regio_omschrijving, di.alg_district_omschrijving, l.alg_locatie_code, sd.ins_srtdiscipline_omschrijving, d.ins_discipline_omschrijving, prs_kostensoort_oms, COALESCE((SELECT FLX.getflex('PRS', k.prs_kenmerk_key, b.prs_bedrijf_key, 'B', 1) FROM prs_kenmerk k WHERE k.prs_kenmerk_code = 'AFWLEVERANCIERNR'), prs_leverancier_nr) prs_leverancier_nr, o.opslag, o.ingangsdatum, o.einddatum, o.imp_opslag_aanmaak, o.imp_opslag_verwijder, o.opmerking FROM vbxx_imp_opslag o, alg_locatie l, alg_district di, alg_regio r, ins_srtdiscipline sd, ins_tab_discipline d, prs_kostensoort k, prs_bedrijf b WHERE o.alg_locatie_key = l.alg_locatie_key(+) AND o.alg_district_key = di.alg_district_key(+) AND o.alg_regio_key = r.alg_regio_key(+) AND o.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+) AND o.ins_discipline_key = d.ins_discipline_key(+) AND o.prs_kostensoort_key = k.prs_kostensoort_key(+) AND o.prs_bedrijf_key = b.prs_bedrijf_key(+); -- -- REVERSEDBILLING rapportages en procedures -- CREATE OR REPLACE VIEW vbxx_v_rap_actual_cost_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, fclt_f_leverancier, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS -- Variabele kosten uit ACTUAL opdrachten op variabele contracten SELECT pcp.prs_afdeling_key, TO_CHAR (SYSDATE, 'yyyy-mm') maand, -- Deze maand ORDAFR, volgende maand factureren (achteraf) 'O' broc_flag, b.prs_bedrijf_naam, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, COUNT (*) aantal, SUM (o.mld_opdr_kosten) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, mld_typeopdr ot, cnt_contract c, cnt_contract mc, prs_bedrijf b, prs_contactpersoon cp, prs_perslid pcp WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%' AND o.mld_statusopdr_key = 9 -- Moeten we niet alle openstaande opdrachten opnemen? -- CHECK AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) > TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) AND NOT EXISTS -- Heeft nog niet de timestamp dat deze al meegenomen is in de RB notificatie ( SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING' AND k.mld_kenmerk_verwijder IS NULL) AND EXISTS -- Niet gemarkeerd als dispuut! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut AND k.mld_kenmerk_verwijder IS NULL AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key --AND c.ins_discipline_key = 523 -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) GROUP BY pcp.prs_afdeling_key, TO_CHAR (SYSDATE, 'yyyy-mm'), 'O', b.prs_bedrijf_naam, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer; -- Actual regels en basis voor oa. te exporteren/bevriezen regels op de 10e van -- de maand; voor de output geldt: -- Dat deze de actual vaste contractkosten toont (over afgelopen maand). -- Dat deze de actual variabele bestelopdrachtkosten toont (voor 1e ORDAFR). -- Dat deze de actual variabele reserveringskosten toont (over afgelopen maand), behalve verbruiksartikelen met een volgnummer > 900! -- Dat deze de actual variabele opdrachtkosten toont (voor 1e ORDAFR). -- Dat deze tot de 10e van de huidige maand alleen nog door Vebego wijzigbaar is. CREATE OR REPLACE VIEW vbxx_v_actual_fact -- Tbv. FACT_EXPORT! ( prs_afdeling_key, maand, prs_bedrijf_key, prs_bedrijf_naam, cp_perslid_key, cp_aanhef, cp_naam, cp_email, cnt_contract_key, contractnr, beschrijving, inkoopordernr, cm_aanhef, cm_naam, bes_bestelopdr_key, res_rsv_ruimte_key, mld_opdr_key, bro_id, aantal, kosten ) AS -- Variabele kosten uit ACTUAL opdrachten op variabele contracten SELECT pcp.prs_afdeling_key, TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf) b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, 1 aantal, o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, mld_typeopdr ot, --fac_tracking t, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%' AND o.mld_statusopdr_key = 9 AND NOT EXISTS ( SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING' AND k.mld_kenmerk_verwijder IS NULL) --AND o.mld_opdr_key = t.fac_tracking_refkey --AND t.fac_srtnotificatie_key = 76 -- ORDAFR --AND t.fac_tracking_datum > TO_DATE ('20190101', 'yyyymmdd') --AND t.fac_tracking_datum < TRUNC (SYSDATE, 'mm') AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) AND EXISTS -- Niet gemarkeerd als dispuut! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut AND k.mld_kenmerk_verwijder IS NULL AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key -- AND c.ins_discipline_key = 523 -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key --AND o.mld_opdr_key = nr.mld_opdr_key(+) UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten-DISPUUT SELECT pcp.prs_afdeling_key, TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf) b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern || '/DISPUUT' cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, 1 aantal, o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, mld_typeopdr ot, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%' AND o.mld_statusopdr_key = 9 -- ORDAFR AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) AND NOT EXISTS ( SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING' AND k.mld_kenmerk_verwijder IS NULL) AND NOT EXISTS -- Gemarkeerd als dispuut! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'RB_GOEDGEKEURD' -- Dispuut AND k.mld_kenmerk_verwijder IS NULL AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key -- AND c.ins_discipline_key = 523 -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key; -- Te exporteren/bevriezen totalen over voorgaande maand (vast en variabel). CREATE OR REPLACE VIEW vbxx_v_rap_actual_fact_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, --hide_f_bedrijf_key, fclt_f_leverancier, --hide_f_contract_key, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS SELECT prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag, --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr, SUM (aantal), SUM (kosten) FROM vbxx_v_actual_fact GROUP BY prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'), --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr; -- Te exporteren/bevriezen variabele opdrachtkosten over voorgaande maand (details). CREATE OR REPLACE VIEW vbxx_v_rap_actual_fact_mld ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, prio, mld_melding_key, mld_opdr_key, opdr_id, plaats, -- Gebouw ruimte, mld_stdmelding_oms, opdrachttype, omschrijving, begindatum, einddatum, meldingstatus, opdrachtstatus, afhandeling, fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT v.prs_afdeling_key, v.maand, TO_CHAR (m.mld_melding_spoed), m.mld_melding_key, o.mld_opdr_key, COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id, DECODE ( og.alg_type, 'R', og.alg_gebouw_code, 'V', og.alg_gebouw_code, 'G', og.alg_gebouw_code, 'T', og.alg_terreinsector_code, l.alg_locatie_code) plaatsaanduiding, DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte, sm.mld_stdmelding_omschrijving, ot.mld_typeopdr_omschrijving, o.mld_opdr_omschrijving, o.mld_opdr_datumbegin begindatum, --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum, ms.mld_statuses_omschrijving, os.mld_statusopdr_omschrijving, o.mld_opdr_opmerking, v.prs_bedrijf_naam, v.kosten, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM vbxx_v_actual_fact v, mld_opdr o, mld_statusopdr os, mld_typeopdr ot, mld_melding m, mld_statuses ms, mld_stdmelding sm, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, alg_v_onroerendgoed_gegevens og WHERE v.mld_opdr_key = o.mld_opdr_key AND o.mld_statusopdr_key = os.mld_statusopdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+); -- Frozen regels en basis voor oa. de notificatie op de 11e van de maand; voor -- de output geldt: -- Dat deze de frozen vaste contractkosten toont. -- Dat deze de frozen variabele opdrachtkosten toont. -- Dat deze de frozen variabele reserveringskosten toont. -- Dat de laatst bevroren maand per bedrijf op de 11e wordt genotificeerd (via -- extra_key-principe) met daarin de bedragen gegroepeerd per inkoopordernr. CREATE OR REPLACE VIEW vbxx_v_frozen_fact ( prs_afdeling_key, maand, --prs_bedrijf_key, extra_key, -- Moet zo heten! prs_bedrijf_naam, cp_perslid_key, cp_aanhef, cp_naam, cp_email, cnt_contract_key, contractnr, beschrijving, inkoopordernr, cm_aanhef, cm_naam, bes_bestelopdr_key, res_rsv_ruimte_key, mld_opdr_key, bro_id, factuur_naar_sg, aantal, kosten ) AS /* SELECT pcp.prs_afdeling_key, -- Vaste contractkosten over de FROZEN termijnen SUBSTR (ud.fac_usrdata_code, 1, 7) maand, -- yyyy-mm b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, NULL mld_opdr_key, NULL bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg, 0 aantal, ud.fac_usrdata_prijs kosten FROM fac_usrdata ud, cnt_contract c, prs_bedrijf b, cnt_contract mc, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp, prs_perslid pcp, prs_perslid pcm, (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG! WHERE ud.fac_usrtab_key = 161 -- VasteKostenMnd AND SUBSTR (ud.fac_usrdata_code, INSTR (ud.fac_usrdata_code, '/') + 1) = TO_CHAR (c.cnt_contract_key) --AND SUBSTR (ud.fac_usrdata_omschr, 1, INSTR (ud.fac_usrdata_omschr, '/') - 1) = TO_CHAR (b.prs_bedrijf_key) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND b.prs_bedrijf_key = kl.prs_link_key(+) UNION ALL -- Variabele kosten uit FROZEN bestelopdrachten op variabele contracten (via bes_bestelling_ordernr!) SELECT pcp.prs_afdeling_key, TO_CHAR (TRUNC (fac.gettrackingdate ('BES2VE', bo.bes_bestelopdr_key), 'mm') - 1, 'yyyy-mm') maand, b.prs_bedrijf_key, b.prs_bedrijf_naam bedrijf, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, -- Uit deze maand lopend contract, anders geen variabele kosten c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, bo.bes_bestelopdr_key, NULL res_rsv_ruimte_key, NULL mld_opdr_key, bo.bes_bestelopdr_id bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg, 1 aantal, SUM ((boi.bes_bestelopdr_item_aantal * COALESCE (boi.bes_bestelopdr_item_inkprijs, boi.bes_bestelopdr_item_prijs)) + COALESCE (bo.bes_bestelopdr_korting, 0) + COALESCE (bo.bes_bestelopdr_levkosten, 0)) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM bes_bestelling b, bes_bestelling_item bbi, bes_bestelopdr_item boi, bes_bestelopdr bo, cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_contract mc, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp, prs_perslid pcp, prs_perslid pcm, (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG! WHERE b.bes_bestelling_ordernr IS NOT NULL -- Gefactureerd! AND b.bes_bestelling_key = bbi.bes_bestelling_key AND bbi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_status = 7 -- Verwerkt (TODO: Soms >1 bestelopdrachten en niet allemaal Verwerkt???) --AND bo.prs_bedrijf_key = b.prs_bedrijf_key AND SUBSTR (b.bes_bestelling_ordernr, INSTR (b.bes_bestelling_ordernr, '/') + 1) = TO_CHAR (c.cnt_contract_key) --AND c.ins_discipline_key = 523 -- Variabele contracten (kan niet anders) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND b.prs_bedrijf_key = kl.prs_link_key(+) GROUP BY pcp.prs_afdeling_key, TO_CHAR (TRUNC (fac.gettrackingdate ('BES2VE', bo.bes_bestelopdr_key), 'mm') - 1, 'yyyy-mm'), b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', ''), DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', ''), DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam, bo.bes_bestelopdr_key, NULL, NULL, bo.bes_bestelopdr_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'), 1 UNION ALL -- Variabele kosten uit FROZEN reserveringen op variabele contracten (via fin_verkoopfactuur_id!) SELECT x.prs_afdeling_key, SUBSTR (x.fin_verkoopfactuur_maand, 1, 4) || '-' || SUBSTR (x.fin_verkoopfactuur_maand, 5, 2) maand, x.prs_bedrijf_key, x.prs_bedrijf_naam bedrijf, x.prs_perslid_key, x.cp_aanhef, x.cp_naam, x.cp_email, x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_omschrijving, x.cnt_contract_nummer, x.cm_aanhef, x.cm_naam, NULL bes_bestelopdr_key, x.res_rsv_ruimte_key, NULL mld_opdr_key, x.fin_verkoopfactuur_omschr bro_id, DECODE (x.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg, 1 aantal, SUM (COALESCE (x.verw_prijs, x.prijs, 0)) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM (SELECT pcp.prs_afdeling_key, vf.fin_verkoopfactuur_maand, b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, rra.res_rsv_ruimte_key, vf.fin_verkoopfactuur_omschr, rra.res_rsv_artikel_prijs verw_prijs, rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs, --DECODE (COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw), NULL, 'VH', 21, 'VH', 'VL') -- btw, kl.prs_kenmerklink_waarde FROM fin_verkoopfactuur vf, res_v_aanwezigrsv_artikel rra, res_artikel ra, cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_contract mc, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp, prs_perslid pcp, prs_perslid pcm, (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1040) kl -- Factuur rechtstreeks naar SG! WHERE vf.fin_verkoopfactuur_refkey = rra.res_rsv_artikel_key --AND rra.res_status_bo_key = 6 -- Verwerkt (kan niet anders) --AND rra.res_rsv_artikel_verwerkt IS NOT NULL -- Verwerkt (kan niet anders) --AND rra.res_rsv_artikel_levering > TO_DATE ('20190101', 'yyyymmdd') -- Kan niet anders AND rra.res_artikel_key = ra.res_artikel_key AND fac.safe_to_number (vf.fin_verkoopfactuur_id) = c.cnt_contract_key --AND c.ins_discipline_key = 523 -- Variabele contracten (kan niet anders) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND b.prs_bedrijf_key = kl.prs_link_key(+)) x GROUP BY x.prs_afdeling_key, SUBSTR (x.fin_verkoopfactuur_maand, 1, 4) || '-' || SUBSTR (x.fin_verkoopfactuur_maand, 5, 2), x.prs_bedrijf_key, x.prs_bedrijf_naam, x.prs_perslid_key, x.cp_aanhef, x.cp_naam, x.cp_email, x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_omschrijving, x.cnt_contract_nummer, x.cm_aanhef, x.cm_naam, NULL, x.res_rsv_ruimte_key, NULL, x.fin_verkoopfactuur_omschr, DECODE (x.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'), 1 UNION ALL -- Variabele kosten uit FROZEN opdrachten op variabele contracten */ SELECT pcp.prs_afdeling_key, o.mld_opdr_ordernr maand, b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, COALESCE (nr.mld_kenmerkopdr_waarde, c.cnt_contract_nummer, '-') cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'), 1 aantal, o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, cnt_contract c, prs_bedrijf b, cnt_contract mc, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp, prs_perslid pcp, prs_perslid pcm, (SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 961) nr, -- Inkoopnummer (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1040) kl, -- Factuur rechtstreeks naar SG! mld_melding m WHERE o.mld_opdr_ordernr IS NOT NULL -- Gefactureerd! AND o.cnt_contract_key = c.cnt_contract_key AND EXISTS -- timestamp voor reversed billing is gezet. ( SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND k.mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING') AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND o.mld_opdr_key = nr.mld_opdr_key(+) AND b.prs_bedrijf_key = kl.prs_link_key(+) AND o.mld_melding_key = m.mld_melding_key /* UNION ALL -- Variabele kosten uit FROZEN opdrachten voor Wiltec (niet gekoppeld aan variabel contract)! SELECT pcp.prs_afdeling_key, o.mld_opdr_ordernr maand, b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'), 1 aantal, o.mld_opdr_kosten kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, cnt_contract c, prs_bedrijf b, cnt_contract mc, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp, prs_perslid pcp, prs_perslid pcm, --(SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 961) nr, -- Inkoopnummer (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1040) kl, -- Factuur rechtstreeks naar SG! mld_melding m WHERE o.mld_opdr_ordernr IS NOT NULL -- Gefactureerd! --AND o.mld_statusopdr_key = 7 -- Verwerkt (kan niet anders) AND o.cnt_contract_key IS NULL -- Niet gekoppeld aan een contract! AND o.mld_uitvoerende_keys = c.cnt_prs_bedrijf_key AND c.ins_discipline_key = 523 -- Variabele contracten AND TO_CHAR (c.cnt_contract_looptijd_van, 'yyyy-mm') <= o.mld_opdr_ordernr AND TO_CHAR (c.cnt_contract_looptijd_tot, 'yyyy-mm') >= o.mld_opdr_ordernr AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND b.prs_bedrijf_key = 31041 -- Wiltec AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key --AND o.mld_opdr_key = nr.mld_opdr_key(+) AND b.prs_bedrijf_key = kl.prs_link_key(+) AND o.mld_melding_key = m.mld_melding_key AND NOT EXISTS -- Betreffende maand lopend contract! (SELECT 1 FROM cnt_v_aanwezigcontract WHERE ins_discipline_key = 523 -- Variabele contracten --AND cnt_contract_status = 0 -- NIET Gesloten AND TO_CHAR (cnt_contract_looptijd_van, 'yyyy-mm') <= o.mld_opdr_ordernr AND TO_CHAR (cnt_contract_looptijd_tot, 'yyyy-mm') >= o.mld_opdr_ordernr AND cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_nummer_intern > c.cnt_contract_nummer_intern) */; -- Geexporteerde/bevroren totalen over voorgaande maanden (vast en variabel). CREATE OR REPLACE VIEW vbxx_v_rap_frozen_fact_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, --hide_f_bedrijf_key, fclt_f_leverancier, --hide_f_contract_key, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS -- Vaste contractkosten over de FROZEN termijnen SELECT prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag, --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr, SUM (aantal), SUM (kosten) FROM vbxx_v_frozen_fact GROUP BY prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'), --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr; /* -- KFSG#65747: Rapportage tbv. leverancier-contactpersonen! CREATE OR REPLACE VIEW kfsg_v_rap_frozen_tot_lev ( fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersoon! maand, broc_flag, fclt_f_leverancier, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS -- Vaste contractkosten over de FROZEN termijnen SELECT cp.prs_perslid_key, v.maand, DECODE (v.bes_bestelopdr_key, NULL, DECODE (v.res_rsv_ruimte_key, NULL, DECODE (v.mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag, v.prs_bedrijf_naam, v.contractnr, v.beschrijving, v.inkoopordernr, SUM (v.aantal), SUM (COALESCE (v.kosten, 0)) FROM kfsg_v_frozen_fact v, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp WHERE v.extra_key = cp.prs_bedrijf_key AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor! GROUP BY cp.prs_perslid_key, v.maand, DECODE (v.bes_bestelopdr_key, NULL, DECODE (v.res_rsv_ruimte_key, NULL, DECODE (v.mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'), v.prs_bedrijf_naam, v.contractnr, v.beschrijving, v.inkoopordernr; -- Geexporteerde/bevroren variabele bestelopdrachtkosten over voorgaande maanden (details). CREATE OR REPLACE VIEW kfsg_v_rap_frozen_fact_bes ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, bes_bestelling_key, bes_bestelopdr_key, bes_id, plaats, ruimte, catalogus, besteldatum, leverdatum, bestellingstatus, -- Not used bestelopdrachtstatus, afhandeling, -- Not used fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT v.prs_afdeling_key, v.maand, x.bes_bestelling_key, v.bes_bestelopdr_key, v.bro_id bes_id, COALESCE (l.alg_locatie_code, ma.mld_adres_naam) plaatsaanduiding, x.bes_bestelling_plaats ruimte, x.ins_discipline_omschrijving, bo.bes_bestelopdr_datum, bo.bes_bestelopdr_leverdatum, -- Of uit FAC_TRACKING-tabel? bs.bes_bestellingstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken? bos.bes_bestelopdrstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken? COALESCE (bo.bes_bestelopdr_opmerking, bo.bes_bestelopdr_delivery_opmerk) afhandeling, v.prs_bedrijf_naam, v.kosten, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM kfsg_v_frozen_fact v, bes_bestelopdr bo, (SELECT DISTINCT boi.bes_bestelopdr_key, b.bes_bestelling_key, b.mld_adres_key_lev, b.bes_bestelling_plaats, b.bes_bestelling_datum, b.bes_bestelling_status, td.ins_discipline_omschrijving FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, ins_tab_discipline td WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key AND bbi.bes_bestelling_key = b.bes_bestelling_key AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key) x, bes_bestellingstatuses bs, bes_bestelopdrstatuses bos, mld_adres ma, alg_locatie l, alg_district d WHERE v.bes_bestelopdr_key = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_key = x.bes_bestelopdr_key AND x.bes_bestelling_status = bs.bes_bestellingstatuses_key(+) AND bo.bes_bestelopdr_status = bos.bes_bestelopdrstatuses_key(+) AND x.mld_adres_key_lev = ma.mld_adres_key(+) AND ma.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+); -- KFSG#65747: Rapportage tbv. leverancier-contactpersonen! CREATE OR REPLACE VIEW kfsg_v_rap_frozen_bes_lev ( fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen! maand, bes_bestelling_key, bes_bestelopdr_key, bes_id, plaats, ruimte, catalogus, besteldatum, leverdatum, bestellingstatus, -- Not used bestelopdrachtstatus, afhandeling, -- Not used fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT cp.prs_perslid_key, v.maand, x.bes_bestelling_key, v.bes_bestelopdr_key, v.bro_id bes_id, COALESCE (l.alg_locatie_code, ma.mld_adres_naam) plaatsaanduiding, x.bes_bestelling_plaats ruimte, x.ins_discipline_omschrijving, bo.bes_bestelopdr_datum, bo.bes_bestelopdr_leverdatum, -- Of uit FAC_TRACKING-tabel? bs.bes_bestellingstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken? bos.bes_bestelopdrstatuses_omschr, -- Status van onderliggende artikelen/delen betrekken? COALESCE (bo.bes_bestelopdr_opmerking, bo.bes_bestelopdr_delivery_opmerk) afhandeling, v.prs_bedrijf_naam, COALESCE (v.kosten, 0), v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM kfsg_v_frozen_fact v, bes_bestelopdr bo, (SELECT DISTINCT boi.bes_bestelopdr_key, b.bes_bestelling_key, b.mld_adres_key_lev, b.bes_bestelling_plaats, b.bes_bestelling_datum, b.bes_bestelling_status, td.ins_discipline_omschrijving FROM bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, ins_tab_discipline td WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key AND bbi.bes_bestelling_key = b.bes_bestelling_key AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key) x, bes_bestellingstatuses bs, bes_bestelopdrstatuses bos, mld_adres ma, alg_locatie l, alg_district d, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp WHERE v.bes_bestelopdr_key = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_key = x.bes_bestelopdr_key AND x.bes_bestelling_status = bs.bes_bestellingstatuses_key(+) AND bo.bes_bestelopdr_status = bos.bes_bestelopdrstatuses_key(+) AND x.mld_adres_key_lev = ma.mld_adres_key(+) AND ma.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND v.extra_key = cp.prs_bedrijf_key AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor! ; -- Geexporteerde/bevroren variabele reserveringskosten over voorgaande maanden (details). CREATE OR REPLACE VIEW kfsg_v_rap_frozen_fact_res ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, res_reservering_key, res_rsv_ruimte_key, res_id, plaats, -- Gebouw ruimte, activiteit, omschrijving, van_datum, -- Not used van_tijd, tot_tijd, status, fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT v.prs_afdeling_key, v.maand, rrr.res_reservering_key, v.res_rsv_ruimte_key, v.bro_id res_id, DECODE ( og.alg_type, 'R', og.alg_gebouw_code, 'V', og.alg_gebouw_code, 'G', og.alg_gebouw_code, 'T', og.alg_terreinsector_code, l.alg_locatie_code) plaatsaanduiding, COALESCE ((SELECT res_ruimte_nr FROM res_ruimte WHERE res_ruimte_key = rro.res_ruimte_key), og.alg_plaatsaanduiding) ruimte, ra.res_activiteit_omschrijving, rrr.res_rsv_ruimte_omschrijving, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, rs.res_status_bo_omschrijving, v.prs_bedrijf_naam, v.kosten, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM kfsg_v_frozen_fact v, res_rsv_ruimte rrr, res_activiteit ra, res_status_bo rs, res_ruimte_opstelling rro, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar1, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NOT NULL GROUP BY res_ruimte_key) rar2, alg_v_onroerendgoed_gegevens og, alg_locatie l, alg_district d WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_activiteit_key = ra.res_activiteit_key AND rrr.res_status_bo_key = rs.res_status_bo_key(+) -- Status van onderliggende artikelen/delen betrekken? AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+) AND rro.res_ruimte_key = rar1.res_ruimte_key(+) AND rro.res_ruimte_key = rar2.res_ruimte_key(+) AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = og.alg_ruimte_key AND og.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+); -- KFSG#65747: Rapportage tbv. leverancier-contactpersonen! CREATE OR REPLACE VIEW kfsg_v_rap_frozen_res_lev ( fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen! maand, res_reservering_key, res_rsv_ruimte_key, res_id, plaats, -- Gebouw ruimte, activiteit, omschrijving, van_datum, -- Not used van_tijd, tot_tijd, status, fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT cp.prs_perslid_key, v.maand, rrr.res_reservering_key, v.res_rsv_ruimte_key, v.bro_id res_id, DECODE ( og.alg_type, 'R', og.alg_gebouw_code, 'V', og.alg_gebouw_code, 'G', og.alg_gebouw_code, 'T', og.alg_terreinsector_code, l.alg_locatie_code) plaatsaanduiding, COALESCE ((SELECT res_ruimte_nr FROM res_ruimte WHERE res_ruimte_key = rro.res_ruimte_key), og.alg_plaatsaanduiding) ruimte, ra.res_activiteit_omschrijving, rrr.res_rsv_ruimte_omschrijving, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, rs.res_status_bo_omschrijving, v.prs_bedrijf_naam, COALESCE (v.kosten, 0), v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM kfsg_v_frozen_fact v, res_rsv_ruimte rrr, res_activiteit ra, res_status_bo rs, res_ruimte_opstelling rro, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar1, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NOT NULL GROUP BY res_ruimte_key) rar2, alg_v_onroerendgoed_gegevens og, alg_locatie l, alg_district d, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_activiteit_key = ra.res_activiteit_key AND rrr.res_status_bo_key = rs.res_status_bo_key(+) -- Status van onderliggende artikelen/delen betrekken? AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+) AND rro.res_ruimte_key = rar1.res_ruimte_key(+) AND rro.res_ruimte_key = rar2.res_ruimte_key(+) AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = og.alg_ruimte_key AND og.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND v.extra_key = cp.prs_bedrijf_key AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor! ; */ -- Geexporteerde/bevroren variabele opdrachtkosten over voorgaande maanden (details). CREATE OR REPLACE VIEW vbxx_v_rap_frozen_fact_mld ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, prio, mld_melding_key, mld_opdr_key, opdr_id, plaats, -- Gebouw ruimte, mld_stdmelding_oms, opdrachttype, omschrijving, begindatum, einddatum, meldingstatus, opdrachtstatus, afhandeling, fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT v.prs_afdeling_key, v.maand, TO_CHAR (m.mld_melding_spoed), m.mld_melding_key, o.mld_opdr_key, COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id, DECODE ( og.alg_type, 'R', og.alg_gebouw_code, 'V', og.alg_gebouw_code, 'G', og.alg_gebouw_code, 'T', og.alg_terreinsector_code, l.alg_locatie_code) plaatsaanduiding, DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte, sm.mld_stdmelding_omschrijving, ot.mld_typeopdr_omschrijving, o.mld_opdr_omschrijving, o.mld_opdr_datumbegin begindatum, --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum, ms.mld_statuses_omschrijving, os.mld_statusopdr_omschrijving, o.mld_opdr_opmerking, v.prs_bedrijf_naam, o.mld_opdr_kosten, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM vbxx_v_frozen_fact v, mld_opdr o, mld_statusopdr os, mld_typeopdr ot, mld_melding m, mld_statuses ms, mld_stdmelding sm, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, alg_v_onroerendgoed_gegevens og WHERE v.mld_opdr_key = o.mld_opdr_key AND o.mld_statusopdr_key = os.mld_statusopdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+); -- KFSG#65747: Rapportage tbv. leverancier-contactpersonen! CREATE OR REPLACE VIEW vbxx_v_rap_frozen_mld_lev ( fclt_3d_user_key, -- Kunnen beperken per leverancier-contactpersonen! maand, prio, mld_melding_key, mld_opdr_key, opdr_id, plaats, -- Gebouw ruimte, mld_stdmelding_oms, opdrachttype, omschrijving, begindatum, einddatum, meldingstatus, opdrachtstatus, afhandeling, fclt_f_leverancier, kosten, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district ) AS SELECT cp.prs_perslid_key, v.maand, TO_CHAR (m.mld_melding_spoed), m.mld_melding_key, o.mld_opdr_key, COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id, DECODE ( og.alg_type, 'R', og.alg_gebouw_code, 'V', og.alg_gebouw_code, 'G', og.alg_gebouw_code, 'T', og.alg_terreinsector_code, l.alg_locatie_code) plaatsaanduiding, DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte, sm.mld_stdmelding_omschrijving, ot.mld_typeopdr_omschrijving, o.mld_opdr_omschrijving, o.mld_opdr_datumbegin begindatum, --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum, ms.mld_statuses_omschrijving, os.mld_statusopdr_omschrijving, o.mld_opdr_opmerking, v.prs_bedrijf_naam, COALESCE (o.mld_opdr_kosten, 0), v.contractnr, v.inkoopordernr, d.alg_district_omschrijving FROM vbxx_v_frozen_fact v, mld_opdr o, mld_statusopdr os, mld_typeopdr ot, mld_melding m, mld_statuses ms, mld_stdmelding sm, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, alg_v_onroerendgoed_gegevens og, (SELECT * FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL) cp WHERE v.mld_opdr_key = o.mld_opdr_key AND o.mld_statusopdr_key = os.mld_statusopdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND v.extra_key = cp.prs_bedrijf_key AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor! ; CREATE OR REPLACE PROCEDURE vbxx_select_fact (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS /* -- Bevries vaste contractkosten in eigen tabel. CURSOR c1 IS SELECT DISTINCT '[' || TO_CHAR (v.cnt_contract_key) || '] ' aanduiding, v.maand, v.cnt_contract_key, v.prs_bedrijf_key, v.inkoopordernr, v.kosten FROM kfsg_v_actual_fact v WHERE v.bes_bestelopdr_key IS NULL AND v.res_rsv_ruimte_key IS NULL AND v.mld_opdr_key IS NULL ORDER BY 3; -- Zet "variabele" BES-bestelopdrachten die voor de 1e zijn geleverd op AV. -- Alleen op variabele contracten. CURSOR c2 IS SELECT DISTINCT '[' || TO_CHAR (v.bes_bestelopdr_key) || '|' || v.bro_id || '] ' aanduiding, v.maand, v.bes_bestelopdr_key, bbi.bes_bestelling_key, v.cnt_contract_key FROM kfsg_v_actual_fact v, bes_bestelopdr_item boi, bes_bestelling_item bbi WHERE v.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key ORDER BY 3; -- Zet "variabele" RES-cateringregels die voor de 1e hebben plaatsgevonden op AV -- en meld - zover niet al gebeurd - de deelreservering af (in juiste volgorde). -- Alleen op variabele contracten. CURSOR c3 IS SELECT DISTINCT '[' || TO_CHAR (v.res_rsv_ruimte_key) || '|' || v.bro_id || '] ' aanduiding, v.maand, v.res_rsv_ruimte_key, rra.res_status_bo_key, rra.res_rsv_artikel_key, rra.res_artikel_key, v.cnt_contract_key, v.bro_id, v.prs_bedrijf_key, v.prs_bedrijf_naam FROM kfsg_v_actual_fact v, res_v_aanwezigrsv_artikel rra, res_artikel ra WHERE v.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rra.res_rsv_artikel_verwerkt IS NULL AND rra.res_rsv_artikel_dirtlevel = 0 -- TODO:Niet dirty? AND rra.res_artikel_key = ra.res_artikel_key AND COALESCE (ra.res_artikel_volgnummer, 0) <= 900 -- KFSG#74625: Voor facturatie uitsluiten artikelen met een volgnummer >900! UNION ALL SELECT DISTINCT '[' || TO_CHAR (v.res_rsv_ruimte_key) || '|' || v.bro_id || '] ' aanduiding, v.maand, v.res_rsv_ruimte_key, rrr.res_status_bo_key, NULL res_rsv_artikel_key, NULL res_artikel_key, v.cnt_contract_key, v.bro_id, v.prs_bedrijf_key, v.prs_bedrijf_naam FROM kfsg_v_actual_fact v, res_v_aanwezigrsv_ruimte rrr WHERE v.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key ORDER BY 1, 5, 3; */ -- Zet "variabele" MLD-opdrachten die voor de 1e zijn afgerond op AV. -- Alleen op variabele contracten é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 (éé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 één res_rsv_ruimte kunnen de artikelen per catalogus -- worden gefactureerd aan een verschillende leverancier! --v_errormsg := 'Fout bijwerken ordernummer (RES).'; --UPDATE res_rsv_ruimte -- SET res_rsv_ruimte_ordernr = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') || '/' || TO_CHAR (rec.cnt_contract_key) -- WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-RAV'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#Variabele cateringregels bevroren: ' || TO_CHAR (v_count), ''); COMMIT; */ v_count := 0; -- Bepaal de key van het kenmerk om de timestamp op te slaan SELECT mld_kenmerk_key INTO v_ts_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_typeopdr ot WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = ot.mld_typeopdr_key AND UPPER(ot.mld_typeopdr_omschrijving) LIKE 'REVERSED%'; FOR rec IN c4 LOOP BEGIN v_errormsg := 'Fout bijwerken ordernummer (MLD).'; UPDATE mld_opdr SET mld_opdr_ordernr = rec.maand WHERE mld_opdr_key = rec.mld_opdr_key; v_errormsg := 'Fout bijwerken status (MLD).'; FLX.setflex('OPD', v_ts_kenmerk_key, rec.mld_opdr_key, TO_CHAR(SYSDATE, 'dd-mm-yyyy 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_kenmerk k, prs_contactpersoon cp1, prs_v_aanwezigperslid p1 WHERE kl1.prs_kenmerk_key = k.prs_kenmerk_key AND k.prs_kenmerk_code = 'FACTUURNOTI' -- Contactpersoon factuurnotificatie! AND k.prs_kenmerk_verwijder IS NULL AND kl1.prs_link_key = cp1.prs_contactpersoon_key AND cp1.prs_contactpersoon_verwijder IS NULL AND cp1.prs_perslid_key = p1.prs_perslid_key(+)) SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, NULL, REPLACE (REPLACE (sn.fac_srtnotificatie_oms, '##LEV##', v.prs_bedrijf_naam), '##MND##', v.maand), r.fac_usrrap_key, v.extra_key, COALESCE (cp.prs_contactpersoon_email, cp.prs_perslid_email), NULL FROM vbxx_v_frozen_fact v, cp cp, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'dd') = '05' -- 5e van de maand! AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') AND v.extra_key = cp.prs_bedrijf_key AND UPPER (r.fac_usrrap_view_name) = 'VBXX_V_FROZEN_FACT' AND sn.fac_srtnotificatie_code = 'CUST90' UNION ALL SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, --gg.prs_perslid_key, -- Schiphol-contactpersonen NULL, REPLACE (sn.fac_srtnotificatie_oms, '##MND##', v.maand), r.fac_usrrap_key, NULL, -- Geen extra_key, dus de hele rapportage! p.prs_perslid_email, NULL FROM vbxx_v_frozen_fact v, fac_gebruikersgroep gg, prs_v_aanwezigperslid p, fac_groep g, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'dd') = '05' -- 5e van de maand! AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') AND gg.fac_groep_key = g.fac_groep_key AND g.fac_groep_externid = 'FACTUURNOTI' AND gg.prs_perslid_key = p.prs_perslid_key AND UPPER (r.fac_usrrap_view_name) = 'VBXX_V_FROZEN_FACT' AND sn.fac_srtnotificatie_code = 'CUST91'; -- -- Notificatie naar de personen die offertes mogen goedkeuren in het geval de laatste offerte van -- een melding recentelijk is afgemeld. We notificeren mensen met ORDOAP en ORDBOF rechten omdat ORDOAP -- rechten geen plaats scope hebben worden ook de ORDBOF leesrechten meegenomen. -- We kijken naar meldingen waar geen openstaande offerteopdracht is. CREATE OR REPLACE VIEW vbxx_v_noti_offerte_goedk ( sender, receiver, text, code, key, xkey ) AS WITH oap_rechten AS (SELECT gg.prs_perslid_key, ins_discipline_key, gr.fac_gebruiker_alg_level_read alg_level_read FROM fac_functie f, fac_groeprechten gr, fac_groep g, fac_gebruikersgroep gg WHERE f.fac_functie_code = 'WEB_ORDBOF' AND f.fac_functie_key = gr.fac_functie_key AND gr.fac_groep_key = g.fac_groep_key AND g.fac_groep_key = gg.fac_groep_key AND (gg.prs_perslid_key, gr.ins_discipline_key) IN (SELECT gg1.prs_perslid_key, gr1.ins_discipline_key FROM fac_functie f1, fac_groeprechten gr1, fac_groep g1, fac_gebruikersgroep gg1 WHERE f1.fac_functie_code = 'WEB_ORDOAP' AND f1.fac_functie_key = gr1.fac_functie_key AND gr1.fac_groep_key = g1.fac_groep_key AND g1.fac_groep_key = gg1.fac_groep_key)), ftracking AS ( SELECT o.mld_melding_key FROM fac_tracking ft, fac_srtnotificatie fsn, mld_opdr o, mld_typeopdr ot WHERE fsn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key AND fac_tracking_refkey = o.mld_opdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND ot.mld_typeopdr_isofferte = 1 AND fac_srtnotificatie_code = 'ORDAFM' AND ft.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_OFFERTE_GOEDK') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'VBXX_V_NOTI_OFFERTE_GOEDK') AND o.mld_statusopdr_key = 6 AND NOT EXISTS (SELECT 1 FROM mld_opdr o2, mld_typeopdr ot2 WHERE o2.mld_typeopdr_key = ot2.mld_typeopdr_key AND ot2.mld_typeopdr_isofferte = 1 AND o2.mld_statusopdr_key = 5 AND o.mld_melding_key = o2.mld_melding_key) GROUP BY o.mld_melding_key) SELECT NULL, oap.prs_perslid_key, 'Offerte(s) m.b.t. melding ' || m.mld_melding_key || ' zijn afgemeld en dienen beoordeeld te worden', 'CUST92', m.mld_melding_key, NULL FROM mld_melding m, mld_stdmelding std, oap_rechten oap, ftracking ft2, fac_v_my_locations ml WHERE m.mld_melding_key = ft2.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = oap.ins_discipline_key AND alg_level_read = ml.niveau AND ml.prs_perslid_key = oap.prs_perslid_key AND ml.alg_locatie_key = m.mld_alg_locatie_key; -- -- INKOOPFACTUREN RICHTING EXACT -- CREATE OR REPLACE VIEW vbxx_v_factuur_gegevens AS SELECT f.fin_factuur_key, DECODE ( c.cnt_contract_key, NULL, DECODE ( bo.bes_bestelopdr_key, NULL, (SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.mld_melding_key = o.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key), bo.bes_bestelopdr_id), 'C' || TO_CHAR (cnt_contract_nummer_intern) || DECODE (cnt_contract_versie, NULL, NULL, '.' || cnt_contract_versie)) opdracht_id, f.fin_factuur_datum, f.fin_factuur_nr, COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key)) prs_bedrijf_key, DECODE ( (SELECT prs_kenmerklink_waarde FROM prs_kenmerklink kl, prs_kenmerk k WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key AND k.prs_kenmerk_code = 'ONDERDEELVEBEGO' AND k.prs_kenmerk_verwijder IS NULL AND kl.prs_link_key = COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))), '1', 63, 62) dagboek, fr.fin_factuurregel_totaal, ROUND ( fr.fin_factuurregel_totaal * DECODE (btw.fin_btwtabelwaarde_verlegd, 1, 0, btw.fin_btwtabelwaarde_perc / 100), 2) fin_factuurregel_btw, btw.fin_btwtabelwaarde_code, btw.fin_btwtabelwaarde_key, fr.fin_factuurregel_nr, fr.fin_factuurregel_key, f.fin_factuur_debiteur_nr, f.fin_factuur_boekmaand, prs_kostensoort_oms, k.prs_kostensoort_refcode, k.prs_kostensoort_opmerking, k.prs_kostensoort_key, g.alg_gebouw_code, (SELECT cnt_kenmerkcontract_waarde FROM cnt_kenmerkcontract kc, cnt_kenmerk ck WHERE kc.cnt_contract_key = c.cnt_contract_key AND kc.cnt_kenmerk_key = ck.cnt_kenmerk_key AND ck.cnt_kenmerk_code = 'EXACT_CODE' AND ck.cnt_kenmerk_verwijder IS NULL) exact_code_contract, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk gk WHERE alg_onrgoed_key = g.alg_gebouw_key AND aogk.alg_kenmerk_key = gk.alg_kenmerk_key AND gk.alg_kenmerk_code = 'EXACT_CODE' AND gk.alg_kenmerk_verwijder IS NULL) exact_code_gebouw, (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key) AND k.alg_kenmerk_code = 'AFWDAGBOEKNR' AND k.alg_kenmerk_verwijder IS NULL) afw_dagboek, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key AND aogk.alg_onrgoed_key = COALESCE(ml.alg_district_key, cl.alg_district_key) AND k.alg_kenmerk_code = 'AFWKSTDRCODE' AND k.alg_kenmerk_verwijder IS NULL) afw_kstdrcode, o.mld_opdr_key, c.cnt_contract_key, bo.bes_bestelopdr_key, ( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn -- met status ingevoerd, afgewezen of incompleet SELECT DECODE (COUNT (*), 0, f.fin_factuur_statuses_key, 2) FROM fin_factuur f_t, cnt_contract c_t, bes_bestelopdr b_t, mld_opdr o_t WHERE f_t.fin_factuur_verwijder IS NULL AND f_t.mld_opdr_key = o_t.mld_opdr_key(+) AND f_t.cnt_contract_key = c_t.cnt_contract_key(+) AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+) AND COALESCE ( o_t.mld_uitvoerende_keys, COALESCE ( b_t.prs_bedrijf_key, COALESCE ( c_t.cnt_prs_bedrijf_key, (SELECT a.prs_bedrijf_key FROM prs_v_afdeling a, prs_perslid p WHERE o_t.mld_uitvoerende_keys = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key)))) = COALESCE ( o.mld_uitvoerende_keys, COALESCE ( bo.prs_bedrijf_key, COALESCE ( c.cnt_prs_bedrijf_key, (SELECT a.prs_bedrijf_key FROM prs_v_afdeling a, prs_perslid p WHERE o.mld_uitvoerende_keys = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key)))) AND f.fin_factuur_nr = f_t.fin_factuur_nr AND f_t.fin_factuur_statuses_key IN (1, 2, 3, 5) -- Afgewezen, Ingevoerd, Incompleet, Ter goedkeuring AND f.fin_factuur_statuses_key = 6) fin_factuur_statuses_key, lk.prs_kostenplaats_nr lev_kpn, COALESCE(ml.alg_district_key, cl.alg_district_key) alg_district_key, (SELECT alg_regio_key FROM alg_district di WHERE di.alg_district_key = COALESCE(ml.alg_district_key, cl.alg_district_key) ) alg_regio_key, DECODE ( f.cnt_contract_key, NULL, DECODE ( f.bes_bestelopdr_key, NULL, (SELECT fac_usrdata_code FROM fac_usrdata ud, mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE o.mld_opdr_key = ko.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR' AND k.mld_kenmerk_verwijder IS NULL AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key), 'B'), (SELECT fac_usrdata_code FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k WHERE c.cnt_contract_key = kc.cnt_contract_key AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_code = 'TYPEFACTUUR' AND k.cnt_kenmerk_verwijder IS NULL AND FAC.safe_to_number (kc.cnt_kenmerkcontract_waarde) = ud.fac_usrdata_key)) typefactuur FROM fin_factuur f, fin_factuurregel fr, fin_btwtabelwaarde btw, mld_opdr o, mld_melding m, alg_locatie ml, alg_locatie cl, alg_gebouw g, mld_typeopdr ot, cnt_contract c, bes_bestelopdr bo, ( SELECT fc.fin_factuur_key, MIN (cs.cnt_alg_plaats_key) alg_gebouw_key FROM fin_factuur fc, cnt_contract_plaats cs WHERE fc.cnt_contract_key = cs.cnt_contract_key AND cnt_alg_plaats_code = 'G' AND cnt_contract_plaats_verwijder IS NULL GROUP BY fc.fin_factuur_key UNION ALL SELECT fo.fin_factuur_key, og.alg_gebouw_key FROM fin_factuur fo, mld_opdr o1, mld_melding m1, alg_v_allonroerendgoed og WHERE fo.mld_opdr_key = o1.mld_opdr_key AND o1.mld_melding_key = m1.mld_melding_key AND m1.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys UNION ALL SELECT fb.fin_factuur_key, MIN (g1.alg_gebouw_key) alg_gebouw_key FROM fin_factuur fb, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_bestelling b, alg_gebouw g1 WHERE fb.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND b.mld_adres_key_lev = g1.mld_adres_key GROUP BY fb.fin_factuur_key) fg, (SELECT mld_uitvoerende_key, DECODE (u.TYPE, 'B', mld_uitvoerende_key, a.prs_bedrijf_key) prs_bedrijf_key FROM mld_v_uitvoerende u, prs_v_afdeling a, prs_perslid p WHERE u.mld_uitvoerende_key = prs_perslid_key(+) AND p.prs_afdeling_key = a.prs_afdeling_key(+)) b_o, prs_bedrijf b_c, prs_bedrijf b_b, prs_kostensoort k, prs_kostensoortgrp kg, prs_kostenplaats lk WHERE f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key AND f.mld_opdr_key = o.mld_opdr_key(+) AND o.mld_melding_key = m.mld_melding_key(+) AND m.mld_alg_locatie_key = ml.alg_locatie_key(+) AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+) AND f.cnt_contract_key = c.cnt_contract_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+) AND bo.prs_bedrijf_key = b_b.prs_bedrijf_key(+) AND o.mld_uitvoerende_keys = b_o.mld_uitvoerende_key(+) AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+) AND f.prs_kostensoort_key = k.prs_kostensoort_key(+) AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+) AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+) AND f.fin_factuur_key = fg.fin_factuur_key(+) AND fg.alg_gebouw_key = g.alg_gebouw_key(+) AND g.alg_locatie_key = cl.alg_locatie_key(+) AND f.fin_factuur_verwijder IS NULL; CREATE OR REPLACE VIEW vbxx_v_export_exact_xml ( result, result_order ) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'EXACT'; CREATE OR REPLACE VIEW vbxx_v_bron_export_exact_xml ( fin_factuur_key, opdracht_id, factuur_nr, -- crediteur factuurnummer datum, -- factuurdatum crdnr, -- crediteurnummer bedrag_txt, bedrag, bedrag_incl, oms_regel, -- omschrijving in de detailregels reknr, -- grootboekrekeningnr kstplcode, -- kostenplaats kenmerk bij gebouw kstdrcode, -- kostendrager afh van grootboek btw_code, dagboek, oms_kop, -- omschrijving in de kopregel fin_factuur_debiteur_nr, -- crediteur debiteurnummer alg_district_key, alg_regio_key, fin_factuur_boekmaand ) AS SELECT fin_factuur_key, opdracht_id, fin_factuur_nr, TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum, prs_leverancier_nr crdnr, REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt, bedrag, bedrag_incl, SUBSTR (UPPER (b.prs_bedrijf_naam), 1, 3) || ',' || SUBSTR(fin_factuur_boekmaand, 6,2) || ',' || opdracht_id oms_regel, prs_kostensoort_refcode reknr, COALESCE(exact_code_contract, exact_code_gebouw) kstplcode, COALESCE(afw_kstdrcode, CASE WHEN typefactuur = 'A' THEN '00' WHEN typefactuur = 'B' THEN '10' WHEN typefactuur = 'C' THEN '20' WHEN typefactuur = 'D' THEN '30' END ) kstdrcode, fin_btwtabelwaarde_code btw_code, COALESCE(fg.afw_dagboek, fg.dagboek) dagboek, SUBSTR(UPPER(b.prs_bedrijf_naam),1,3) || ',' || SUBSTR(fin_factuur_boekmaand,6,2) oms_kop, fin_factuur_debiteur_nr, alg_district_key, alg_regio_key, fin_factuur_boekmaand FROM ( SELECT g.fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, SUM (fin_factuurregel_totaal) bedrag, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incl, fin_btwtabelwaarde_code, prs_kostensoort_oms, prs_kostensoort_refcode, prs_kostensoort_opmerking, mld_opdr_key, cnt_contract_key, exact_code_gebouw, exact_code_contract, fin_factuur_boekmaand, g.dagboek, g.afw_dagboek, g.afw_kstdrcode, g.alg_district_key, g.alg_regio_key, g.typefactuur FROM vbxx_v_factuur_gegevens g, vbxx_exp_factuur e WHERE fin_factuur_statuses_key = 6 AND g.fin_factuur_key = e.fin_factuur_key AND g.dagboek = e.dagboek GROUP BY g.fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_btwtabelwaarde_code, prs_kostensoort_oms, prs_kostensoort_refcode, prs_kostensoort_opmerking, mld_opdr_key, cnt_contract_key, exact_code_gebouw, exact_code_contract, fin_factuur_boekmaand, g.dagboek, g.afw_dagboek, g.afw_kstdrcode, g.alg_district_key, g.alg_regio_key, g.typefactuur) 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, p_regio_key IN NUMBER DEFAULT NULL ) AS CURSOR c(c_dagboek VARCHAR2) IS SELECT x.crdnr, x.factuur_nr, MAX(x.datum) datum, MAX(x.oms_kop) oms_kop FROM vbxx_v_bron_export_exact_xml x WHERE c_dagboek = x.dagboek AND (x.alg_district_key = p_district_key OR p_district_key IS NULL) AND (x.alg_regio_key = p_regio_key OR p_regio_key IS NULL) GROUP BY x.crdnr, x.factuur_nr; CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2) IS SELECT * FROM vbxx_v_bron_export_exact_xml WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr') AND factuur_nr = c_factuur_nr; v_order_count NUMBER; v_amount_sum NUMBER(10,2); v_amount_sum_incl NUMBER(10,2); v_count NUMBER; v_sub_count NUMBER; v_bestand VARCHAR2(12); v_boekstuknummer NUMBER; v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE; v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE; --v_boekmaand DATE; v_bijlagen_key NUMBER; v_bijlagen_filename FAC_BIJLAGEN.FAC_BIJLAGEN_FILENAME%TYPE; v_guid VARCHAR2(50); v_bkstknr_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE; v_bijlage_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE; BEGIN v_order_count := 0; v_amount_sum := 0; v_amount_sum_incl := 0; v_count := 0; v_bestand := 'EXACT'; v_crdnr := 'Q'; v_factuur_nr := 'Q'; -- Eerst opruiming DELETE FROM imp_log WHERE imp_log_applicatie = p_applname; DELETE fac_rapport WHERE fac_rapport_node = v_bestand; -- wat is de key van het kenmerk boekstuknummer? SELECT fin_kenmerk_key INTO v_bkstknr_kenmerk_key FROM fin_kenmerk k WHERE k.fin_kenmerk_code = 'BOEKSTUKNUMMER' AND k.fin_kenmerk_verwijder IS NULL; -- wat is de key van het kenmerk bijlage? SELECT fin_kenmerk_key INTO v_bijlage_kenmerk_key FROM fin_kenmerk k WHERE k.fin_kenmerk_code = 'FACTUURBESTAND' AND k.fin_kenmerk_verwijder IS NULL; IF p_regio_key IS NOT NULL THEN -- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan binnen de aangegeven regio DELETE fin_kenmerkfactuur kf WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek AND fin_factuur_key IN (SELECT fin_factuur_key FROM fin_factuur WHERE fin_factuur_statuses_key <> 7) AND VBXX.bepaal_fin_regio(kf.fin_factuur_key) = p_regio_key; -- verwijder de tijdelijke opslag met factuurnummers om in de verwerk te gebruiken DELETE vbxx_exp_factuur e WHERE e.dagboek = p_dagboek AND VBXX.bepaal_fin_regio(e.fin_factuur_key) = p_regio_key; -- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar -- ## AAIT#36589 SELECT MAX(fin_kenmerkfactuur_waarde) INTO v_boekstuknummer FROM fin_kenmerkfactuur kf WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY') AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek AND VBXX.bepaal_fin_regio(kf.fin_factuur_key) = p_regio_key; ELSE -- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan binnen het aangegeven district DELETE fin_kenmerkfactuur kf WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek AND fin_factuur_key IN (SELECT fin_factuur_key FROM fin_factuur WHERE fin_factuur_statuses_key <> 7) AND VBXX.bepaal_fin_district(kf.fin_factuur_key) = p_district_key; -- verwijder de tijdelijke opslag met factuurnummers om in de verwerk te gebruiken DELETE vbxx_exp_factuur e WHERE e.dagboek = p_dagboek AND e.alg_district_key = p_district_key; -- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar -- ## AAIT#36589 SELECT MAX(fin_kenmerkfactuur_waarde) INTO v_boekstuknummer FROM fin_kenmerkfactuur kf WHERE fin_kenmerk_key = v_bkstknr_kenmerk_key AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY') AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek AND VBXX.bepaal_fin_district(kf.fin_factuur_key) = p_district_key; END IF; -- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export) -- deze keys gebruikt kunnen worden. INSERT INTO vbxx_exp_factuur (fin_factuur_key, dagboek, alg_district_key) ( SELECT DISTINCT fg.fin_factuur_key, fg.dagboek, p_district_key FROM vbxx_v_factuur_gegevens fg, prs_bedrijf b WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key AND b.prs_leverancier_nr IS NOT NULL AND fg.fin_factuur_statuses_key = 6 AND fg.fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum: AND fg.fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan één jaar in de toekomst. AND (fg.alg_district_key = p_district_key OR p_district_key IS NULL) -- oude klanten zijn gescoped op district AND (fg.alg_regio_key = p_regio_key OR p_regio_key IS NULL) -- de rabobank is gescoped op regio AND fg.dagboek = p_dagboek ); IF v_boekstuknummer IS NULL THEN v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || p_dagboek || '0000'); END IF; -- header vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); 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, ''); 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, ''); 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, ''); 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, ''); vbxx.add_xml_element (v_bestand, 'Description', rec1.oms_regel); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); 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, ''); vbxx.add_xml_row (v_bestand, ''); 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, ''); -- 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, ''); vbxx.add_xml_row (v_bestand, ''); 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, ''); vbxx.add_xml_element (v_bestand, 'FCLTattachment', v_bijlagen_key); vbxx.add_xml_row (v_bestand, ''); END IF; vbxx.add_xml_row (v_bestand, ''); 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, ''); v_order_count := v_order_count + 1; END; END LOOP; vbxx.add_xml_row (v_bestand, ''); vbxx.add_xml_row (v_bestand, ''); fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, ''); END; / CREATE OR REPLACE VIEW vbxx_v_export_verwerk_exact ( result, result_order ) AS SELECT 'Lijst met bevroren facturen:' fac_rapport_regel, 0 fac_rapport_volgnr FROM DUAL UNION ALL SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'VW_EXACT'; CREATE OR REPLACE PROCEDURE vbxx_select_verwerk_exact ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_dagboek IN VARCHAR2, p_district_key IN NUMBER, p_regio_key IN NUMBER DEFAULT NULL ) AS CURSOR c_fact IS SELECT DISTINCT f.fin_factuur_key, fg.mld_opdr_key FROM vbxx_exp_factuur f, vbxx_v_factuur_gegevens fg WHERE f.fin_factuur_key = fg.fin_factuur_key AND fg.fin_factuur_statuses_key = 6 AND f.dagboek = p_dagboek AND (fg.alg_district_key = p_district_key OR p_district_key IS NULL) AND (fg.alg_regio_key = p_regio_key OR p_regio_key IS NULL); v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanvrager NUMBER; v_bestelling_key NUMBER; v_bestand VARCHAR2(12); v_logdate DATE; v_volgnr NUMBER; v_statusopdr_key NUMBER; BEGIN v_errormsg := 'Geen akties'; v_aanvrager := 3; -- Facilitor v_logdate := SYSDATE; v_bestand := 'VW_EXACT'; v_volgnr := 1; -- Eerst opruiming DELETE fac_rapport WHERE fac_rapport_node = v_bestand; FOR rec1 IN c_fact LOOP BEGIN UPDATE fin_factuur f SET fin_factuur_statuses_key = 7 WHERE f.fin_factuur_key = rec1.fin_factuur_key; fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL); -- als opdrachtkey is not null IF rec1.mld_opdr_key IS NOT NULL THEN SELECT mld_statusopdr_key INTO v_statusopdr_key FROM mld_opdr WHERE mld_opdr_key = rec1.mld_opdr_key; --als status != afgemeld (6) en afgerond (9) IF v_statusopdr_key <> 6 AND v_statusopdr_key <> 9 THEN -- set status op geleverd MLD.setopdrachtstatus (rec1.mld_opdr_key, 6, NULL); END IF; -- als status != afgerond (9) IF v_statusopdr_key <> 9 THEN -- set status op 9 MLD.setopdrachtstatus (rec1.mld_opdr_key, 9, NULL); END IF; END IF; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES (v_bestand, v_volgnr, rec1.fin_factuur_key); v_volgnr := v_volgnr + 1; END; END LOOP; -- verwijder de enties uit de tijdelijke tabel. IF p_district_key IS NOT NULL THEN DELETE vbxx_exp_factuur e WHERE e.dagboek = p_dagboek AND e.alg_district_key = p_district_key; ELSE DELETE vbxx_exp_factuur e WHERE e.dagboek = p_dagboek AND alg_district_key IN (SELECT d.alg_district_key FROM alg_district d WHERE d.alg_regio_key = p_regio_key); END IF; END; / -- -- Verkoopfacturen -- CREATE OR REPLACE VIEW vbxx_v_kosten_doorbelasting AS SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer, m.mld_melding_externnr, m.mld_melding_key, l.alg_locatie_omschrijving meldinglocatie, di.alg_district_omschrijving district, g.alg_gebouw_code gebouw_code, pf.prs_perslid_naam_full melder, sd.ins_srtdiscipline_omschrijving vakgroeptype, d.ins_discipline_omschrijving vakgroep, std.mld_stdmelding_omschrijving standaardmelding, ksm.prs_kostensoort_oms melding_nen_omschrijving, ksm.prs_kostensoort_refcode melding_nen_code, CASE WHEN m.mld_melding_status = 5 AND m.mld_melding_afgerond = 1 THEN 'Afgerond' ELSE ms.mld_statuses_omschrijving END meldingstatus, m.mld_melding_datum meldingdatum, MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld, m.mld_melding_onderwerp onderwerp, m.mld_melding_omschrijving vomschrijving, sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdrachtnummer, ot.mld_typeopdr_omschrijving opdrachttype, ot.mld_typeopdr_key opdrachttype_key, tf.fac_usrdata_omschr type_factuur, o.mld_statusopdr_key, so.mld_statusopdr_omschrijving opdrachtstatus, o.mld_opdr_omschrijving opdrachtomschrijving, b.prs_bedrijf_naam opdrachtuitvoerende, o.mld_opdr_kosten opdrachtkosten, (SELECT SUM(ft.fin_factuur_totaal) FROM fin_factuur ft WHERE ft.fin_factuur_verwijder IS NULL AND ft.fin_factuur_statuses_key = 7 AND ft.mld_opdr_key = o.mld_opdr_key) factuurbedrag, COALESCE(f.fin_factuurregel_totaal, rbbtw.bedrag) factuurregeltotaal, VBXX.get_opslag_perc (o.mld_opdr_key) opslag, DECODE (nb.mld_kenmerkopdr_waarde, 1, 0, COALESCE(f.fin_factuurregel_totaal, rbbtw.bedrag, o.mld_opdr_kosten) * ((100 + VBXX.get_opslag_perc (o.mld_opdr_key)) / 100)) kostenplusopslag, btw.fin_btwtabelwaarde_oms btwtabelwaarde_oms, COALESCE(btw.fin_btwtabelwaarde_perc, rbbtw.btw) btwtabelwaarde_perc, COALESCE(f.fin_factuurregel_btw, ROUND((rbbtw.bedrag * rbbtw.btw)/100,2)) factuurregel_btw, COALESCE ( (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND k.mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_code = 'BOEKMAAND'), TO_CHAR ( ADD_MONTHS (SYSDATE, COALESCE ((SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_kenmerk_key = k.alg_kenmerk_key AND k.alg_kenmerk_code = 'BOEKMNDOFFSET' AND k.alg_kenmerk_verwijder IS NULL AND alg_onrgoed_key = l.alg_district_key), 0)), 'yyyymm')) boekmaand, aog.alg_gebouw_naam meldinggebouw, DECODE ( (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'FINAKKOORD' AND k.mld_kenmerk_verwijder IS NULL), 1, 'Ja', 'Nee') pro_forma_goedgekeurd, DECODE (nb.mld_kenmerkopdr_waarde, 1, 'Ja', 'Nee') nietdoorbelasten, o.mld_opdr_key, l.alg_district_key, l.alg_locatie_key fclt_3d_locatie_key, COALESCE(kso.prs_kostensoort_oms, ksm.prs_kostensoort_oms) opdracht_nen_code, COALESCE(kso.prs_kostensoort_refcode, ksm.prs_kostensoort_refcode) opdracht_nen_exact_code, COALESCE(kso.prs_kostensoort_opmerking, ksm.prs_kostensoort_opmerking) opdracht_nen_omschrijving, kso.prs_kostensoort_oms afw_opdracht_nen_omschrijving, kso.prs_kostensoort_refcode afw_opdracht_nen_code, kin.mld_kenmerkopdr_waarde klantinkoopnr, k.prs_kostenplaats_nr, k.prs_kostenplaats_omschrijving FROM prs_v_perslid_fullnames_all pf, prs_kostensoort ksm, mld_statuses ms, mld_opdr o, mld_typeopdr ot, mld_statusopdr so, prs_bedrijf b, alg_locatie l, alg_district di, alg_gebouw g, prs_kostensoort kso, mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd, alg_v_allonrgoed_gegevens aog, prs_kostenplaats k, (SELECT f.fin_factuur_key, f.mld_opdr_key, fr.fin_btwtabelwaarde_key, SUM(fr.fin_factuurregel_btw) fin_factuurregel_btw, SUM(fr.fin_factuurregel_totaal) fin_factuurregel_totaal FROM fin_factuurregel fr, fin_factuur f WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.fin_factuur_verwijder IS NULL AND f.fin_factuur_statuses_key = 7 GROUP BY f.fin_factuur_key, f.fin_factuur_totaal, f.mld_opdr_key, fr.fin_btwtabelwaarde_key) f, ( SELECT o.mld_opdr_key, COALESCE (bedrag, mld_opdr_kosten) bedrag, COALESCE (btw, 21) btw FROM (SELECT ko.mld_opdr_key, FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) bedrag, DECODE (sk.mld_srtkenmerk_code, 'BEDRAGNUL', 0, 'BEDRAGHOOG', 21, 'BEDRAGLAAG', 9) btw FROM mld_srtkenmerk sk, mld_kenmerk k, mld_kenmerkopdr ko WHERE sk.mld_srtkenmerk_code IN ('BEDRAGNUL', 'BEDRAGHOOG', 'BEDRAGLAAG') AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key) k, mld_opdr o, mld_typeopdr ot WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key AND ot.mld_typeopdr_upper LIKE 'REVERSED%' AND o.mld_opdr_key = k.mld_opdr_key(+)) rbbtw, fin_btwtabelwaarde btw, (SELECT fac_usrdata_code, fac_usrdata_omschr, mld_opdr_key FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR' AND k.mld_kenmerk_verwijder IS NULL AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = fac_usrdata_key) tf, (SELECT ko.mld_opdr_key, null bedrag FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING' AND k.mld_kenmerk_verwijder IS NULL) ok, (SELECT mld_opdr_key, mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'NIETDOORBELASTEN' AND k.mld_kenmerk_verwijder IS NULL) nb, (SELECT mld_opdr_key, mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'KLANTINKOOPNR' AND k.mld_kenmerk_verwijder IS NULL) kin WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND std.prs_kostensoort_key = ksm.prs_kostensoort_key(+) AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_melding_key = o.mld_melding_key AND m.prs_perslid_key = pf.prs_perslid_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND aog.alg_gebouw_key = g.alg_gebouw_key(+) AND l.alg_district_key = di.alg_district_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_statusopdr_key = so.mld_statusopdr_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+) AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+) AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+) AND o.mld_opdr_key = tf.mld_opdr_key AND tf.fac_usrdata_code <> 'A' AND o.mld_opdr_key = ok.mld_opdr_key(+) AND o.mld_opdr_key = nb.mld_opdr_key(+) AND o.mld_opdr_key = kin.mld_opdr_key(+) AND COALESCE(o.prs_kostenplaats_key, m.prs_kostenplaats_key) = k.prs_kostenplaats_key(+) AND o.mld_opdr_key = f.mld_opdr_key(+) AND o.mld_opdr_key = rbbtw.mld_opdr_key(+) AND f.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key(+); CREATE OR REPLACE VIEW vbxx_v_kosten_doorb_frozen AS SELECT fin_verkoopfactuur_omschr meldingnummer, fin_verkoopfactuur_n4 mld_melding_key, l.alg_locatie_omschrijving meldinglocatie, di.alg_district_omschrijving district, fin_verkoopfactuur_c8 gebouw_code, pf.prs_perslid_naam_full melder, fin_verkoopfactuur_c3 soortmelding, fin_verkoopfactuur_c4 productgroep, fin_verkoopfactuur_c5 subproductgroep, fin_verkoopfactuur_c1 melding_nen_omschrijving, fin_verkoopfactuur_c2 melding_nen_code, ms.mld_statuses_omschrijving meldingstatus, 'Gefactureerd' facturatiestatus, m.mld_melding_datum meldingdatum, MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld, m.mld_melding_onderwerp onderwerp, m.mld_melding_omschrijving vomschrijving, fin_verkoopfactuur_id opdrachtnummer, ot.mld_typeopdr_omschrijving opdrachttype, so.mld_statusopdr_omschrijving opdrachtstatus, o.mld_opdr_omschrijving opdrachtomschrijving, COALESCE(vf.prs_kostensoort_oms, fin_verkoopfactuur_c1) opdracht_nen_omschrijving, b.prs_bedrijf_naam opdrachtuitvoerende, fin_verkoopfactuur_bedrag opdrachtkosten, fin_verkoopfactuur_c6 soortopslag, fin_verkoopfactuur_n2 opslag, fin_verkoopfactuur_n3 kostenplusopslag, fin_verkoopfactuur_n1 geenopslag, fin_verkoopfactuur_maand boekmaand, mld_opdr_key, kso.prs_kostensoort_oms afw_opdracht_nen_omschrijving, kso.prs_kostensoort_refcode afw_opdracht_nen_code, l.alg_locatie_key fclt_x_locatie FROM fin_verkoopfactuur vf, prs_v_perslid_fullnames_all pf, mld_statuses ms, mld_opdr o, mld_typeopdr ot, mld_statusopdr so, prs_bedrijf b, alg_locatie l, alg_district di, mld_melding m, prs_kostensoort kso WHERE m.mld_melding_status = ms.mld_statuses_key AND m.mld_melding_key = vf.fin_verkoopfactuur_n4 AND o.mld_opdr_key = vf.fin_verkoopfactuur_refkey AND m.prs_perslid_key = pf.prs_perslid_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = di.alg_district_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_statusopdr_key = so.mld_statusopdr_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+) AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+) -- -- PRO_FORMA facturen -- 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;' || 'opdracht_nen_code;' || 'opdrachtuitvoerende;' || 'opdrachtkosten;' || 'factuurbedrag;' || 'opslag;' || 'kostenplusopslag;' || 'boekmaand;' || 'pro_forma_goedgekeurd;' || 'niet_doorbelasten;' || 'meldinggebouw;' || 'klantinkoopnr', -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_code || ';' || opdracht_nen_omschrijving || ';' || opdrachtuitvoerende || ';' || REPLACE(opdrachtkosten, '.', ',') || ';' || REPLACE(factuurbedrag, '.', ',') || ';' || opslag || ';' || REPLACE(kostenplusopslag, '.', ',') || ';' || boekmaand || ';' || pro_forma_goedgekeurd || ';' || nietdoorbelasten || ';' || meldinggebouw || ';' || klantinkoopnr, mld_melding_key, alg_district_key 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 k.alg_kenmerk_verwijder IS NULL AND alg_onrgoed_key = d.alg_district_key), 0)), 'yyyymm') INTO v_boekmaand FROM alg_district d WHERE alg_district_key = p_district_key; SELECT k.alg_kenmerk_key INTO v_datum_pro_forma_kenmerk_key FROM alg_kenmerk k WHERE k.alg_kenmerk_code = 'DATUMPROFORMA' AND k.alg_kenmerk_verwijder IS NULL; ALG.upsertkenmerk (v_datum_pro_forma_kenmerk_key, p_district_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly datum pro forma FOR rec IN c LOOP BEGIN SELECT mld_kenmerk_key INTO v_gvf_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'FINAKKOORD' AND k.mld_kenmerk_verwijder IS NULL AND k.mld_typeopdr_key = rec.opdrachttype_key; -- zet de opdracht op 'Gereed voor facturatie' FLX.setflex('OPD', v_gvf_kenmerk_key, rec.mld_opdr_key, 1); -- Facturatiestatus naar 'Gereed voor facturatie' EXCEPTION WHEN 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 k.alg_kenmerk_verwijder IS NULL AND alg_onrgoed_key = d.alg_district_key), 0)), 'yyyymm') INTO v_boekmaand FROM alg_district d WHERE alg_district_key = p_district_key; FOR rec IN c LOOP BEGIN -- bevries de factuurgegevens in de verkooptabel. INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_aanmaak, fin_verkoopfactuur_id, fin_verkoopfactuur_datum, fin_verkoopfactuur_omschr, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, prs_kostensoort_oms, fin_verkoopfactuur_bedrag, fin_verkoopfactuur_maand, fin_verkoopfactuur_n2, fin_verkoopfactuur_n3, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c4, fin_verkoopfactuur_c5, fin_verkoopfactuur_c6, fin_verkoopfactuur_c7, fin_verkoopfactuur_c8) VALUES (SYSDATE, rec.opdrachtnummer, SYSDATE, rec.meldingnummer, 'opdracht', rec.mld_opdr_key, SUBSTR(rec.opdracht_nen_omschrijving,1,60), rec.opdrachtkosten, v_boekmaand, rec.opslag, rec.kostenplusopslag, rec.mld_melding_key, rec.alg_district_key, rec.melding_nen_omschrijving, rec.melding_nen_code, rec.vakgroeptype, rec.vakgroep, rec.standaardmelding, rec.nietdoorbelasten, rec.opdracht_nen_omschrijving, rec.gebouw_code); MLD.setopdrachtstatus (rec.mld_opdr_key, 7, NULL); -- Verwerkt -- We slaan bij de opdracht de boekmaand op waarop deze opdracht op de klantfactuur is geplaatst. SELECT mld_kenmerk_key INTO v_boekmaand_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_typeopdr_key = rec.opdrachttype_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.mld_srtkenmerk_code = 'BOEKMAAND' AND k.mld_kenmerk_verwijder IS NULL; FLX.setflex('OPD', v_boekmaand_kenmerk_key, rec.mld_opdr_key, v_boekmaand); END; END LOOP; SELECT alg_kenmerk_key INTO v_exp_proforma_kenmerk_key FROM alg_kenmerk k WHERE k.alg_kenmerk_code = 'EXPROFORMA' AND k.alg_kenmerk_verwijder IS NULL; 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' AND k.alg_kenmerk_verwijder IS NULL; 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’T of CO534.7HEERLEN. Voor goede verwerking gaan we de tekst achteraan de orderreferentie weghalen. --- Uitgezet: We willen ook bestellingen matchen --- 3. Als ordernr is C (= contract) echter zonder versienummer - Dan wordt in standaard update altijd automatisch het hoogste versienummer gepakt. --- Ivm overlap 'jaarovergangen' is dat niet altijd juist en moet de vanuit Mareon geimporteerde factuur nog status 'te controleren' meekrijgen voordat deze automatisch de financiele-interface in gaat. --- 4. Ordernr beginnende met "BE" of "B" wordt niet als Bestelling herkend. Daarom gaan we deze prefix in de import-tabel weghalen. --- --- Foutcodes: In het kenmerk FOUTCODE wordt een bitwise foutcode bijgehouden. Hieronder staat de uitleg per bitje --- bit 0: bijlage kon niet opgeslagen worden. --- bit 1: orderreferentie niet gevonden --- bit 2: fout in bedrijfsherkenning --- bit 3: overige fout uit import --- bit 4: dubbele factuur --- bit 5: verzamelfactuur --- bit 6: IBAN niet correct --- bit 7: IBAN niet gevuld bij leverancier --- bit 8: Proces fout (Oracle foutmelding) --- bit 9: Ordernummer niet aanwezig via scanning --- bit 10: 3 weg matching maar verplichting niet afgemeld CURSOR ccor_0 IS SELECT ordernr FROM fac_imp_factuur WHERE fac_import_key = p_import_key AND ordernr IS NULL GROUP BY ordernr ; CURSOR ccor_0_1 IS SELECT factuurnr, ordernr FROM fac_imp_factuur WHERE fac_import_key = p_import_key AND INSTR(ordernr,'(*)') > 1 GROUP BY factuurnr, ordernr ; CURSOR ccor_0_2 IS SELECT factuurnr, ordernr FROM fac_imp_factuur WHERE fac_import_key = p_import_key AND REGEXP_INSTR(REVERSE(ordernr), '\d') > 1 GROUP BY factuurnr, ordernr ; CURSOR ccor_3 IS SELECT factuurnr, ordernr, SUBSTR(ordernr,2) cnt_contract_nummer_intern FROM fac_imp_factuur WHERE fac_import_key = p_import_key AND SUBSTR(UPPER(ordernr),1,1) = 'C' AND INSTR(ordernr,'.')=0 GROUP BY factuurnr, ordernr ; CURSOR ccor_4 IS SELECT factuurnr, ordernr FROM fac_imp_factuur WHERE fac_import_key = p_import_key AND ( SUBSTR (ordernr, 1, 1) = 'B' AND fac.safe_to_number (SUBSTR (ordernr, 2, 1)) IS NOT NULL) OR (SUBSTR (ordernr, 1, 2) = 'BE') GROUP BY factuurnr, ordernr ; CURSOR cfactuur IS SELECT i.fin_factuur_key, factuurdatum, i.kenmerk1, i.kenmerk2, i.kenmerk3, i.kenmerk6, i.kenmerk7, i.kenmerk8, i.kenmerk9, i.kenmerk10, i.kenmerk11, i.kenmerk12, i.kenmerk13, i.factuurnr, i.ordernr, i.fac_imp_file_index, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key FROM fac_imp_factuur i, fin_factuur f WHERE i.fin_factuur_key IS NOT NULL AND i.fac_import_key = p_import_key AND f.fin_factuur_key = i.fin_factuur_key AND kenmerk1 IS NOT NULL -- Incl bijlage ; CURSOR cfactuurregel IS SELECT f.fin_factuur_key, fr.fin_factuurregel_key, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key FROM fac_imp_factuur i, fin_factuurregel fr, fin_factuur f WHERE i.fac_import_key = p_import_key AND i.fin_factuurregel_key = fr.fin_factuurregel_key AND fr.fin_factuur_key = f.fin_factuur_key; v_aanduiding VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); c_kenmerk_key_bijlage NUMBER(10); c_kenmerk_key_soort VARCHAR(1) := 'F'; -- fin_kenmerk_kenmerktype = M(foldermap) of F(enkelvoudig bestand) v_contract_versies NUMBER(10); c_kenmerk_key_gebouw NUMBER(10); v_opdracht_key NUMBER(10); v_aanduiding_controle VARCHAR2 (1000); -- Voor logging op bijbehorende controle zodat men weet wat men moet controleren v_fin_factuur_key NUMBER(10); v_locatie_code ALG_LOCATIE.ALG_LOCATIE_CODE%TYPE; v_gebouw_key ALG_GEBOUW.ALG_GEBOUW_KEY%TYPE; v_perslid_key PRS_PERSLID.PRS_PERSLID_KEY%TYPE; v_dubbele_facturen NUMBER(10); v_perslid_key_beh CNT_CONTRACT.PRS_PERSLID_KEY_BEH%TYPE; v_foutcode NUMBER(10); v_fin_factuur_boekmaand_nu VARCHAR(7); -- Ingelezen factuur in format tekst "jaar-mnd" (2022-05) v_gebroken_boekjaar NUMBER(1) := 0 ; v_cnt_looptijd_mnd NUMBER(10); v_cnt_deel_betaald_1 NUMBER(10); -- Deel van contract wat reeds betaald is v_cnt_deel_betaald_2 NUMBER(10); -- Deel van contract wat betaald is als de mareon-factuur ook verwerkt is v_cnt_deel_betaald_tekst VARCHAR2 (200); -- Tekst voor in tijdelijke kenmerveld om te kijken of bepaling boekmaand correct is -- v_cnt_deel_betaald NUMBER(10); -- METHODE 1: Deel van contract betaald met deze factuur -- v_fin_factuur_boekmaand VARCHAR(7); -- METHODE 1: De nieuwe boekmaand op de geimporteerde Mareon-factuur v_fin_factuur_boekmaand_2 VARCHAR(7); -- De nieuwe boekmaand op de geimporteerde Mareon-factuur - METHODE 2 v_fin_factuur_boekmaand_tekst VARCHAR2 (1000); -- Tekst voor in tijdelijke kenmerkveld om te kijken of bepaling boekmaand correct is c_kenmerk_key_boekmaand NUMBER(10); v_cnt_termijn_type VARCHAR(1); v_cnt_termijn_aantal NUMBER(3); v_cnt_soort VARCHAR2 (200); v_factuur_datum_boekmaand NUMBER(10); v_factuur_datum_boekmaand_jr NUMBER(10); v_factuur_datum_boekmaand_prev VARCHAR(2); v_factuur_datum_boekmaand_nu VARCHAR(2); v_fin_factuur_boekmaand_laatst VARCHAR(7); v_fin_factuur_boekmaand_prev VARCHAR(7); v_verdeelperiode_offset NUMBER; v_factuur_opmerking FIN_FACTUUR.FIN_FACTUUR_OPMERKING%TYPE; v_factuur_note_omschrijving FIN_FACTUUR_NOTE.FIN_FACTUUR_NOTE_OMSCHRIJVING%TYPE; v_factuur_note_key FIN_FACTUUR_NOTE.FIN_FACTUUR_NOTE_KEY%TYPE; v_bedrijf_iban FIN_KENMERKFACTUUR.FIN_KENMERKFACTUUR_WAARDE%TYPE; v_bedrijf_key PRS_BEDRIJF.PRS_BEDRIJF_KEY%TYPE; v_factmatchmode MLD_DISC_PARAMS.MLD_DISC_PARAMS_FACTMATCHMODE%TYPE; v_statusopdr_key MLD_OPDR.MLD_STATUSOPDR_KEY%TYPE; PROCEDURE track_error (p_error_str IN VARCHAR2, p_foutcode IN NUMBER, p_factuur_key IN NUMBER, p_perslid_key IN NUMBER) IS v_kenmerk_key_foutcode FIN_KENMERK.FIN_KENMERK_KEY%TYPE; v_foutcode NUMBER(10); v_verschil NUMBER(10); BEGIN --Hebben we deze tracking nodig? De fouten komen ook in de notities te staan. --fac.trackaction ('FINUPD', p_factuur_key, p_perslid_key, NULL, p_error_str); BEGIN SELECT fin_factuur_note_omschrijving, fin_factuur_note_key INTO v_factuur_note_omschrijving, v_factuur_note_key FROM fin_factuur_note WHERE fin_factuur_key = p_factuur_key; UPDATE fin_factuur_note SET fin_factuur_key = p_factuur_key, prs_perslid_key = p_perslid_key, fin_factuur_note_omschrijving = fin_factuur_note_omschrijving || CHR (13) || CHR (10) || p_error_str WHERE fin_factuur_note_key = v_factuur_note_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fin_factuur_note (fin_factuur_key, prs_perslid_key, fin_factuur_note_omschrijving) VALUES (p_factuur_key, p_perslid_key, 'Factuur import:' || CHR (13) || CHR (10) || p_error_str); END; -- nog reden vullen: UPDATE fin_factuur SET fin_factuur_statuses_key = 3 WHERE fin_factuur_key = p_factuur_key; IF p_foutcode IS NOT NULL THEN SELECT k.fin_kenmerk_key INTO v_kenmerk_key_foutcode FROM fin_kenmerk k WHERE k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL; v_foutcode := COALESCE(FAC.SAFE_TO_NUMBER(FLX.getflex ('FIN', v_kenmerk_key_foutcode, p_factuur_key)),0); v_verschil := BITAND(v_foutcode, p_foutcode); v_foutcode := v_foutcode - v_verschil; v_foutcode := v_foutcode + p_foutcode; FLX.setflex ('FIN', v_kenmerk_key_foutcode, p_factuur_key, v_foutcode); END IF; END; PROCEDURE setkenmerkfactuur (p_factuur_key IN NUMBER, p_kenmerk_code IN VARCHAR2, p_kenmerkwaarde IN VARCHAR2) IS v_kenmerk_key FIN_KENMERK.FIN_KENMERK_KEY%TYPE; BEGIN SELECT fin_kenmerk_key INTO v_kenmerk_key FROM fin_kenmerk WHERE fin_kenmerk_code = p_kenmerk_code; INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde) VALUES (p_factuur_key, v_kenmerk_key, p_kenmerkwaarde); EXCEPTION WHEN OTHERS THEN RETURN; END; BEGIN 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 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 v_errorhint := 'Verwerken van de factuur'; SELECT REPLACE(fin_factuur_opmerking, '@@', CHR (13) || CHR (10)) INTO v_factuur_opmerking FROM fin_factuur WHERE fin_factuur_key = rec.fin_factuur_key; IF v_factuur_opmerking IS NOT NULL THEN track_error (v_factuur_opmerking, NULL, rec.fin_factuur_key, v_perslid_key); -- Overnemen van de opmerking in de notitie. UPDATE fin_factuur SET fin_factuur_opmerking = NULL WHERE fin_factuur_key = rec.fin_factuur_key; END IF; -- Als er een bijlage-flexprop en een bijlage is, dan gaan we deze PDF hier inzetten.... v_errorhint := 'Verwerken bijlage van de factuur'; IF c_kenmerk_key_bijlage IS NOT NULL AND rec.kenmerk1 IS NOT NULL THEN BEGIN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES('IMPORT:' || TO_CHAR (p_import_key), 'flexcode', 'FIN:' || TO_CHAR (rec.fin_factuur_key) -- We kunnen niet meerdere imports tegelijk aan! || ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key || c_kenmerk_key_soort -- 'F of M' ); -- FSN#33363: Zelf de insert in fin_kenmerkfactuur doen van het bestandskenmerk (FSN#33105 verzorgt dit niet namelijk) -- Aanvulling JM: Voor F-enkelvoudig bestand wel nodig om kenmerk aan te maken, voor M-folder hoeft/moet dit niet IF c_kenmerk_key_soort = 'F' THEN INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde) VALUES (rec.fin_factuur_key, c_kenmerk_key_bijlage, rec.kenmerk1); END IF; EXCEPTION WHEN OTHERS THEN v_aanduiding_controle := 'Van factuur met key ' || rec.fin_factuur_key || ' is de bestandsnaam niet bewaard (regel ' || rec.fac_imp_file_index || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding_controle, 'Factuurnr:' || rec.factuurnr || ' / Bestandsnaam: ' || rec.kenmerk1 ); track_error (v_aanduiding_controle, 1, rec.fin_factuur_key, v_perslid_key); -- bit 0 END; COMMIT; END IF; -- Fout gemeldt door Mareon v_errorhint := 'Bedrijfsherkenning'; IF rec.kenmerk6 = '3' THEN v_foutcode := 0; IF rec.kenmerk7 LIKE '%Intern bedrijf is niet (goed) vastgesteld%' THEN v_foutcode := POWER(2,2); ELSE v_foutcode := POWER(2,3); END IF; v_aanduiding_controle := 'ERROR: ' || REPLACE(rec.kenmerk7, '@@', CHR(13)||CHR(10)); track_error (v_aanduiding_controle, v_foutcode, rec.fin_factuur_key, v_perslid_key); END IF; -- Mareon_bron tonen in Facilitor bij Factuur setkenmerkfactuur(rec.fin_factuur_key, 'MAREON_BRON', rec.kenmerk9); -- BTW nummer tonen in Facilitor bij Factuur setkenmerkfactuur(rec.fin_factuur_key, 'BTWNR', rec.kenmerk10); -- KVK nummer tonen in Facilitor bij Factuur setkenmerkfactuur(rec.fin_factuur_key, 'KVKNR', rec.kenmerk11); -- IBAN tonen in Facilitor bij Factuur setkenmerkfactuur(rec.fin_factuur_key, 'IBAN', rec.kenmerk12); -- G rekening IBAN tonen in Facilitor bij Factuur setkenmerkfactuur(rec.fin_factuur_key, 'GIBAN', rec.kenmerk13); -- Incomplete facturen, zonder orderreferentie, gaan we ook op controle zetten IF (rec.mld_opdr_key IS NULL AND rec.cnt_contract_key IS NULL AND rec.bes_bestelopdr_key IS NULL) THEN IF rec.ordernr = '00000' THEN v_aanduiding_controle := 'ERROR: Factuur incompleet i.v.m. ontbrekende orderreferentie vanuit scanning'; track_error (v_aanduiding_controle, 512, rec.fin_factuur_key, v_perslid_key); -- bit 9 ELSE v_aanduiding_controle := 'ERROR: Factuur incompleet i.v.m. niet gevonden orderreferentie:' || rec.ordernr; track_error (v_aanduiding_controle, 2, rec.fin_factuur_key, v_perslid_key); -- bit 1 END IF; ELSE v_errorhint := 'IBAN controle'; SELECT COALESCE(o.mld_uitvoerende_keys, bo.prs_bedrijf_key, c.cnt_prs_bedrijf_key, -1) INTO v_bedrijf_key FROM fin_factuur f, mld_opdr o, bes_bestelopdr bo, cnt_contract c WHERE f.mld_opdr_key = o.mld_opdr_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+) AND f.cnt_contract_key = c.cnt_contract_key(+) AND f.fin_factuur_key = rec.fin_factuur_key; SELECT FLX.getflex('PRS', k.prs_kenmerk_key, v_bedrijf_key, 'B', 1) INTO v_bedrijf_iban FROM prs_kenmerk k WHERE k.prs_kenmerk_code = 'IBAN'; IF v_bedrijf_iban IS NULL THEN v_aanduiding_controle := 'ERROR: IBAN niet ingevuld bij leverancier.' ; track_error (v_aanduiding_controle, POWER(2,7), rec.fin_factuur_key, v_perslid_key); ELSE IF COALESCE(UPPER(REPLACE(rec.kenmerk12, ' ')), 'QueQeLeQue') <> UPPER(REPLACE(v_bedrijf_iban, ' ')) THEN -- dan gaan we ook de iban controleren v_aanduiding_controle := 'ERROR: IBAN komt niet overeen!' ; track_error (v_aanduiding_controle, POWER(2,6), rec.fin_factuur_key, v_perslid_key); END IF; END IF; -- Controle of er al een factuur ontvangen is met hetzelfde factuurnummer en referentie -- 1 Afgewezen -- 2 Ingevoerd -- 3 Incompleet -- 5 Ter goedkeuring -- 6 Akkoord -- 7 Verwerkt v_errorhint := 'Controle op dubbele facturen'; IF rec.mld_opdr_key IS NOT NULL THEN SELECT count(*) INTO v_dubbele_facturen FROM mld_opdr oa, fin_factuur f WHERE oa.mld_opdr_key = f.mld_opdr_key AND rec.factuurnr = f.fin_factuur_nr AND rec.mld_opdr_key = oa.mld_opdr_key AND f.fin_factuur_statuses_key NOT IN (1) AND f.fin_factuur_verwijder IS NULL AND f.fin_factuur_key <> rec.fin_factuur_key; -- Nu we er toch zijn gaan we controleren of driewegmatching aanstaat voor de vakgroep. SELECT mld_disc_params_factmatchmode, mld_statusopdr_key INTO v_factmatchmode, v_statusopdr_key FROM mld_disc_params dp, mld_stdmelding std, mld_melding m, mld_opdr o WHERE o.mld_opdr_key = rec.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = dp.mld_ins_discipline_key; IF v_factmatchmode = 3 AND v_statusopdr_key IN (1,2,3,4,5,8,10) -- afgewezen, niet akkoord, ter fiattering, gefiatteerd, toegekend, geaccepteerd, tergoedkeuring THEN v_aanduiding_controle := 'ERROR: 3 weg matching maar verplichting niet afgemeld.' ; track_error (v_aanduiding_controle, POWER(2,1024), rec.fin_factuur_key, v_perslid_key); END IF; END IF; IF rec.bes_bestelopdr_key IS NOT NULL THEN SELECT count(*) INTO v_dubbele_facturen FROM bes_bestelopdr oa, fin_factuur f WHERE oa.bes_bestelopdr_key = f.bes_bestelopdr_key AND rec.factuurnr = f.fin_factuur_nr AND rec.bes_bestelopdr_key = oa.bes_bestelopdr_key AND f.fin_factuur_statuses_key NOT IN (1) AND f.fin_factuur_verwijder IS NULL AND f.fin_factuur_key <> rec.fin_factuur_key; END IF; IF rec.cnt_contract_key IS NOT NULL THEN SELECT count(*) INTO v_dubbele_facturen FROM cnt_contract ca, fin_factuur f WHERE ca.cnt_contract_key = f.cnt_contract_key AND rec.factuurnr = f.fin_factuur_nr AND rec.cnt_contract_key = ca.cnt_contract_key AND f.fin_factuur_statuses_key NOT IN (1) AND f.fin_factuur_verwijder IS NULL AND f.fin_factuur_key <> rec.fin_factuur_key; BEGIN SELECT FAC.safe_to_number(FLX.getflex('CNT', k.cnt_kenmerk_key, rec.cnt_contract_key, 1)) INTO v_verdeelperiode_offset FROM cnt_contract c, cnt_kenmerk k WHERE c.ins_discipline_key = k.cnt_srtcontract_key AND k.cnt_kenmerk_niveau = 'S' AND k.cnt_kenmerk_code = 'VERDEELPERIODE_OFFSET' AND c.cnt_contract_key = rec.cnt_contract_key; UPDATE fin_factuur SET fin_factuur_boekmaand = TO_CHAR(ADD_MONTHS(fin_factuur_datum, COALESCE(v_verdeelperiode_offset, 0)), 'yyyy-mm') WHERE fin_factuur_key = rec.fin_factuur_key; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- Niet erg als de waarde leeg is of het kenmerk niet gedefinieerd is. Dan hoeven we niets te doen. END; -- Bij YKPN wordt de beheerder van het contract als eerste goedkeurder aangewezen. -- Voor de andere omgevingen wordt dit in het fin_set_approver proces uitgezocht. IF vbxx.get_user = 'YKPN' THEN -- De beheerder van het contract gaat als eerste goedkeurder ingevuld worden. -- Tenminste als deze rechten heeft op WEB_FINGOE SELECT MAX(prs_perslid_key_beh) INTO v_perslid_key_beh FROM cnt_contract c, fac_v_webgebruiker g, fac_functie f WHERE c.prs_perslid_key_beh = g.prs_perslid_key AND g.fac_functie_key = f.fac_functie_key AND f.fac_functie_code = 'WEB_FINGOE' AND cnt_contract_key = rec.cnt_contract_key; IF v_perslid_key_beh IS NOT NULL THEN UPDATE fin_factuur SET prs_perslid_key_goedkeur = v_perslid_key_beh WHERE fin_factuur_key = rec.fin_factuur_key; END IF; END IF; END IF; IF v_dubbele_facturen <> 0 THEN v_aanduiding_controle := 'ERROR: Dubbele facturen gevonden!' ; track_error (v_aanduiding_controle, POWER(2,4), rec.fin_factuur_key, v_perslid_key); END IF; -- tot slot nog nette logging v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ; fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding); -- Bij YKPN gaan we nog niet het generieke proces af trappen. IF vbxx.get_user <> 'YKPN' AND vbxx.get_user <> 'HEIN' THEN vbxx.fin_set_approver(rec.fin_factuur_key); END IF; END IF; END; END LOOP; -- We gaan nu beginnen met het verder verwerken van de factuur.. FOR rec IN cfactuurregel LOOP BEGIN v_errorhint := 'Controle van de facuurregel'; -- vul de locatiecode in de factuurregel IF rec.mld_opdr_key IS NOT NULL THEN BEGIN SELECT l.alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key) INTO v_locatie_code, v_gebouw_key FROM mld_opdr o, mld_melding m, alg_locatie l WHERE o.mld_opdr_key = rec.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_locatie_code := 'Onbekend'; END; END IF; -- vul de locatiecode in de factuurregel IF rec.bes_bestelopdr_key IS NOT NULL THEN BEGIN SELECT l.alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key) INTO v_locatie_code, v_gebouw_key FROM bes_bestelopdr o, mld_adres a, alg_locatie l WHERE o.bes_bestelopdr_key = rec.bes_bestelopdr_key AND o.mld_adres_key_lev = a.mld_adres_key AND a.alg_locatie_key = l.alg_locatie_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_locatie_code := 'Onbekend'; END; END IF; -- vul de locatiecode in de factuurregel IF rec.cnt_contract_key IS NOT NULL THEN BEGIN SELECT alg_locatie_code, (SELECT MAX(alg_gebouw_key) FROM alg_v_aanweziggebouw g WHERE g.alg_locatie_key = l.alg_locatie_key) INTO v_locatie_code, v_gebouw_key FROM alg_district d, alg_locatie l, fin_factuurregel fr WHERE d.alg_district_key = l.alg_district_key AND d.alg_regio_key IN (2, 3) -- binnenland / buitenland AND l.alg_locatie_verwijder IS NULL AND fr.fin_factuurregel_omschrijving LIKE '%' || l.alg_locatie_code || '%' AND fr.fin_factuurregel_key = rec.fin_factuurregel_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_locatie_code := 'Onbekend'; WHEN TOO_MANY_ROWS THEN v_locatie_code := 'Meerdere'; END; END IF; UPDATE fin_factuurregel fr SET fr.fin_factuurregel_referentie = v_locatie_code WHERE fr.fin_factuurregel_key = rec.fin_factuurregel_key; IF v_gebouw_key IS NOT NULL AND c_kenmerk_key_gebouw IS NOT NULL THEN INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key, fin_factuurregel_key, fin_kenmerkfactregel_waarde) VALUES (c_kenmerk_key_gebouw, rec.fin_factuurregel_key, v_gebouw_key); END IF; -- Zijn er regels niet goed geimporteerd? Dat kan voorkomen als bijvoorbeeld de combinatie btw tarief en verlegd -- niet leiden tot een eenduidige Exact code IF rec.fin_factuurregel_key IS NULL THEN SELECT (SELECT MAX (f.fin_factuur_key) FROM fac_imp_factuur f WHERE f.fac_import_key = fr.fac_import_key) factuur_key INTO v_fin_factuur_key FROM fac_imp_factuur fr WHERE fr.fac_import_key = p_import_key AND fr.fin_factuurregel_key IS NULL; IF v_fin_factuur_key IS NOT NULL THEN v_aanduiding_controle := 'ERROR: Fouten in geïmporteerde factuur op ' || to_char(SYSDATE, 'DD-MM-YYYY'); track_error (v_aanduiding_controle, POWER(2,5), rec.fin_factuur_key, v_perslid_key); END IF; END IF; END; END LOOP; EXCEPTION WHEN OTHERS THEN -- ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || CHR(10) || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')' ; SELECT MAX(i.fin_factuur_key) fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr INTO v_fin_factuur_key, v_errorhint FROM fac_imp_factuur i, fin_factuur f WHERE i.fac_import_key = p_import_key AND i.fin_factuur_key = f.fin_factuur_key (+) GROUP BY i.fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr ; IF v_fin_factuur_key IS NOT NULL THEN UPDATE fin_factuur SET fin_factuur_statuses_key = 3 WHERE fin_factuur_key = v_fin_factuur_key ; track_error ('Bij factuurimport is volgende Errormessage gemeld: ' || v_errormsg || CHR (13) || CHR (10) || 'Actie 1: Informeren Facilitor' || CHR (13) || CHR (10) || 'Actie 2: Factuur gewoon oppakken: Aanvullen, doorzetten, etc', POWER(2,8), v_fin_factuur_key, v_perslid_key); v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ; fac.trackaction ('FINUPD', v_fin_factuur_key, v_perslid_key, NULL, v_aanduiding); END IF; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' - ' || v_aanduiding); COMMIT; END; / --- bit 0: bijlage kon niet opgeslagen worden. --- bit 1: niet gevonden orderreferentie --- bit 2: fout in bedrijfsherkenning --- bit 3: overige fout uit import --- bit 4: dubbele factuur --- bit 5: verzamelfactuur --- bit 6: IBAN niet correct --- bit 7: IBAN niet gevuld bij leverancier --- bit 8: Proces fout (Oracle foutmelding) --- bit 9: ontbrekende orderreferentie uit scanning --- bit 10: 3 weg matching maar verplichting niet afgemeld CREATE OR REPLACE VIEW vbxx_v_fac_scan_result_detail AS SELECT f.fin_factuur_key factuur_key, (SELECT MAX(n.fin_factuur_note_omschrijving) FROM fin_factuur_note n WHERE n.fin_factuur_key = f.fin_factuur_key AND n.fin_factuur_note_omschrijving LIKE 'Factuur import:%') || CHR(13) || CHR(10) || fin_factuur_opmerking fin_factuur_opmerking, FAC.gettrackingdate ('FINNEW', f.fin_factuur_key) fin_factuur_aanmaak, bi.foutmelding, b.prs_bedrijf_naam FROM fin_factuur f, (SELECT kf.fin_factuur_key, 'bijlage kon niet opgeslagen worden' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 1) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'niet gevonden orderreferentie' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 2) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'fout in bedrijfsherkenning' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 4) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'overige fout uit import' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 8) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'dubbele factuur' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 16) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'verzamelfactuur' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 32) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'IBAN nummer' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 64) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'IBAN niet ingevuld bij leverancier' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 128) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'proces fout' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 256) <> 0 UNION ALL SELECT kf.fin_factuur_key, 'geen orderreferentie uit scanning' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 512) <> 0 UNION ALL SELECT kf.fin_factuur_key, '3 weg matching maar verplichting niet afgemeld' foutmelding FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND BITAND (FAC.SAFE_TO_NUMBER (fin_kenmerkfactuur_waarde), 1024) <> 0) bi, (SELECT fo.fin_factuur_key, mld_uitvoerende_keys prs_bedrijf_key FROM mld_opdr o, fin_factuur fo WHERE fo.mld_opdr_key = o.mld_opdr_key UNION ALL SELECT fb.fin_factuur_key, bo.prs_bedrijf_key FROM bes_bestelopdr bo, fin_factuur fb WHERE fb.bes_bestelopdr_key = bo.bes_bestelopdr_key UNION ALL SELECT fc.fin_factuur_key, c.cnt_prs_bedrijf_key FROM cnt_contract c, fin_factuur fc WHERE fc.cnt_contract_key = c.cnt_contract_key) fbed, prs_bedrijf b WHERE f.fin_factuur_key = bi.fin_factuur_key AND f.fin_factuur_key = fbed.fin_factuur_key(+) AND fbed.prs_bedrijf_key = b.prs_bedrijf_key(+); CREATE OR REPLACE VIEW vbxx_v_fac_scan_result_trend AS SELECT f.fin_factuur_key factuur_key, FAC.gettrackingdate ('FINNEW', f.fin_factuur_key) fin_factuur_aanmaak, waarde, kfb.fin_kenmerkfactuur_waarde FROM fin_factuur f, (SELECT kf.fin_factuur_key, 1 waarde FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_code = 'FOUTCODE' AND k.fin_kenmerk_verwijder IS NULL AND fin_kenmerkfactuur_waarde <> '0') kff, (SELECT fin_factuur_key, fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur kf, fin_kenmerk k WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key AND k.fin_kenmerk_verwijder IS NULL AND k.fin_kenmerk_code = 'MAREON_BRON') kfb WHERE f.fin_factuur_key = kff.fin_factuur_key(+) AND f.fin_factuur_key = kfb.fin_factuur_key(+) AND fin_factuur_bron = 1; -- YAXX#88421 Mogelijkheden voor fiattering en goedkeuring in Purchase to Pay proces CREATE OR REPLACE VIEW vbxx_v_rap_factuur_verplichting AS SELECT f.fin_factuur_key, f.fin_factuur_datum, f.fin_factuur_boekmaand, (SELECT t.fac_tracking_datum FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_tracking_refkey = f.fin_factuur_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'FINNEW') fin_factuur_aanmaak, fs.fin_factuur_statuses_omschr factuur_status, DECODE(f.fin_factuur_flag, 1, 'Ja', 'Nee') dispuut, (SELECT b.prs_bedrijf_naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = COALESCE (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key)) leverancier, (SELECT r.alg_regio_omschrijving FROM alg_regio r, alg_district d, alg_locatie l WHERE r.alg_regio_key = d.alg_regio_key AND d.alg_district_key = l.alg_district_key AND l.alg_locatie_key = COALESCE (cs.alg_locatie_key, m.mld_alg_locatie_key)) regio, DECODE (o.mld_opdr_key, NULL, 'C' || c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0'), m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr) verplichting, f.fin_factuur_totaal factuurbedrag, COALESCE ( o.mld_opdr_kosten, (SELECT fs.cnt_factuurschema_bedrag FROM cnt_factuurschema fs WHERE fs.cnt_contract_key = c.cnt_contract_key AND fs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand)) verplichting_bedrag, c.cnt_contract_kosten totaal_contract, (SELECT SUM (f.fin_factuur_totaal) FROM fin_factuur f2 WHERE f2.cnt_contract_key = c.cnt_contract_key) gefactureerd_contract FROM fin_factuur f, fin_factuur_statuses fs, cnt_contract c, mld_opdr o, mld_melding m, bes_bestelopdr bo, bes_bestelopdr_item boi, ( SELECT cnt_contract_key, MAX (alg_locatie_key) alg_locatie_key FROM (SELECT cnt_contract_key, cnt_alg_plaats_key alg_locatie_key FROM cnt_contract_plaats cp WHERE cp.cnt_alg_plaats_code = 'L' UNION SELECT cnt_contract_key, alg_locatie_key FROM cnt_contract_plaats cp, alg_gebouw g WHERE cp.cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key = g.alg_gebouw_key) GROUP BY cnt_contract_key) cs WHERE f.cnt_contract_key = c.cnt_contract_key(+) AND c.cnt_contract_key = cs.cnt_contract_key(+) AND f.mld_opdr_key = o.mld_opdr_key(+) AND o.mld_melding_key = m.mld_melding_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+) AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key(+) AND f.fin_factuur_verwijder IS NULL AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key; /* 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