-- -- $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); PROCEDURE fin_set_approver (p_factuur_key IN NUMBER); 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; 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_opdr_key mld_opdr.mld_opdr_key%TYPE; v_contract_key cnt_contract.cnt_contract_key%TYPE; v_bestelopdr_key bes_bestelopdr.bes_bestelopdr_key%TYPE; v_srtdiscipline_key ins_tab_discipline.ins_srtdiscipline_key%TYPE; v_perslid_key_beh prs_perslid.prs_perslid_key%TYPE; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_count := 0; v_perslid_key_beh := 5141; -- Michael Grandia v_errorhint := 'Bepaal type factuur'; -- Laten we eens eerst kijken of we het over een contract of een opdracht hebben SELECT mld_opdr_key, cnt_contract_key, bes_bestelopdr_key, fin_factuur_statuses_key, fin_factuur_totaal INTO v_opdr_key, v_contract_key, v_bestelopdr_key, v_factuur_statuses_key, v_factuur_totaal FROM fin_factuur WHERE fin_factuur_key = p_factuur_key; UPDATE fin_factuur SET prs_perslid_key_goedkeur = v_perslid_key_beh WHERE fin_factuur_key = p_factuur_key; -- We kennen op dit moment nog geen functionaliteit voor contracten en bestelopdrachten IF v_opdr_key IS NOT NULL THEN IF v_factuur_statuses_key = 2 -- ingevoerd THEN -- Opdrachten voor preventief onderhoud worden niet door de locatieverantwoordelijke -- personen goedgekeurd. Deze gaan direct naar Joost v_errorhint := 'Controleer rechten opdracht'; SELECT d.ins_srtdiscipline_key, f.prs_perslid_key_goedkeur, pf.prs_perslid_naam_friendly INTO v_srtdiscipline_key, v_perslid_key_goedkeur, v_perslid_naam_goedkeur FROM mld_opdr o, fin_factuur f, prs_v_perslid_fullnames_all pf, mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE f.mld_opdr_key = o.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 = d.ins_discipline_key AND f.fin_factuur_key = p_factuur_key AND f.prs_perslid_key_goedkeur = pf.prs_perslid_key; IF v_srtdiscipline_key = 41 -- preventief onderhoud THEN -- Als status van de factuur nog ingevoerd is dan zetten we de status naar Ter goedkeuring (5) v_errorhint := 'Zet de status naar Ter Goedkeuring'; fac.trackaction ( 'FINFOK', p_factuur_key, 3, NULL, 'Expliciete goedkeuring door aangewezen goedkeurder: ' || v_perslid_naam_goedkeur); UPDATE fin_factuur SET fin_factuur_statuses_key = 5 WHERE fin_factuur_key = p_factuur_key; END IF; END IF; 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 ('YASK.fin_set_approver', 'E', v_errormsg || ' (' || p_factuur_key || ')' , v_errorhint); END; END; / -- -- Personeelskoppeling met Heineken -- CREATE OR REPLACE PROCEDURE hein_import_perslid (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR (255); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN v_seq_of_columns := '13;0;0;0;0;0;5;18;17;15;' -- v_alg_locatie_code 1 -- v_alg_gebouw_code 2 -- v_alg_verdieping_volgnr 3 -- v_alg_ruimte_nr 4 -- v_prs_werkplek_volgnr 5 -- v_prs_werkplek_omschrijving 6 -- v_prs_afdeling_naam 7 -- v_prs_perslid_naam 8 -- v_prs_perslid_tussenvoegsel 9 -- v_prs_perslid_voornaam 10 || '16;0;0;0;0;0;0;4;0;1;' -- v_prs_perslid_voorletters 11 -- v_prs_perslid_partner_naam 12 -- v_prs_perslid_partner_tussenv 13 -- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken -- 2 personen die de geboortenaam van de partner willen gebruiken -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken -- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default -- v_prs_perslid_telefoonnr 16 -- v_prs_perslid_mobiel 17 -- v_prs_perslid_email 18 -- v_prs_perslid_dienstverband 19 -- v_prs_perslid_nr 20 || '8;3;0;0;0;0;6;9;10;12;' -- v_prs_srtperslid_omschrijving 21 -- v_prs_perslid_oslogin 22 -- v_prs_perslid_wachtwoord 23 -- v_prs_perslid_titel 24 -- v_prs_perslid_apikey 25 -- v_dummy 26 -- v_prs_kenmerk1 27 -- v_prs_kenmerk2 28 -- v_prs_kenmerk3 29 -- v_prs_kenmerk4 30 || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0'; prs.import_perslid(p_import_key, v_seq_of_columns, 'Pers.no.;Personnel Number;ID/number;E-mail address;Cost ctr;Cost Center;Position;Position;Org.unit;Organizational Unit;SPLCODE;Standplaatscodes;CoCd;Company Code;Known as;Initials;Name prefix;Last name%'); -- Uitleg van de kenmerkvelden: -- kenmerk1: Afdeling omschrijving -- kenmerk2: Kostenplaatscode -- kenmerk3: Kostenplaatsomschrijving -- kenmerk4: Standplaats -- kenmerk5: Default taal DELETE fac_imp_organisatie; INSERT INTO fac_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_nr) SELECT DISTINCT 'Heineken', prs_afdeling_naam, prs_kenmerk1, prs_afdeling_naam FROM fac_imp_perslid WHERE fac_import_key = p_import_key; DELETE fac_imp_kpn; -- Gebouwkostenplaatsen gaan we niet opnieuw inlezen. Deze zijn aan een andere groep gekoppeld en men heeft -- in Facilitor de naam van deze kostenplaatsen aangepast. INSERT INTO fac_imp_kpn (prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_kostenplaatsgrp_key, prs_kostenplaats_module) SELECT DISTINCT prs_afdeling_naam, prs_kenmerk1, 21, 'PRS' FROM fac_imp_perslid WHERE fac_import_key = p_import_key AND UPPER(prs_afdeling_naam) <> 'ONBEKEND' AND prs_afdeling_naam NOT IN (SELECT prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaatsgrp_key = 1); END; / CREATE OR REPLACE PROCEDURE hein_update_perslid (p_import_key IN NUMBER) IS -- personen pas verwijderen als ze langer dan 80 dagen bestaan. Hiermee voorkomen we dat nieuw handmatig ingevoerde -- personen direct verwijderd worden, omdat HR data altijd wat ouder is. CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, p.prs_perslid_oslogin FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf WHERE p.prs_perslid_nr = i.prs_perslid_nr(+) AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_nr IS NOT NULL AND i.prs_perslid_nr IS NULL AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_aanmaak < SYSDATE -80; v_bedrijf_key NUMBER (10); v_afdeling_key1 NUMBER (10); v_afdeling_key2 NUMBER (10); v_kostenplaats_key NUMBER (10); v_kpn_nr_prev VARCHAR2 (20); v_aanduiding VARCHAR2 (100); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_aanduiding := ''; fac_update_kpn (p_import_key); fac_update_organisatie (p_import_key); SELECT COUNT(*) INTO v_count FROM fac_imp_perslid; IF v_count > 500 THEN -- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen. -- Nu komt het ook regelmatig voor dat mensen een ander personeelsnummer krijgen terwijl ze de login behouden. Deze -- mensen proberen we om te hangen en het personeelsnummer aan te passen. FOR rec IN c_del LOOP BEGIN v_errorhint := 'Verwijderen persoon: ' || rec.prs_perslid_key || '-' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin; prs.delete_perslid (p_import_key, rec.prs_perslid_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; END LOOP; END IF; prs.update_perslid (p_import_key, 'NR', NULL); COMMIT; 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', v_aanduiding || v_errormsg, v_errorhint); 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, preventief, 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, '454.100' prs_kostenplaats_nr, -- Let op: Vaste waarde, niet overgenomen uit de kostenplaatsen van Heineken 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, DECODE((SELECT ins_srtdiscipline_prefix FROM ins_srtdiscipline sd, mld_discipline d, mld_stdmelding std, mld_melding m WHERE o.mld_melding_key = m.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), 'P', 1, 0) preventief, 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 AND NOT EXISTS (SELECT 1 -- We handelen geen facturen af op vrumona locatie bunnik FROM mld_melding m WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = 21); CREATE OR REPLACE VIEW hein_v_factuur_gegevens_notes ( fin_factuur_key, fin_factuur_datum, prs_bedrijf_naam, prs_leverancier_nr, fin_factuur_nr, discipline, onderwerp, alg_locatie_key, alg_locatie_code, alg_locatie_omschrijving, bron, fin_factuur_opmerking, verplichting_nr, schatting, totaal, fin_factuur_totaal, fin_factuur_totaal_incl, verplichting_status, fin_factuur_statuses_omschr, kostenplaats, boekstukNr, bijlage, notities, binnen_budget, afw_kostenplaats ) AS SELECT fc.fin_factuur_key, fc.fin_factuur_datum, uitv.prs_bedrijf_naam, uitv.prs_leverancier_nr, fc.fin_factuur_nr, co.discipline, co.onderwerp, l.alg_locatie_key, l.alg_locatie_code, l.alg_locatie_omschrijving, CASE fc.fin_factuur_bron WHEN 0 THEN 'Handmatig' WHEN 1 THEN 'Excel' ELSE 'Mail' END bron, fc.fin_factuur_opmerking, co.contract_nr, co.materiaal schatting, co.totaal, fc.fin_factuur_totaal, fc.fin_factuur_totaal + fc.fin_factuur_totaal_btw, co.status verplichting_status, stat.fin_factuur_statuses_omschr, (SELECT kost.prs_kostenplaats_nr FROM prs_kostenplaats kost WHERE kost.prs_kostenplaats_key = co.kost_key) kostenplaats, (SELECT fkenmerk.fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur fkenmerk WHERE fkenmerk.fin_factuur_key = fc.fin_factuur_key AND fkenmerk.fin_kenmerk_key IN (1)) boekstukNr, (SELECT fkenmerk.fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur fkenmerk WHERE fkenmerk.fin_factuur_key = fc.fin_factuur_key AND fkenmerk.fin_kenmerk_key IN (2)) bijlage, (SELECT LISTAGG ( TO_CHAR (notes.fin_factuur_note_aanmaak, 'DD-MM-YYYY') || ':' || CHR (13) || CHR (10) || notes.fin_factuur_note_omschrijving, CHR (13)|| CHR (10)) WITHIN GROUP (ORDER BY notes.fin_factuur_note_key) FROM fin_factuur_note notes WHERE notes.fin_factuur_key = fc.fin_factuur_key) notes, DECODE(SIGN(COALESCE(co.totaal,0) - fc.fin_factuur_totaal), -1, 'Nee', 'Ja') binnen_budget, afw_kostenplaats FROM (SELECT f.fin_factuur_key fin_key, c.cnt_prs_bedrijf_key bedr_key, dis.ins_discipline_omschrijving discipline, 'C' ||c.cnt_contract_key || '.' || c.cnt_contract_versie contract_nr, NULL materiaal, NULL totaal, c.prs_kostenplaats_key kost_key, NULL status, c.cnt_contract_omschrijving onderwerp, NULL alg_locatie_key, NULL afw_kostenplaats FROM cnt_contract c, fin_factuur f, ins_tab_discipline dis WHERE c.cnt_contract_key = f.cnt_contract_key AND dis.ins_discipline_key = c.ins_discipline_key UNION ALL SELECT f.fin_factuur_key fin_key, o.mld_uitvoerende_keys bedr_key, 'Opdracht ' || sm.mld_stdmelding_omschrijving discipline, srt.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr opdr_nr, o.mld_opdr_materiaal materiaal, o.mld_opdr_kosten totaal, o.prs_kostenplaats_key kost_key, stat.mld_statusopdr_omschrijving status, m.mld_melding_onderwerp onderwerp, m.mld_alg_locatie_key, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 21 -- afwijkende kostenplaats AND mld_melding_key = m.mld_melding_key) afw_kostenplaats FROM mld_opdr o, fin_factuur f, mld_melding m, mld_stdmelding sm, mld_statusopdr stat, ins_tab_discipline dis, ins_srtdiscipline srt WHERE o.mld_opdr_key = f.mld_opdr_key AND m.mld_melding_key = o.mld_melding_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND dis.ins_discipline_key= sm.mld_ins_discipline_key AND srt.ins_srtdiscipline_key = dis.ins_srtdiscipline_key AND stat.mld_statusopdr_key = o.mld_statusopdr_key) co, fin_factuur fc, prs_bedrijf uitv, alg_locatie l, fin_factuur_statuses stat WHERE fc.fin_factuur_key = co.fin_key AND uitv.prs_bedrijf_key = co.bedr_key AND co.alg_locatie_key = l.alg_locatie_key(+) AND stat.fin_factuur_statuses_key = fc.fin_factuur_statuses_key AND fc.fin_factuur_verwijder IS NULL; CREATE OR REPLACE VIEW hein_v_factuur_gegevens_bi AS SELECT f.fin_factuur_key, mo.opdracht_uitvoerende, f.fin_factuur_nr, mo.opdracht_nummer, mo.opdracht_materiaal, mo.opdracht_kosten, mo.opdracht_status, mo.melding_locatie, mo.melding_gebouw, mo.kostensoortgroep, (SELECT MAX(prs_kostensoort_refcode) || '-' || MAX(prs_kostensoort_opmerking) FROM prs_kostensoort ks WHERE REPLACE(mo.kostensoort, 'S-') = prs_kostensoort_refcode) kostensoort, (SELECT MAX(prs_kostenplaats_nr) || ' ' || MAX(prs_kostenplaats_omschrijving) FROM prs_kostenplaats k WHERE mo.kostenplaats = prs_kostenplaats_nr) kostenplaats, mo.soortmelding, mo.productgroep, mo.subproductgroep, mo.sla_accpturen, mo.plan_uitvoertijd_sla, mo.melding_einddatum_std, mo.melding_datum, mo.melding_afgemeld, mo.onderwerp, mo.vomschrijving, mo.accept_sla_dagen, mo.accept_sla_uren, mo.afspraak_sla_dagen, mo.accept_sla_optijd, mo.uitvoering_sla_dagen, mo.uitvoering_sla_uren, mo.uitvoering_sla_optijd, mo.afspraak_sla_optijd, mo.opdracht_kostenplaats, mo.opdracht_kostenplaats_oms, mo.opdracht_datum, mo.opdracht_lev_doorloopuren, mo.opdracht_lev_doorloopdagen, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 21 -- afwijkende kostenplaats AND mld_melding_key = melding_key) afw_melding_kostenplaats, f.datum_goedgekeurd factuur_goedgekeurd, f.fin_factuur_statuses_omschr factuur_status, -- De rapportagemaand is CASE WHEN TO_NUMBER(TO_CHAR(f.datum_goedgekeurd, 'DD')) < 15 THEN TO_CHAR(ADD_MONTHS(f.datum_goedgekeurd, -1), 'YYYY-MM') ELSE TO_CHAR(f.datum_goedgekeurd, 'YYYY-MM') END rapportagemaand, mo.melding_status, m.mld_melding_afgerond melding_afgerond, mo.meldingnummer, mo.melding_key, f.fin_factuur_totaal factuur_totaal, f.fin_factuur_totaal + fin_factuur_totaal_btw factuur_totaal_incl, opdracht_afgemeld, opdracht_acceptdatum, mld.getopdrachtstatusdate (mo.opdracht_key, 9) opdracht_afgerond, DECODE(mo.opdracht_key, NULL, NULL, FLX.getflex ('OPD', 141, mo.opdracht_key)) afwijkende_kpn, fac.datumtijdplusuitvoertijd ( mld_opdr_datumbegin, (SELECT bdl.prs_bdl_t_uitvoertijd.tijdsduur FROM prs_bedrijfdienstlocatie bdl WHERE bdl.prs_dienst_key = std.prs_dienst_key AND bdl.prs_bedrijf_key = o.mld_uitvoerende_keys AND bdl.alg_locatie_key = m.mld_alg_locatie_key), 'D') uitvoerders_sla -- voorlopig ondersteunen we alleen een uitvoertijd in dagen op een op locatie gescopede afspraak. FROM (SELECT mld_opdr_key, fin_factuur_key, fin_factuur_nr, fin_factuur_totaal, fin_factuur_totaal_btw, (SELECT MAX(fac_tracking_datum) FROM fac_tracking t WHERE fac_srtnotificatie_key = 165 -- FINGOE AND t.fac_tracking_refkey = fin_factuur_key) datum_goedgekeurd, fin_factuur_statuses_omschr FROM fin_factuur fa, fin_factuur_statuses fs WHERE fin_factuur_verwijder IS NULL AND fa.fin_factuur_statuses_key = fs.fin_factuur_statuses_key) f, mld_v_udr_meldingopdracht mo, mld_melding m, mld_opdr o, mld_stdmelding std WHERE mo.opdracht_key = f.mld_opdr_key(+) AND m.mld_stdmelding_key = std.mld_stdmelding_key AND mo.melding_key = m.mld_melding_key AND mo.opdracht_key = o.mld_opdr_key; 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, DECODE(preventief, 1, '75301', '74900') reknr, prs_kostenplaats_nr kstplcode, DECODE(preventief, 1,'00','10') 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, preventief, 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, preventief, 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; v_bijlagen_key NUMBER; v_bijlagen_filename FAC_BIJLAGEN.FAC_BIJLAGEN_FILENAME%TYPE; v_guid VARCHAR2(50); 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, ''); 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 = 2; IF v_bijlagen_key IS NOT NULL AND v_sub_count = 1 THEN SELECT fac_bijlagen_filename INTO v_bijlagen_filename FROM fac_v_bijlagen WHERE fac_bijlagen_key = v_bijlagen_key; v_guid := sys_guid(); hein.add_xml_row (v_bestand, ''); hein.add_xml_row (v_bestand, ''); hein.add_xml_element (v_bestand, 'Subject', xml.char_to_html(v_boekstuknummer)); hein.add_xml_element (v_bestand, 'OurRef', xml.char_to_html(v_boekstuknummer)); hein.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr); hein.add_xml_row (v_bestand, ''); hein.add_xml_element (v_bestand, 'FCLTattachment', v_bijlagen_key); hein.add_xml_row (v_bestand, ''); END IF; 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; / CREATE OR REPLACE PROCEDURE HEIN_IMPORT_FIN_FACTUUR_MARX(p_import_key IN NUMBER) AS BEGIN vbxx_import_fin_factuur_marx(p_import_key); END; / CREATE OR REPLACE PROCEDURE HEIN_UPDATE_FIN_FACTUUR_MARX(p_import_key IN NUMBER) AS CURSOR set_appr(v_import_key NUMBER) IS SELECT f.fin_factuur_key fin_factuur_key FROM fac_imp_factuur i, fin_factuur f WHERE fac_import_key=v_import_key AND f.fin_factuur_key=i.fin_factuur_key; BEGIN vbxx_update_fin_factuur_marx(p_import_key); FOR rec IN set_appr(p_import_key) LOOP hein.fin_set_approver(rec.fin_factuur_key); END LOOP; 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