diff --git a/HEIN/hein.sql b/HEIN/hein.sql new file mode 100644 index 000000000..a4a3b04d0 --- /dev/null +++ b/HEIN/hein.sql @@ -0,0 +1,1026 @@ +-- +-- $Id$ +-- +-- Script containing customer specific sql statements for the FACILITOR database + + +DEFINE thisfile = 'hein.sql' +DEFINE dbuser = 'hein' + +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 ------ + +-- Algemene package functies en procedures +CREATE OR REPLACE PACKAGE HEIN +AS + + PROCEDURE set_kenmerk(p_module IN VARCHAR2, + p_kenmerk_key IN NUMBER, + p_link_key IN NUMBER, + p_kenmerk_waarde IN VARCHAR2, + p_history IN NUMBER); + + 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); + +END; +/ + +CREATE OR REPLACE PACKAGE BODY HEIN +AS + + PROCEDURE set_kenmerk(p_module IN VARCHAR2, + p_kenmerk_key IN NUMBER, + p_link_key IN NUMBER, + p_kenmerk_waarde IN VARCHAR2, + p_history IN NUMBER) + AS + v_count NUMBER; + v_niveau VARCHAR2 (1); + BEGIN + CASE p_module + WHEN 'PRS' + THEN + PRS.upsertkenmerk (p_kenmerk_key, p_link_key, p_kenmerk_waarde); + WHEN 'ALG' + THEN + ALG.upsertkenmerk (p_kenmerk_key, p_link_key, p_kenmerk_waarde); + WHEN 'BEZ' + THEN + SELECT COUNT ( * ) + INTO v_count + FROM bez_kenmerkwaarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE bez_kenmerkwaarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + ELSE + UPDATE bez_kenmerkwaarde + SET bez_kenmerkwaarde_waarde = p_kenmerk_waarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO bez_kenmerkwaarde (bez_kenmerk_key, + bez_bezoekers_key, + bez_kenmerkwaarde_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + + WHEN 'MLD' + THEN + -- melding- of opdrachtkenmerk? + SELECT mld_kenmerk_niveau + INTO v_niveau + FROM mld_kenmerk + WHERE mld_kenmerk_key = p_kenmerk_key; + + CASE v_niveau + WHEN 'O' + THEN + MLD.upsertopdrachtkenmerk (p_kenmerk_key, p_link_key, p_kenmerk_waarde); + WHEN 'S' + THEN + MLD.upsertmeldingkenmerk (p_kenmerk_key, p_link_key, p_kenmerk_waarde); + END CASE; + WHEN 'FIN' + THEN + -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt + -- opgeslagen (da's dus redundant..?) + SELECT fin_kenmerk_type + INTO v_niveau + FROM fin_kenmerk + WHERE fin_kenmerk_key = p_kenmerk_key; + + + IF v_niveau = 'F' + THEN + SELECT COUNT ( * ) + INTO v_count + FROM fin_kenmerkfactuur + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE fin_kenmerkfactuur + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + ELSE + UPDATE fin_kenmerkfactuur + SET fin_kenmerkfactuur_waarde = p_kenmerk_waarde + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO fin_kenmerkfactuur (fin_kenmerk_key, + fin_factuur_key, + fin_kenmerkfactuur_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + ELSE + -- Kenmerk bij factuurregel + SELECT COUNT ( * ) + INTO v_count + FROM fin_kenmerkfactregel + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE fin_kenmerkfactregel + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + ELSE + UPDATE fin_kenmerkfactregel + SET fin_kenmerkfactregel_waarde = p_kenmerk_waarde + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key, + fin_factuurregel_key, + fin_kenmerkfactregel_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + END IF; + WHEN 'RES' + THEN + -- res_rsv_ruimte kenmerk + SELECT COUNT ( * ) + INTO v_count + FROM res_kenmerkwaarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE res_kenmerkwaarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + ELSE + UPDATE res_kenmerkwaarde + SET res_kenmerkreservering_waarde = p_kenmerk_waarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO res_kenmerkwaarde (res_kenmerk_key, + res_rsv_ruimte_key, + res_kenmerkreservering_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + END CASE; + END; + + PROCEDURE add_xml_row ( + p_bestand IN VARCHAR2, + p_regel IN VARCHAR2) + AS + v_index NUMBER; + BEGIN + SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1 + INTO v_index + FROM fac_rapport + WHERE fac_rapport_node = p_bestand; + + INSERT INTO fac_rapport ( + fac_rapport_node, + fac_rapport_volgnr, + fac_rapport_regel) + VALUES (p_bestand, + v_index, + p_regel); + END; + + PROCEDURE add_xml_element ( + p_bestand IN VARCHAR2, + p_tag IN VARCHAR2, + p_value IN VARCHAR2) + AS + BEGIN + hein.add_xml_row(p_bestand, + '<' || p_tag || '>' + || xml.char_to_html(p_value) + || ''); + END; +END; +/ + +-- +-- Koppeling met Exact +-- + +-- View om gebouw bij factuurregels te tonen + +CREATE OR REPLACE VIEW hein_v_aanwezigfactuur +( + FIN_FACTUUR_KEY, + FIN_FACTUUR_NR, + FIN_FACTUUR_TOTAAL, + FIN_FACTUUR_TOTAAL_BTW, + MLD_OPDR_KEY, + CNT_CONTRACT_KEY, + BES_BESTELOPDR_KEY, + PRS_PERSLID_KEY_USER, + FIN_FACTUUR_DATUM, + FIN_FACTUUR_BOEKMAAND, + FIN_FACTUUR_DEBITEUR_NR, + PRS_KOSTENSOORT_KEY, + FIN_FACTUUR_OPMERKING, + FIN_FACTUUR_STATUSES_KEY, + FIN_FACTUUR_VERWIJDER +) +AS + SELECT FIN_FACTUUR_KEY, + FIN_FACTUUR_NR, + FIN_FACTUUR_TOTAAL, + FIN_FACTUUR_TOTAAL_BTW, + MLD_OPDR_KEY, + CNT_CONTRACT_KEY, + BES_BESTELOPDR_KEY, + PRS_PERSLID_KEY_USER, + FIN_FACTUUR_DATUM, + FIN_FACTUUR_BOEKMAAND, + FIN_FACTUUR_DEBITEUR_NR, + PRS_KOSTENSOORT_KEY, + FIN_FACTUUR_OPMERKING, + FIN_FACTUUR_STATUSES_KEY, + FIN_FACTUUR_VERWIJDER + FROM fin_factuur + WHERE fin_factuur_verwijder IS NULL AND fin_factuur_statuses_key > 1; + + +CREATE OR REPLACE VIEW hein_v_factuur_gegevens +( + fin_factuur_key, + opdracht_id, + fin_factuur_datum, + fin_factuur_nr, + prs_bedrijf_key, + dagboek, + fin_factuurregel_totaal, + fin_factuurregel_btw, + fin_btwtabelwaarde_code, + fin_btwtabelwaarde_key, + fin_factuurregel_nr, + fin_factuurregel_key, + fin_factuur_debiteur_nr, + fin_factuur_opmerking, + fin_factuur_boekmaand, + opdr_datum, + prs_kostensoort_oms, + prs_kostensoort_refcode, + prs_kostensoort_opmerking, + prs_kostensoort_key, + prs_kostenplaats_nr, + mld_opdr_key, + cnt_contract_key, + bes_bestelopdr_key, + fin_factuur_statuses_key, + lev_kpn +) +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 + WHERE kl.prs_kenmerk_key = 1000 -- Bedrijf is onderdeel van Vebego + AND kl.prs_link_key = + COALESCE ( + b_c.prs_bedrijf_key, + COALESCE (b_o.prs_bedrijf_key, + b_b.prs_bedrijf_key))), + '1', 63, + 62) + dagboek, + fr.fin_factuurregel_totaal, + ROUND ( + fr.fin_factuurregel_totaal + * DECODE (btw.fin_btwtabelwaarde_verlegd, + 1, 0, + btw.fin_btwtabelwaarde_perc / 100), + 2) + fin_factuurregel_btw, + btw.fin_btwtabelwaarde_code, + btw.fin_btwtabelwaarde_key, + fr.fin_factuurregel_nr, + fr.fin_factuurregel_key, + f.fin_factuur_debiteur_nr, + f.fin_factuur_opmerking, + f.fin_factuur_boekmaand, + COALESCE ( + o.mld_opdr_datumbegin, + COALESCE (c.cnt_contract_looptijd_tot, + bo.bes_bestelopdr_datum)), + prs_kostensoort_oms, + k.prs_kostensoort_refcode, + k.prs_kostensoort_opmerking, + k.prs_kostensoort_key, + 'Heineken' prs_kostenplaats_nr, -- Let op: nog niet duidelijk of dit de fixed waarde moet zijn + 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) + AND f.fin_factuur_statuses_key = 6) + fin_factuur_statuses_key, + lk.prs_kostenplaats_nr + lev_kpn + FROM fin_factuur f, + fin_factuurregel fr, + fin_btwtabelwaarde btw, + mld_opdr o, + mld_typeopdr ot, + cnt_contract c, + bes_bestelopdr bo, + (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_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 c.prs_kostensoort_key = k.prs_kostensoort_key(+) + AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+) + AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+) + AND f.fin_factuur_verwijder IS NULL; + + + +CREATE OR REPLACE VIEW hein_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 hein_v_export_exact_62 ( + result, + result_order + ) +AS + SELECT result, result_order + FROM hein_v_export_exact_xml; + +CREATE OR REPLACE VIEW hein_v_export_exact_63 ( + result, + result_order + ) +AS + SELECT result, result_order + FROM hein_v_export_exact_xml; + + +CREATE OR REPLACE VIEW hein_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 +) +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 (DECODE(b.prs_leverancier_nr, '801176', 'YAS', b.prs_bedrijf_naam)), 1, 3) + || ',' + || SUBSTR(fin_factuur_boekmaand, 6,2) + || ',' + || opdracht_id + || ',' + || DECODE(fg.cnt_contract_key, NULL, 'variabel', LOWER(prs_kostensoort_opmerking)) + oms_regel, + '74900' reknr, + prs_kostenplaats_nr + kstplcode, + '01' kstdrcode, + fin_btwtabelwaarde_code + btw_code, + fg.dagboek, + SUBSTR(UPPER(DECODE(b.prs_leverancier_nr, '801176', 'YAS', b.prs_bedrijf_naam)),1,3) || ',' || -- Erfenis uit HEIN. Hebben we dit nu ook nodig? + SUBSTR(fin_factuur_boekmaand,6,2) || + DECODE(fg.cnt_contract_key, NULL, ',variabel', + ','|| LOWER(prs_kostensoort_opmerking)) oms_kop, + fin_factuur_debiteur_nr + FROM ( SELECT g.fin_factuur_key, + opdracht_id, + fin_factuur_datum, + fin_factuur_nr, + prs_bedrijf_key, + fin_factuur_debiteur_nr, + fin_factuur_opmerking, + SUM (fin_factuurregel_totaal) + bedrag, + SUM (fin_factuurregel_totaal + fin_factuurregel_btw) + bedrag_incl, + fin_btwtabelwaarde_code, + prs_kostensoort_oms, + prs_kostensoort_refcode, + prs_kostensoort_opmerking, + mld_opdr_key, + cnt_contract_key, + prs_kostenplaats_nr, + fin_factuur_boekmaand, + g.dagboek + FROM hein_v_factuur_gegevens g, + hein_exp_factuur e + WHERE fin_factuur_statuses_key = 6 + AND g.fin_factuur_key = e.fin_factuur_key + AND g.dagboek = e.dagboek + GROUP BY g.fin_factuur_key, + opdracht_id, + fin_factuur_datum, + fin_factuur_nr, + prs_bedrijf_key, + fin_factuur_debiteur_nr, + fin_factuur_opmerking, + fin_btwtabelwaarde_code, + prs_kostensoort_oms, + prs_kostensoort_refcode, + prs_kostensoort_opmerking, + mld_opdr_key, + cnt_contract_key, + prs_kostenplaats_nr, + fin_factuur_boekmaand, + g.dagboek) fg, + prs_bedrijf b + WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key + AND b.prs_leverancier_nr IS NOT NULL; + +-- rapport voor controle door de financiele afdeling voordat definitief geboekt wordt. +CREATE OR REPLACE VIEW hein_v_fin_factuur_controle +AS + SELECT prs_leverancier_nr, + boekstuknummer, + dagboek, + boekjaar, + periode, + gefiatteerd, + onzeref, + naamcrediteur, + omschrijving, + SUM (fin_factuurregel_totaal) bedrag, + SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedragincl, + uwref, + invoerder, + reknr + FROM (SELECT prs_leverancier_nr, + bsn.boekstuknummer, + dagboek, + SUBSTR (fg.fin_factuur_boekmaand, 1, 4) + boekjaar, + SUBSTR (fg.fin_factuur_boekmaand, 6, 2) + periode, + ( SELECT LISTAGG ( + pf.prs_perslid_naam_full + || ' ' + || TO_CHAR (t.fac_tracking_datum, + 'dd-mm-yyyy hh24:mi'), + CHR (10)) + WITHIN GROUP (ORDER BY fac_tracking_datum) + AS fiatteur + FROM fac_tracking t, prs_v_perslid_fullnames_all pf + WHERE t.fac_srtnotificatie_key IN (164, 165) -- FINFOK, FINGOE + AND t.prs_perslid_key = pf.prs_perslid_key + AND t.fac_tracking_refkey = fg.fin_factuur_key + GROUP BY fac_tracking_refkey) + gefiatteerd, + fg.fin_factuur_key + OnzeRef, + prs_bedrijf_naam + NaamCrediteur, + SUBSTR (UPPER (b.prs_bedrijf_naam), 1, 3) + || ',' + || SUBSTR (fin_factuur_boekmaand, 6, 2) + || ',' + || opdracht_id + || ',' + || fin_factuur_opmerking + omschrijving, + fin_factuurregel_totaal, + fin_factuurregel_btw, + '74900' reknr, + fg.fin_factuur_nr || ' ' || fg.fin_factuur_debiteur_nr + uwref, + (SELECT pf.prs_perslid_naam_full + FROM fac_tracking t, prs_v_perslid_fullnames_all pf + WHERE t.fac_srtnotificatie_key = 162 -- FINNEW + AND t.fac_tracking_refkey = fg.fin_factuur_key + AND t.prs_perslid_key = pf.prs_perslid_key) + invoerder + FROM hein_v_factuur_gegevens fg, + prs_bedrijf b, + (SELECT fin_factuur_key, + fin_kenmerkfactuur_waarde boekstuknummer + FROM fin_kenmerkfactuur kf + WHERE fin_kenmerk_key = 1) bsn + WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key + AND fg.fin_factuur_key = bsn.fin_factuur_key(+)) +GROUP BY prs_leverancier_nr, + boekstuknummer, + dagboek, + boekjaar, + periode, + gefiatteerd, + onzeref, + naamcrediteur, + omschrijving, + reknr, + uwref, + invoerder; + + +-- Procedure om alle facturen te exporteren naar exact. +CREATE OR REPLACE PROCEDURE hein_select_exact_xml (p_applname IN VARCHAR2, + p_applrun IN VARCHAR2, + p_dagboek IN VARCHAR2 +) +AS + CURSOR c(c_dagboek VARCHAR2) + IS + SELECT crdnr, factuur_nr, MAX(datum) datum, MAX(oms_kop) oms_kop + FROM hein_v_bron_export_exact_xml + WHERE c_dagboek = dagboek + GROUP BY crdnr, factuur_nr; + + CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2) + IS + SELECT * + FROM hein_v_bron_export_exact_xml + WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr') + AND factuur_nr = c_factuur_nr; + + v_order_count NUMBER; + v_amount_sum NUMBER(10,2); + v_amount_sum_incl NUMBER(10,2); + v_count NUMBER; + v_sub_count NUMBER; + v_bestand VARCHAR2(12); + v_boekstuknummer NUMBER; + v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE; + v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE; + +BEGIN + + v_order_count := 0; + v_amount_sum := 0; + v_amount_sum_incl := 0; + v_count := 0; + v_bestand := 'EXACT'; + v_crdnr := 'Q'; + v_factuur_nr := 'Q'; + + -- Eerst opruiming + DELETE FROM imp_log + WHERE imp_log_applicatie = p_applname; + + DELETE fac_rapport + WHERE fac_rapport_node = v_bestand; + + -- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan + DELETE fin_kenmerkfactuur kf + WHERE fin_kenmerk_key = 1 + AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek + AND fin_factuur_key IN (SELECT fin_factuur_key + FROM fin_factuur + WHERE fin_factuur_statuses_key <> 7); + + -- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export) + -- deze keys gebruikt kunnen worden. + DELETE hein_exp_factuur + WHERE dagboek = p_dagboek; + + INSERT INTO hein_exp_factuur (fin_factuur_key, dagboek) + ( SELECT DISTINCT fg.fin_factuur_key, fg.dagboek + FROM hein_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. + ); + + SELECT MAX(fin_kenmerkfactuur_waarde) + INTO v_boekstuknummer + FROM fin_kenmerkfactuur + WHERE fin_kenmerk_key = 1 + AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY') + AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek; + + IF v_boekstuknummer IS NULL + THEN + v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || p_dagboek || '0000'); + END IF; + + -- header + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.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; + + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'Description', rec.oms_kop); + hein.add_xml_element (v_bestand, 'Date', rec.datum); + hein.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') ); + hein.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 boestuknummer aanmaken + hein.set_kenmerk('FIN', 1, rec1.fin_factuur_key, v_boekstuknummer, 0); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'Date', rec1.datum); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'Description', rec1.oms_regel); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'Reference', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr ); + hein.add_xml_element (v_bestand, 'InvoiceNumber', rec1.fin_factuur_key); -- of moet dit v_boekstuknummer worden???? + hein.add_xml_row (v_bestand, ''); + hein.add_xml_row (v_bestand, ''); + hein.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr); + hein.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') ); + hein.add_xml_row (v_bestand, ''); + hein.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; + hein.add_xml_row (v_bestand, ''); + v_order_count := v_order_count + 1; + END; + END LOOP; + + hein.add_xml_row (v_bestand, ''); + hein.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 PROCEDURE hein_select_exact_62 (p_applname IN VARCHAR2, + p_applrun IN VARCHAR2 +) +AS +BEGIN + hein_select_exact_xml (p_applname, p_applrun, '62'); +END; +/ + +CREATE OR REPLACE PROCEDURE hein_select_exact_63 (p_applname IN VARCHAR2, + p_applrun IN VARCHAR2 +) +AS +BEGIN + hein_select_exact_xml (p_applname, p_applrun, '63'); +END; +/ + +-- Procedure om alle facturen te exporteren naar exact. +CREATE OR REPLACE PROCEDURE hein_export_exact_62 ( + p_applname IN VARCHAR2, + p_applrun IN VARCHAR2, + p_filedir IN VARCHAR2, + p_filename IN VARCHAR2 +) +AS + v_errormsg VARCHAR (200); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); +BEGIN + -- Verwerk actie direct starten na de EXPORT_EXACT + -- INSERT INTO imp_schedule (imp_schedule_name) VALUES ('VERWERK_EXACT_62'); + NULL; +END; +/ + +-- Procedure om alle facturen te exporteren naar exact. +CREATE OR REPLACE PROCEDURE hein_export_exact_63 ( + p_applname IN VARCHAR2, + p_applrun IN VARCHAR2, + p_filedir IN VARCHAR2, + p_filename IN VARCHAR2 +) +AS + v_errormsg VARCHAR (200); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); +BEGIN + -- Verwerk actie direct starten na de EXPORT_EXACT + -- INSERT INTO imp_schedule (imp_schedule_name) VALUES ('VERWERK_EXACT_63'); + NULL; +END; +/ + +CREATE OR REPLACE VIEW hein_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 VIEW hein_v_export_verwerk_exact_62 ( + result, + result_order + ) +AS + SELECT result, result_order + FROM hein_v_export_verwerk_exact; + +CREATE OR REPLACE VIEW hein_v_export_verwerk_exact_63 ( + result, + result_order + ) +AS + SELECT result, result_order + FROM hein_v_export_verwerk_exact; + +CREATE OR REPLACE PROCEDURE hein_select_verwerk_exact ( + p_applname IN VARCHAR2, + p_applrun IN VARCHAR2, + p_dagboek IN VARCHAR2 +) +AS + CURSOR c_fact + IS + SELECT DISTINCT f.fin_factuur_key + FROM hein_exp_factuur f + , hein_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; + + v_errormsg VARCHAR (200); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_aanvrager NUMBER; + v_bestelling_key NUMBER; + v_bestand VARCHAR2(12); + v_logdate DATE; + v_volgnr NUMBER; +BEGIN + v_errormsg := 'Geen akties'; + v_aanvrager := 3; -- Facilitor + v_logdate := SYSDATE; + + v_bestand := 'VW_EXACT'; + v_volgnr := 1; + -- Eerst opruiming + DELETE fac_rapport + WHERE fac_rapport_node = v_bestand; + + FOR rec1 IN c_fact + LOOP + BEGIN + UPDATE fin_factuur f + SET fin_factuur_statuses_key = 7 + WHERE f.fin_factuur_key = rec1.fin_factuur_key; + + fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL); + + INSERT INTO fac_rapport (fac_rapport_node, + fac_rapport_volgnr, + fac_rapport_regel) + VALUES (v_bestand, + v_volgnr, + rec1.fin_factuur_key); + + v_volgnr := v_volgnr + 1; + END; + END LOOP; + -- verwijder de enties uit de tijdelijke tabel. + DELETE hein_exp_factuur WHERE dagboek = p_dagboek; +END; +/ + + +CREATE OR REPLACE PROCEDURE hein_select_verwerk_exact_62 ( + p_applname IN VARCHAR2, + p_applrun IN VARCHAR2 +) +AS +BEGIN + hein_select_verwerk_exact (p_applname, p_applrun, '62'); +END; +/ + +CREATE OR REPLACE PROCEDURE hein_select_verwerk_exact_63 ( + p_applname IN VARCHAR2, + p_applrun IN VARCHAR2 +) +AS +BEGIN + hein_select_verwerk_exact (p_applname, p_applrun, '63'); +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