-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database -- -- Met de procedure twyn_delete_deelproject() kan een deelproject in zijn geheel worden verwijderd. -- parameters: p_deelproject_key De key van het deelproject dat verwijderd moet worden. -- p_alleen_fin Door voor deze parameter TRUE mee te geven wordt alleen de -- financiele data verwijderd (bedrijven, facturen, opdrachten, mutaties, budgetten) -- Het deelproject zelf blijft bestaan. -- -- Dit script bevat ook de procedures voor de TWYN-rapportages: -- twyn_v_detailoverzicht -- twyn_v_contract_rubriek -- twyn_v_contr_fact_bedrijf -- DEFINE thisfile = 'TWYN_PAC.SQL' DEFINE dbuser = '^TWYN' DEFINE custid = 'TWYN' 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 ------ -- -- Eigen logfile voor BGT -- CREATE OR REPLACE PROCEDURE twyn_log ( p_actie IN VARCHAR2 , p_level IN VARCHAR2 , p_msg IN VARCHAR2 , p_disc_key IN NUMBER DEFAULT NULL , p_prj_key IN NUMBER DEFAULT NULL , p_rub_key IN NUMBER DEFAULT NULL , p_grp_key IN NUMBER DEFAULT NULL , p_srt_key IN NUMBER DEFAULT NULL , p_bgt_key IN NUMBER DEFAULT NULL , p_mut_key IN NUMBER DEFAULT NULL , p_opdr_key IN NUMBER DEFAULT NULL , p_fact_key IN NUMBER DEFAULT NULL , p_bedr_key IN NUMBER DEFAULT NULL , p_kpls_key IN NUMBER DEFAULT NULL , p_kgrp_key IN NUMBER DEFAULT NULL ) AS v_volgnr NUMBER(10); BEGIN SELECT COALESCE(MAX(volgnr), 0) + 1 INTO v_volgnr FROM twyn_bgtlog; -- INSERT INTO twyn_bgtlog VALUES ( v_volgnr , p_actie , p_level , SYSDATE , p_msg , p_disc_key, p_prj_key, p_rub_key, p_grp_key, p_srt_key , p_bgt_key, p_mut_key , p_opdr_key, p_fact_key, p_bedr_key , p_kpls_key, p_kgrp_key ); -- COMMIT; END twyn_log; / -- -- -- CREATE OR REPLACE PROCEDURE twyn_delete_deelproject ( p_deelproject_key IN NUMBER , p_alleen_fin IN BOOLEAN DEFAULT FALSE ) AS -- Verwijder het deelproject met bgt_project_key = n. -- Met parameter p_alleen_fin worden alleen de budget- en contractgegevens verwijderd. -- Default is het hele deelproject verwijderen, dus ook kostenplaatsen, kosten- rubriek, soortgrp en soort. v_delete_str VARCHAR2 (100) := 'DELETE prj=' || TO_CHAR(p_deelproject_key); v_err_count NUMBER; PROCEDURE log_info( p_code IN VARCHAR2 DEFAULT NULL , p_msg IN VARCHAR2 DEFAULT NULL , p_prj_key IN NUMBER DEFAULT NULL , p_rub_key IN NUMBER DEFAULT NULL , p_grp_key IN NUMBER DEFAULT NULL , p_srt_key IN NUMBER DEFAULT NULL , p_bgt_key IN NUMBER DEFAULT NULL , p_mut_key IN NUMBER DEFAULT NULL , p_opdr_key IN NUMBER DEFAULT NULL , p_fact_key IN NUMBER DEFAULT NULL , p_bedr_key IN NUMBER DEFAULT NULL ) AS v_ora_err_num NUMBER; v_ora_err_msg VARCHAR2(200); v_err_msg VARCHAR2(1000); v_msg VARCHAR2(2000); BEGIN IF (p_code IN ('W', 'E')) THEN v_ora_err_num := SQLCODE; v_ora_err_msg := SUBSTR (SQLERRM, 1, 200); v_msg := 'ORACLE (error ' || v_ora_err_num || '/' || v_ora_err_msg || ')'; IF (p_msg IS NOT NULL) THEN v_msg := v_msg || ': ' || p_msg; END IF; ELSE v_msg := p_msg; END IF; twyn_log (v_delete_str, p_code, v_msg, NULL, p_prj_key, p_rub_key, p_grp_key, p_srt_key, p_bgt_key, p_mut_key, p_opdr_key, p_fact_key, p_bedr_key); END; PROCEDURE delete_contracten(p_bgt_project_key IN NUMBER) AS CURSOR c_project_opdr IS SELECT s.prs_kostensoort_key FROM bgt_project p , bgt_kostenrubriek r , prs_kostensoortgrp g , prs_kostensoort s WHERE p.bgt_project_key = r.bgt_project_key AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key AND p.bgt_project_key = p_bgt_project_key; CURSOR c_opdracht(p_kostensoort_key IN NUMBER) IS SELECT o.mld_uitvoerende_keys , o.mld_opdr_key FROM mld_opdr o WHERE o.prs_kostensoort_key = p_kostensoort_key; iprj NUMBER; iopd NUMBER; ibdr NUMBER; PROCEDURE delete_prs_bedrijf( p_project_key IN NUMBER , p_mld_opdr_key IN NUMBER , p_bedrijf_key IN NUMBER ) AS i NUMBER; xprj NUMBER; opdr NUMBER; bedr NUMBER; v_aantal_projecten NUMBER; v_aantal_opdrachten NUMBER; BEGIN xprj := p_project_key; opdr := p_mld_opdr_key; bedr := p_bedrijf_key; SELECT COUNT(DISTINCT p.bgt_project_key) aantal_projecten , COUNT(o.mld_opdr_key) aantal_opdrachten INTO v_aantal_projecten , v_aantal_opdrachten FROM bgt_project p , bgt_kostenrubriek r , prs_kostensoortgrp g , prs_kostensoort s , mld_opdr o WHERE p.bgt_project_key = r.bgt_project_key AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key AND s.prs_kostensoort_key = o.prs_kostensoort_key AND o.mld_uitvoerende_keys = p_bedrijf_key; -- -- Om een bedrijf die alleen in het project gebruikt wordt te kunnen verwijderen -- mogen er geen referenties meer bestaan. BEGIN -- IF (v_aantal_projecten = 1 AND v_aantal_opdrachten = 1) THEN -- bedrijf wordt alleen in het huidige project -- en in de huidige contract gebruikt, dus kan verwijderd worden. DELETE FROM prs_bedrijf WHERE prs_bedrijf_key = p_bedrijf_key; -- log_info('I', 'Bedrijf verwijderd' , xprj, NULL, NULL, NULL, NULL, NULL, opdr, NULL, bedr ); -- END IF; EXCEPTION WHEN OTHERS THEN log_info('W', NULL, xprj, NULL, NULL, NULL, NULL, NULL, opdr, NULL, bedr); -- xmsg, xprj, xrub, xgrp, xsrt, xbgt, xmut, opdr, fact, bedr END; END; PROCEDURE delete_fin_factuur( p_project_key IN NUMBER , p_mld_opdr_key IN NUMBER) AS i NUMBER; xprj NUMBER; opdr NUMBER; BEGIN xprj := p_project_key; opdr := p_mld_opdr_key; BEGIN DELETE FROM fin_factuur WHERE mld_opdr_key = p_mld_opdr_key; -- i := sql%rowcount; log_info( 'I', 'Aantal facturen verwijderd: ' || TO_CHAR(i) , xprj, NULL, NULL, NULL, NULL, NULL, opdr ); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, xprj, NULL, NULL, NULL, NULL, NULL, opdr); -- xmsg, xprj, xrub, xgrp, xsrt, xbgt, xmut, opdr, fact, bedr END; END; PROCEDURE delete_fin_factuur_onbekend(p_project_key IN NUMBER) AS i NUMBER; BEGIN -- Factuur verwijst naar een kostensoort binnen het te verwijderen project, -- maar is niet via de mld_opdr verwijderd. DELETE FROM fin_factuur WHERE prs_kostensoort_key IN (SELECT s.prs_kostensoort_key FROM prs_kostensoort s , prs_kostensoortgrp g , bgt_kostenrubriek r WHERE s.prs_kostensoortgrp_key = g.prs_kostensoortgrp_key AND g.bgt_kostenrubriek_key = r.bgt_kostenrubriek_key AND r.bgt_project_key = p_project_key ); -- i := sql%rowcount; log_info( 'I', 'Aantal facturen alleen aan kostensoort gebonden verwijderd: ' || TO_CHAR(i) , p_project_key ); END; PROCEDURE delete_mld_opdr( p_project_key IN NUMBER , p_mld_opdr_key IN NUMBER) AS xprj NUMBER; opdr NUMBER; BEGIN xprj := p_project_key; opdr := p_mld_opdr_key; BEGIN DELETE FROM mld_opdr WHERE mld_opdr_key = p_mld_opdr_key; -- log_info('I', 'Opdracht verwijderd' , xprj, NULL, NULL, NULL, NULL, NULL, opdr ); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, xprj, NULL, NULL, NULL, NULL, NULL, opdr); -- xmsg, xprj, xrub, xgrp, xsrt, xbgt, xmut, opdr, fact, bedr END; END; BEGIN -- delete_contracten iprj := p_bgt_project_key; log_info('I', 'Bedrijven, facturen en contracten:'); BEGIN FOR l_prj IN c_project_opdr LOOP FOR l_opdr IN c_opdracht(l_prj.prs_kostensoort_key) LOOP iopd := l_opdr.mld_opdr_key; ibdr := l_opdr.mld_uitvoerende_keys; delete_prs_bedrijf (p_bgt_project_key, l_opdr.mld_opdr_key, l_opdr.mld_uitvoerende_keys); delete_fin_factuur (p_bgt_project_key, l_opdr.mld_opdr_key); delete_mld_opdr (p_bgt_project_key, l_opdr.mld_opdr_key); END LOOP; END LOOP; delete_fin_factuur_onbekend(p_bgt_project_key); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, iprj, NULL, NULL, NULL, NULL, NULL, iopd, NULL, ibdr); -- xmsg, iprj, irub, igrp, isrt, ibgt, imut, iopd, ifac, ibdr END; END; -- delete_contracten PROCEDURE delete_budgetten(p_bgt_project_key IN NUMBER) AS CURSOR c_project_bud IS SELECT b.bgt_budget_key , b.bgt_kostenrubriek_key , b.prs_kostensoortgrp_key , b.prs_kostensoort_key FROM bgt_budget b WHERE b.bgt_project_key = p_bgt_project_key; ibgt NUMBER; iprj NUMBER; irub NUMBER; igrp NUMBER; isrt NUMBER; v_budget_key NUMBER; i NUMBER; PROCEDURE delete_mutaties( p_project_key IN NUMBER , p_budget_key IN NUMBER ) AS i NUMBER; xprj NUMBER; xbgt NUMBER; BEGIN xprj := p_project_key; xbgt := p_budget_key; BEGIN DELETE FROM bgt_budgetmutatie WHERE bgt_budget_key_van = p_budget_key OR bgt_budget_key_naar = p_budget_key; -- i := sql%rowcount; log_info('I', 'Aantal budgetmutaties verwijderd: ' || TO_CHAR(i) , xprj, NULL, NULL, NULL, xbgt ); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, xprj, NULL, NULL, NULL, xbgt); -- xmsg, xprj, xrub, xgrp, xsrt, xbgt, xmut, opdr, fact, bedr END; END; PROCEDURE delete_budget( p_project_key IN NUMBER , p_budget_key IN NUMBER ) AS xprj NUMBER; xbgt NUMBER; BEGIN xprj := p_project_key; xbgt := p_budget_key; BEGIN DELETE FROM bgt_budget WHERE bgt_budget_key = p_budget_key; -- log_info('I', 'Budget verwijderd' , xprj, NULL, NULL, NULL, xbgt ); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, xprj, NULL, NULL, NULL, xbgt); -- xmsg, xprj, xrub, xgrp, xsrt, xbgt, xmut, opdr, fact, bedr END; END; BEGIN -- delete_budgetten -- Ongeldige budgetten verwijderen. BEGIN DELETE FROM bgt_budgetmutatie WHERE bgt_budget_key_van IN (SELECT bgt_budget_key FROM bgt_budget WHERE bgt_kostenrubriek_key IS NULL) OR bgt_budget_key_naar IN (SELECT bgt_budget_key FROM bgt_budget WHERE bgt_kostenrubriek_key IS NULL); -- DELETE FROM bgt_budget WHERE bgt_kostenrubriek_key IS NULL; i := sql%rowcount; log_info('I', 'Aantal ongeldige budgetten verwijderd: ' || TO_CHAR(i)); EXCEPTION WHEN OTHERS THEN log_info('W', 'Ongeldige budgetten'); END; -- log_info('I', 'Budgetmutaties en budgetten:'); FOR l_prj IN c_project_bud LOOP iprj := p_bgt_project_key; irub := l_prj.bgt_kostenrubriek_key; igrp := l_prj.prs_kostensoortgrp_key; isrt := l_prj.prs_kostensoort_key; ibgt := l_prj.bgt_budget_key; BEGIN delete_mutaties(iprj, ibgt); delete_budget (iprj, ibgt); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, iprj, irub, igrp, isrt, ibgt); -- xmsg, iprj, irub, igrp, isrt, ibgt, imut, iopd, ifac, ibdr END; END LOOP; END; -- delete_budgetten -- Voor verwijderen van deelproject is delete_kostenplaatsen niet meer van toepassing -- omdat een kostenplaats nu bij een project (ins_discipline) hoort. -- Alleen als de discipline wordt verwijderd zouden ook de bijbehorende kostenplaatsen kunnen worden verwijderd. PROCEDURE delete_deelproject(p_bgt_project_key IN NUMBER) AS i NUMBER; BEGIN -- delete_deelproject log_info('I', 'Kostensoort, kostensoortgroep, kostenrubriek en project:'); BEGIN DELETE FROM prs_kostensoort WHERE prs_kostensoortgrp_key IN (SELECT g.prs_kostensoortgrp_key FROM bgt_kostenrubriek r , prs_kostensoortgrp g WHERE g.bgt_kostenrubriek_key = r.bgt_kostenrubriek_key AND r.bgt_project_key = p_bgt_project_key ); i := sql%rowcount; log_info('I', 'Aantal kostensoorten verwijderd: ' || TO_CHAR(i)); -- DELETE FROM prs_kostensoortgrp WHERE bgt_kostenrubriek_key IN (SELECT r.bgt_kostenrubriek_key FROM bgt_kostenrubriek r WHERE r.bgt_project_key = p_bgt_project_key ); i := sql%rowcount; log_info('I', 'Aantal kostensoortgroepen verwijderd: ' || TO_CHAR(i)); -- DELETE FROM bgt_kostenrubriek WHERE bgt_project_key = p_bgt_project_key; i := sql%rowcount; log_info('I', 'Aantal kostenrubrieken verwijderd: ' || TO_CHAR(i)); -- DELETE FROM bgt_project WHERE bgt_project_key = p_bgt_project_key; -- log_info('I', 'Deelproject verwijderd', p_bgt_project_key); EXCEPTION WHEN OTHERS THEN log_info('W', NULL, p_bgt_project_key); END; END; -- delete_deelproject BEGIN log_info('I', 'START'); delete_contracten(p_deelproject_key); delete_budgetten(p_deelproject_key); IF (NOT p_alleen_fin) THEN delete_deelproject(p_deelproject_key); END IF; log_info('I', 'EINDE'); SELECT COUNT(*) INTO v_err_count FROM twyn_bgtlog WHERE loglevel IN ('W','E') AND actie = 'DELETE prj=' || TO_CHAR(p_deelproject_key); log_info('I', 'Aantal fouten: '|| TO_CHAR(v_err_count) ); END; / -- -- -- CREATE OR REPLACE PACKAGE twyn AS TYPE t_cursor IS REF CURSOR; PROCEDURE twyn_v_detailoverzicht ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); PROCEDURE twyn_v_contract_rubriek ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); PROCEDURE twyn_v_contr_fact_bedrijf ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); PROCEDURE twyn_v_factuur_datum ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); PROCEDURE twyn_v_meerminderwerk_fact ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); PROCEDURE twyn_v_meerminderwerk_opdr ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ); END twyn; / CREATE OR REPLACE PACKAGE BODY twyn AS PROCEDURE twyn_v_detailoverzicht ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ) AS v_datum_van DATE; v_datum_tot DATE; v_part_A VARCHAR2(32767); v_part_B VARCHAR2(32767); v_part_W VARCHAR2(32767); v_part_T VARCHAR2(32767); v_part_L VARCHAR2(32767); v_where VARCHAR2(32767); BEGIN v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END; v_part_A := 'SELECT f.*' || ' , 0 budget_origineel_exc' || ' , 0 budget_origineel_btw' || ' , 0 budget_actueel_exc' || ' , 0 budget_actueel_btw' || ' , 0 budget_reserve_exc' || ' , 0 budget_reserve_btw' || ' , 0 budget_mutatie_exc' || ' , 0 budget_mutatie_btw' || ' , BGT.getGecontracteerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gecontracteerd_exc' || ' , BGT.getGecontracteerd(o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gecontracteerd_btw' || ' , BGT.getGefactureerd (o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gefactureerd_exc' || ' , BGT.getGefactureerd (o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gefactureerd_btw' || ' , p.startdatum_p' || ' , ''' || p_datum_tot || ''' bgt_datum' || ' , o.mld_opdr_key' || ' FROM bgt_v_project_full f' || ' , bgt_budget b' || ' , twyn_v_bgt_projectdatum p' || ' , mld_opdr o' || ' WHERE ( f.prs_kostensoort_key = b.prs_kostensoort_key' || ' OR ( f.prs_kostensoortgrp_key = b.prs_kostensoortgrp_key' || ' AND f.prs_kostensoort_key IS NULL' || ' AND b.prs_kostensoort_key IS NULL' || ' )' || ' OR ( f.bgt_kostenrubriek_key = b.bgt_kostenrubriek_key' || ' AND f.prs_kostensoortgrp_key IS NULL' || ' AND b.prs_kostensoortgrp_key IS NULL' || ' )' || ' )' || ' AND f.bgt_project_key = p.bgt_project_key' || ' AND f.prs_kostensoort_key = o.prs_kostensoort_key' || ' AND f.ins_discipline_verwijder IS NULL' || ' AND f.bgt_project_verwijder IS NULL' || ' '|| v_where; v_part_B := 'SELECT f.*' || ' , BGT.getBudgetOpDatum(b.bgt_budget_key, 0, null) budget_origineel_exc' || ' , BGT.getBudgetOpDatum(b.bgt_budget_key, 1, null) budget_origineel_btw' || ' , BGT.getBudgetOpDatum(b.bgt_budget_key, 0, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_actueel_exc' || ' , BGT.getBudgetOpDatum(b.bgt_budget_key, 1, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_actueel_btw' || ' , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 0, ''ARW'', to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_reserve_exc' || ' , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 1, ''ARW'', to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_reserve_btw' || ' , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 0, ''EM'', to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_mutatie_exc' || ' , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 1, ''EM'', to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_mutatie_btw' || ' , 0 gecontracteerd_exc' || ' , 0 gecontracteerd_btw' || ' , 0 gefactureerd_exc' || ' , 0 gefactureerd_btw' || ' , p.startdatum_p' || ' , ''' || p_datum_tot || ''' bgt_datum' || ' , null mld_opdr_key' || ' FROM bgt_v_project_full f' || ' , bgt_budget b' || ' , twyn_v_bgt_projectdatum p' || ' WHERE ( f.prs_kostensoort_key = b.prs_kostensoort_key' || ' OR ( f.prs_kostensoortgrp_key = b.prs_kostensoortgrp_key' || ' AND f.prs_kostensoort_key IS NULL' || ' AND b.prs_kostensoort_key IS NULL' || ' )' || ' OR ( f.bgt_kostenrubriek_key = b.bgt_kostenrubriek_key' || ' AND f.prs_kostensoortgrp_key IS NULL' || ' AND b.prs_kostensoortgrp_key IS NULL' || ' )' || ' )' || ' AND f.bgt_project_key = p.bgt_project_key' || ' AND f.ins_discipline_verwijder IS NULL' || ' AND f.bgt_project_verwijder IS NULL' || ' '|| v_where; v_part_T := 'SELECT opdrachtgever' || ' , pcode' || ' , project' || ' , projectnaam' || ' , dcode' || ' , subproject' || ' , subprojectnaam' || ' , rcode' || ' , kostenrubriek' || ' , gcode' || ' , kostengroep' || ' , scode' || ' , kostensoort' || ' , startdatum_p' || ' , bgt_datum' || ' , bgt_kostenrubriek_key' || ' , sum(budget_origineel_exc) org_bedrag_exc' || ' , sum(budget_origineel_btw) org_bedrag_btw' || ' , sum(budget_actueel_exc) bgt_bedrag_exc' || ' , sum(budget_actueel_btw) bgt_bedrag_btw' || ' , sum(budget_reserve_exc) res_bedrag_exc' || ' , sum(budget_reserve_btw) res_bedrag_btw' || ' , sum(budget_mutatie_exc) mut_bedrag_exc' || ' , sum(budget_mutatie_btw) mut_bedrag_btw' || ' , sum(gecontracteerd_exc) cnt_bedrag_exc' || ' , sum(gecontracteerd_btw) cnt_bedrag_btw' || ' , sum(gefactureerd_exc) fin_bedrag_exc' || ' , sum(gefactureerd_btw) fin_bedrag_btw' || ' FROM (' || v_part_A || ' UNION ' || v_part_B || ')' || ' GROUP BY opdrachtgever' || ' , pcode' || ' , project' || ' , projectnaam' || ' , dcode' || ' , subproject' || ' , subprojectnaam' || ' , rcode' || ' , kostenrubriek' || ' , gcode' || ' , kostengroep' || ' , scode' || ' , kostensoort' || ' , startdatum_p' || ' , bgt_datum' || ' , bgt_kostenrubriek_key' || ' ORDER BY rcode'; v_part_L := 'SELECT x.*' || ' , CASE WHEN scode IS NOT NULL' || ' AND org_bedrag_exc = 0' || ' AND org_bedrag_btw = 0' || ' AND bgt_bedrag_exc = 0' || ' AND bgt_bedrag_btw = 0' || ' AND res_bedrag_exc = 0' || ' AND res_bedrag_btw = 0' || ' AND mut_bedrag_exc = 0' || ' AND mut_bedrag_btw = 0' || ' AND cnt_bedrag_exc = 0' || ' AND cnt_bedrag_btw = 0' || ' AND fin_bedrag_exc = 0' || ' AND fin_bedrag_btw = 0' || ' THEN 1' || ' ELSE 0' || ' END is_leeg' || ' FROM (' || v_part_T || ') x'; OPEN p_cursor FOR 'SELECT * FROM ' || '( SELECT * FROM (' || v_part_L || ')' || ')'; END; PROCEDURE twyn_v_contract_rubriek ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 -- eigenlijk: tot-en-met , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ) AS v_datum_van DATE; v_datum_tot DATE; v_part_W VARCHAR2(32767); v_part_T VARCHAR2(32767); v_where VARCHAR2(32767); BEGIN v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END; v_part_T := 'SELECT tp.opdrachtgever' || ' , tp.pcode' || ' , tp.project' || ' , tp.projectnaam' || ' , tp.dcode' || ' , tp.subproject' || ' , tp.subprojectnaam' || ' , tp.rcode' || ' , tp.kostenrubriek' || ' , tp.gcode' || ' , tp.kostengroep' || ' , tp.scode' || ' , tp.kostensoort' || ' , tp.kostencode' || ' , tp.kostennaam' || ' , b.prs_leverancier_nr' || ' , o.mld_opdr_ordernr' || ' , COALESCE(o.mld_opdr_bedrijfopdr_volgnr, 0) mld_opdr_ordervolgnr' || ' , o.mld_opdr_meerwerk mld_opdr_meerwerk' || ' , o.mld_opdr_id kenmerk' || ' , o.mld_opdr_omschrijving mld_opdr_omschrijving' || ' , kp.prs_kostenplaats_nr accountcode' || ' , kp.prs_kostenplaats_omschrijving account' || ' , TO_CHAR (o.mld_opdr_datumbegin, ''DD-MM-YYYY'') datum_p' || ' , BGT.getGecontracteerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) kosten' || ' , BGT.getGecontracteerd(o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) btw' || ' , BGT.getGefactureerd (o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) facturen' || ' , BGT.getGefactureerd (o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) facturen_btw' || ' , p.startdatum_p' || ' FROM bgt_v_project_full tp' || ' , prs_kostenplaats kp' || ' , mld_opdr o' || ' , prs_bedrijf b' || ' , twyn_v_bgt_projectdatum p' || ' WHERE o.prs_kostensoort_key = tp.prs_kostensoort_key' || ' AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)' || ' AND o.mld_uitvoerende_keys = b.prs_bedrijf_key' || ' AND o.mld_statusopdr_key <> 10' -- ter goedkeuring (=raming) hier niet in meenemen || ' AND tp.bgt_project_key = p.bgt_project_key' || ' AND tp.ins_discipline_verwijder IS NULL' || ' AND tp.bgt_project_verwijder IS NULL' || ' AND ( ( mld_opdr_datumbegin <= to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')' || ' AND COALESCE(BGT.getGefactureerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) = 0' || ' )' || ' OR (COALESCE(BGT.getGefactureerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) <> 0)' || ' )' || ' '|| v_where; OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')'; END; PROCEDURE twyn_v_contr_fact_bedrijf ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ) AS v_datum_van DATE; v_datum_tot DATE; v_part_D VARCHAR2(32767); v_part_W VARCHAR2(32767); v_part_T VARCHAR2(32767); v_where VARCHAR2(32767); BEGIN v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END || CASE WHEN p_datum_van IS NOT NULL THEN ' AND o.mld_opdr_datumbegin >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')' ELSE '' END || CASE WHEN p_datum_tot IS NOT NULL THEN ' AND o.mld_opdr_datumbegin <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')' ELSE '' END; v_part_D := CASE WHEN p_datum_van IS NOT NULL THEN ' AND fx.fin_factuur_advies >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')' ELSE '' END || CASE WHEN p_datum_tot IS NOT NULL THEN ' AND fx.fin_factuur_advies <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')' END; v_part_T := 'SELECT tp.opdrachtgever' || ' , tp.pcode' || ' , tp.project' || ' , tp.subproject' || ' , tp.rcode' || ' , tp.kostenrubriek' || ' , tp.kostengroep' || ' , tp.scode' || ' , tp.kostensoort' || ' , b.prs_bedrijf_naam' || ' , b.prs_leverancier_nr' || ' , o.mld_opdr_ordernr' || ' , COALESCE(o.mld_opdr_bedrijfopdr_volgnr, 0) mld_opdr_ordervolgnr' || ' , o.mld_opdr_id kenmerk' || ' , o.mld_opdr_omschrijving' || ' , COALESCE(kp.prs_kostenplaats_nr, '' '') accountcode' || ' , COALESCE(kp.prs_kostenplaats_omschrijving, ''zonder account'') account' || ' , o.mld_opdr_kosten' || ' , o.mld_opdr_kosten_btw' || ' , o.mld_opdr_meerwerk' || ' , CASE WHEN fin_factuur_key IS NULL' || ' THEN 1' || ' WHEN (SELECT MIN(fc.fin_factuur_key)' || ' FROM fin_factuur fc' || ' WHERE fc.mld_opdr_key = f.mld_opdr_key) = f.fin_factuur_key' || ' THEN 1' || ' ELSE 0' || ' END contractwaarde' || ' , f.fin_factuur_nr' || ' , f.fin_factuur_opmerking' || ' , f.fin_factuur_totaal' || ' , f.fin_factuur_totaal_btw' || ' , o.mld_opdr_datumbegin contractdatum' || ' , f.fin_factuur_datum factuurdatum' || ' , f.fin_factuur_advies adviesdatum' || ' , TO_CHAR (o.mld_opdr_datumbegin, ''DD-MM-YYYY'') contractdatum_p' || ' , TO_CHAR (f.fin_factuur_datum, ''DD-MM-YYYY'') factuurdatum_p' || ' , TO_CHAR (f.fin_factuur_advies, ''DD-MM-YYYY'') adviesdatum_p' || ' , p.startdatum_p' || ' FROM (SELECT *' || ' FROM fin_factuur fx' || ' WHERE (1=1)' || ' '|| v_part_D || ' ) f' || ' , mld_opdr o' || ' , prs_bedrijf b' || ' , prs_kostenplaats kp' || ' , bgt_v_project_full tp' || ' , twyn_v_bgt_projectdatum p' || ' WHERE o.mld_opdr_key = f.mld_opdr_key(+)' || ' AND o.prs_kostensoort_key = tp.prs_kostensoort_key' || ' AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)' || ' AND o.mld_uitvoerende_keys = b.prs_bedrijf_key' || ' AND o.mld_statusopdr_key <> 10' || ' AND tp.bgt_project_key = p.bgt_project_key' || ' AND tp.ins_discipline_verwijder IS NULL' || ' AND tp.bgt_project_verwijder IS NULL' || ' '|| v_where; OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')'; END; PROCEDURE twyn_v_factuur_datum ( user_key IN NUMBER , p_datum_van IN VARCHAR2 , p_datum_tot IN VARCHAR2 , p_cursor OUT t_cursor , p_where IN VARCHAR2 DEFAULT NULL ) AS -- Dit is een voorbereiding op #53761 Dashboard budgetbewaking -- waarin ook een cumulatief factuurbedrag nodig is. v_datum_van DATE; v_datum_tot DATE; v_part_W VARCHAR2(32767); v_part_T VARCHAR2(32767); v_where VARCHAR2(32767); BEGIN v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END || CASE WHEN p_datum_van IS NOT NULL THEN ' AND twyn_v_factuur_datum.factuur_datum >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')' ELSE '' END || CASE WHEN p_datum_tot IS NOT NULL THEN ' AND twyn_v_factuur_datum.factuur_datum <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')' ELSE '' END; v_part_T := 'SELECT factuur_datum' || ' , factuur_inc' || ' , COALESCE( SUM(factuur_inc) OVER (ORDER BY factuur_datum), 0) cumulatief' || ' FROM (SELECT TO_CHAR(factuur_datum, ''YYYY-MM'') AS factuur_datum' || ' , SUM(factuur_inc) AS factuur_inc' || ' FROM twyn_v_factuur_datum' || ' WHERE 1=1' || ' '|| v_where || ' GROUP BY TO_CHAR(factuur_datum, ''YYYY-MM'') ' || ' ORDER BY 1, 2' || ' )'; OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')'; END; PROCEDURE twyn_v_meerminderwerk_fact ( user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2 -- eigenlijk: tot-en-met , p_cursor OUT t_cursor, p_where IN VARCHAR2 DEFAULT NULL) AS v_datum_van DATE; v_datum_tot DATE; v_part_W VARCHAR2 (32767); v_part_D VARCHAR2 (32767); v_part_T VARCHAR2 (32767); v_where VARCHAR2 (32767); BEGIN v_datum_van := TO_DATE (p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE (p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR (p_where, INSTR (p_where, 'WHERE') + 6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END; v_part_D := CASE WHEN p_datum_van IS NOT NULL THEN ' AND fin_factuur_datum >= TO_DATE(''' || p_datum_van || ''', ''dd-mm-yyyy'')' || ' AND (fin_factuur_advies >= TO_DATE(''' || p_datum_van || ''', ''dd-mm-yyyy'') OR fin_factuur_advies IS NULL)' ELSE '' END || CASE WHEN p_datum_tot IS NOT NULL THEN ' AND fin_factuur_datum <= TO_DATE(''' || p_datum_tot || ''', ''dd-mm-yyyy'')' || ' AND (fin_factuur_advies <= TO_DATE(''' || p_datum_tot || ''', ''dd-mm-yyyy'') OR fin_factuur_advies IS NULL)' END; v_part_T := 'SELECT * ' || 'FROM twyn_v_meerminderwerk_fact' || ' WHERE 1=1' || ' ' || v_part_D || ' ' || v_where; OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')'; END; PROCEDURE twyn_v_meerminderwerk_opdr ( user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, -- eigenlijk: tot-en-met p_cursor OUT t_cursor, p_where IN VARCHAR2 DEFAULT NULL) AS v_datum_van DATE; v_datum_tot DATE; v_part_W VARCHAR2 (32767); v_part_D VARCHAR2 (32767); v_part_T VARCHAR2 (32767); v_where VARCHAR2 (32767); BEGIN v_datum_van := TO_DATE (p_datum_van, 'dd-mm-yyyy'); v_datum_tot := TO_DATE (p_datum_tot, 'dd-mm-yyyy'); v_part_W := SUBSTR (p_where, INSTR (p_where, 'WHERE') + 6); v_where := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END; v_part_D := CASE WHEN p_datum_van IS NOT NULL THEN ' AND ff.fin_factuur_datum >= TO_DATE(''' || p_datum_van || ''', ''dd-mm-yyyy'')' || ' AND (ff.fin_factuur_advies >= TO_DATE(''' || p_datum_van || ''', ''dd-mm-yyyy'') OR ff.fin_factuur_advies IS NULL)' ELSE '' END || CASE WHEN p_datum_tot IS NOT NULL THEN ' AND ff.fin_factuur_datum <= TO_DATE(''' || p_datum_tot || ''', ''dd-mm-yyyy'')' || ' AND (ff.fin_factuur_advies <= TO_DATE(''' || p_datum_tot || ''', ''dd-mm-yyyy'') OR ff.fin_factuur_advies IS NULL)' END; v_part_T := 'SELECT p.ins_discipline_key, ' || ' p.bgt_project_key, ' || ' p.bgt_kostenrubriek_key, ' || ' p.prs_kostensoortgrp_key, ' || ' p.prs_kostensoort_key, ' || ' b.prs_bedrijf_key, ' || ' p.opdrachtgever, ' || ' p.pcode, ' || ' p.project, ' || ' p.projectnaam, ' || ' p.dcode, ' || ' p.subproject, ' || ' p.subprojectnaam, ' || ' d.startdatum_p, ' || ' b.prs_leverancier_nr, ' || ' b.prs_bedrijf_naam, ' || ' p.scode, ' || ' p.kostensoort, ' || ' p.kostencode, ' || ' m.mld_opdr_ordernr, ' || ' m.mld_opdr_bedrijfopdr_volgnr, ' || ' m.mld_opdr_omschrijving, ' || ' m.mld_opdr_id, ' || ' m.mld_opdr_datumbegin, ' || ' TO_CHAR (m.mld_opdr_datumbegin, ''dd-mm-yyyy'') ' || ' mld_opdr_datumbegin_p, ' || ' m.mld_opdr_kosten_refiat, ' || ' CASE WHEN m.mld_statusopdr_key = 10 THEN m.mld_opdr_kosten END ' || ' raming, ' || ' CASE WHEN m.mld_statusopdr_key <> 10 THEN m.mld_opdr_kosten END ' || ' gecontracteerd, ' || ' m.mld_opdr_kosten_btw ' || ' contract_btw, ' || ' f.fin_factuur_totaal, ' || ' f.fin_factuur_totaal_btw, ' || ' c.mld_statusopdr_oms ' || ' FROM mld_opdr m, ' || ' prs_bedrijf b, ' || ' bgt_v_project_full p, ' || ' twyn_v_bgt_projectdatum d, ' || ' (SELECT fac_code2label_code mld_statusopdr_key, ' || ' COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) mld_statusopdr_oms ' || ' FROM fac_locale_xsl fl, fac_code2label fs ' || ' WHERE fl.fac_locale_xsl_label = fac_code2label_label ' || ' AND fac_code2label_domein = ''opdracht'' ' || ' AND fac_locale_xsl_lang = lcl.getuserlanguage ()) c, ' || ' ( SELECT ff.mld_opdr_key, ' || ' SUM (ff.fin_factuur_totaal) fin_factuur_totaal, ' || ' SUM (ff.fin_factuur_totaal_btw) fin_factuur_totaal_btw ' || ' FROM fin_factuur ff ' || ' WHERE (1=1)' || ' '|| v_part_D || ' GROUP BY ff.mld_opdr_key) f ' || ' WHERE m.mld_uitvoerende_keys = b.prs_bedrijf_key ' || ' AND m.prs_kostensoort_key = p.prs_kostensoort_key ' || ' AND m.mld_opdr_meerwerk = 1 ' || ' AND m.mld_statusopdr_key = c.mld_statusopdr_key ' || ' AND m.mld_opdr_key = f.mld_opdr_key(+) ' || ' AND p.bgt_project_key = d.bgt_project_key ' || ' AND p.ins_discipline_verwijder IS NULL ' || ' AND p.bgt_project_verwijder IS NULL ' || ' AND ( ( m.mld_opdr_datumbegin <= to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')' || ' AND COALESCE(BGT.getGefactureerd(m.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) = 0' || ' )' || ' OR (COALESCE(BGT.getGefactureerd(m.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) <> 0)' || ' )' || ' ' || v_where || ' ORDER BY b.prs_leverancier_nr, ' || ' p.scode, ' || ' m.mld_opdr_ordernr, ' || ' m.mld_opdr_bedrijfopdr_volgnr '; OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')'; END; 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