diff --git a/DEMO/demo.sql b/DEMO/demo.sql index 0971f60eb..b050bd637 100644 --- a/DEMO/demo.sql +++ b/DEMO/demo.sql @@ -3420,6 +3420,91 @@ AS FROM prs_bedrijf WHERE prs_bedrijf_leverancier = 1; +CREATE OR REPLACE VIEW demo_v_rap_fin_bijtelling +AS + SELECT p.prs_perslid_nr personeelsnummer, + DECODE ( + pfa.prs_perslid_key, + NULL, 'POOL', + '' + || HTF.escape_sc (pfa.prs_perslid_naam_full) + || '') + html_berijder, + COALESCE (pfa.prs_perslid_naam_full, 'POOL') fclt_x_berijder, + ad.ins_deel_omschrijving fclt_f_voertuig, + c.cnt_contract_nummer_intern fclt_x_contract, + '' + || HTF.escape_sc (c.cnt_contract_nummer_intern) + || '' + html_contract, + b.prs_bedrijf_naam fclt_f_bedrijf, + DECODE ( + c.ins_discipline_key, + 2789, + 'huur', + TO_CHAR ( + ROUND (MONTHS_BETWEEN (c.cnt_contract_looptijd_tot, c.cnt_contract_looptijd_van)))) + looptijd, + ROUND(demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van, + c.cnt_contract_looptijd_tot, + TRUNC (SYSDATE, 'MM')) + * CAST (TO_CHAR (LAST_DAY (SYSDATE), 'DD') AS INT)) + aantal_dagen, + ROUND ( + c.cnt_contract_termijnkosten + * demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van, + c.cnt_contract_looptijd_tot, + TRUNC (SYSDATE, 'MM')), + 2) + fclt_c_kosten, + fisc.waarde fclt_c_fiscale_waarde, + DECODE (bij.fac_usrdata_prijs, NULL, NULL, TO_CHAR (bij.fac_usrdata_prijs) || '%') + percentage, + ROUND ( + fisc.waarde * bij.fac_usrdata_prijs / 1200 + * demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van, + c.cnt_contract_looptijd_tot, + TRUNC (SYSDATE, 'MM')), + 2) + fclt_c_bruto_bijtelling + FROM cnt_contract c, + cnt_contract_object co, + ins_v_aanwezigdeel ad, + prs_perslid p, + prs_v_perslid_fullnames_all pfa, + prs_bedrijf b, + (SELECT kd.ins_deel_key, ud.fac_usrdata_prijs + FROM ins_kenmerkdeel kd, ins_kenmerk k, fac_usrdata ud + WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key + AND kd.ins_kenmerkdeel_verwijder IS NULL + AND k.ins_srtkenmerk_key = 749 + AND k.ins_kenmerk_verwijder IS NULL + AND ud.fac_usrtab_key = 884 + AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key) bij, + (SELECT kd.ins_deel_key, fac.safe_to_number (kd.ins_kenmerkdeel_waarde) waarde + FROM ins_kenmerkdeel kd, ins_kenmerk k + WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key + AND kd.ins_kenmerkdeel_verwijder IS NULL + AND k.ins_srtkenmerk_key = 747 + AND k.ins_kenmerk_verwijder IS NULL) fisc + WHERE c.ins_discipline_key IN (2788, 2789) + AND c.cnt_contract_looptijd_van <= LAST_DAY (SYSDATE) + AND c.cnt_contract_looptijd_tot >= TRUNC (SYSDATE, 'MM') + AND co.cnt_contract_key = c.cnt_contract_key + AND ad.ins_deel_key = co.cnt_ins_deel_key + AND p.prs_perslid_key(+) = ad.ins_alg_ruimte_key + AND pfa.prs_perslid_key(+) = p.prs_perslid_key + AND b.prs_bedrijf_key = c.cnt_prs_bedrijf_key + AND bij.ins_deel_key(+) = ad.ins_deel_key + AND fisc.ins_deel_key(+) = ad.ins_deel_key; + ----- KPI's -------------------------------------------------------------------- CREATE OR REPLACE VIEW demo_v_rap_kpi_definitie @@ -3432,16 +3517,16 @@ AS -- Eén view per melding. Nummering is gelijk aan die van de de standaardmeldingen. -- mld_stdmelding Budget en Kosten 1542 A --- mld_kenmerk Catering^ +-- mld_kenmerk Catering^ -- mld_kenmerk Werkelijke kosten 2319 A -- mld_kenmerk Extra kosten 2295 A --- mld_kenmerk Receptie^ +-- mld_kenmerk Receptie^ -- mld_kenmerk Werkelijke kosten 2320 A -- mld_kenmerk Extra kosten 2296 A --- mld_kenmerk Schoonmaak^ +-- mld_kenmerk Schoonmaak^ -- mld_kenmerk Werkelijke kosten 2321 A -- mld_kenmerk Extra kosten 2297 A --- mld_kenmerk Documentmanagement^ +-- mld_kenmerk Documentmanagement^ -- mld_kenmerk Werkelijke kosten 2322 A -- mld_kenmerk Extra kosten 2298 A CREATE OR REPLACE VIEW demo_v_kpi1 @@ -3535,22 +3620,22 @@ AS ; -- mld_stdmelding Audit Catering 1541 --- mld_kenmerk Wachttijden bij kassa^ --- mld_kenmerk Tijdstip1 +-- mld_kenmerk Wachttijden bij kassa^ +-- mld_kenmerk Tijdstip1 -- mld_kenmerk Aantal bezoekers 2281 A -- mld_kenmerk Aantal op tijd 2285 A --- mld_kenmerk Tijdstip2 +-- mld_kenmerk Tijdstip2 -- mld_kenmerk Aantal bezoekers 2282 A -- mld_kenmerk Aantal op tijd 2286 A --- mld_kenmerk Tijdstip3 +-- mld_kenmerk Tijdstip3 -- mld_kenmerk Aantal bezoekers 2283 A -- mld_kenmerk Aantal op tijd 2287 A --- mld_kenmerk Opmerking --- mld_kenmerk Assortimentsaanbod^ +-- mld_kenmerk Opmerking +-- mld_kenmerk Assortimentsaanbod^ -- mld_kenmerk Aantal producten assortiment 2289 A -- mld_kenmerk Aantal producten aanwezig 2288 A --- mld_kenmerk Opmerking --- mld_kenmerk HACCP controle^ +-- mld_kenmerk Opmerking +-- mld_kenmerk HACCP controle^ -- mld_kenmerk Totaal aantal HACCP punten 2317 A -- mld_kenmerk Aantal goede HACCP punten 2284 A CREATE OR REPLACE VIEW demo_v_kpi2 @@ -3643,7 +3728,7 @@ AS -- mld_stdmelding KTO Receptie 1544 A -- mld_srtkenmerk Cijfer 2647 A --- mld_srtkenmerk Opmerking +-- mld_srtkenmerk Opmerking -- TODO: divide-by-zero voorkomen CREATE OR REPLACE VIEW demo_v_kpi3 AS @@ -3705,12 +3790,12 @@ AS ; -- mld_stdmelding Duurzaamheid en derving Catering 1543 --- mld_kenmerk Gebruik biologische producten^ +-- mld_kenmerk Gebruik biologische producten^ -- mld_kenmerk Percentage Biologisch 2310 A --- mld_kenmerk Opmerking --- mld_kenmerk Derving^ +-- mld_kenmerk Opmerking +-- mld_kenmerk Derving^ -- mld_kenmerk Percentage derving 2311 A --- mld_kenmerk Opmerking +-- mld_kenmerk Opmerking CREATE OR REPLACE VIEW demo_v_kpi4 AS WITH normen AS @@ -3778,18 +3863,90 @@ AS CREATE OR REPLACE PACKAGE demo AS + FUNCTION getAantalDagenInPeriode(p_van IN DATE, + p_tot IN DATE, + p_periode_van IN DATE, + p_periode_tot IN DATE := NULL) + RETURN NUMBER; PROCEDURE refreshscore(pUserKey IN NUMBER); END; / CREATE OR REPLACE PACKAGE BODY demo AS + -- Bepaal aantal dagen in begin- of eindperiode waarvoor huur betaald moet worden + -- Periode moet binnen dezelfde kalendermaand liggen. + -- Als p_periode_tot leeg is, gaan we uit van het einde van de maand + -- Als p_van en/of p_tot leeg zijn, dan zetten we die op begin resp. eind van de periode + FUNCTION getAantalDagenInPeriode(p_van IN DATE, + p_tot IN DATE, + p_periode_van IN DATE, + p_periode_tot IN DATE := NULL) + RETURN NUMBER + IS + o_aantal_dagen NUMBER(4); + v_periode_tot DATE; + v_van DATE; + v_tot DATE; + BEGIN + -- Einddatum van de periode die we beschouwen. + -- Als geen einddatum, dan einde van de maand (startdatum zou dan eerste dag van de maand moeten zijn) + v_periode_tot := COALESCE( p_periode_tot, LAST_DAY(p_periode_van) ); + + -- Valt periode (p_van - p_tot) geheel buiten (p_periode_van - p_periode_tot)? Dan nul dagen overlap! + IF ( p_tot < p_periode_van + OR p_van > p_periode_tot) + THEN + RETURN 0; + END IF; + + -- Aantal dagen is maximaal de hele periode + o_aantal_dagen := CAST( TO_CHAR(v_periode_tot, 'DD') AS INT) + - CAST( TO_CHAR(p_periode_van, 'DD') AS INT) + + 1; + + v_van := p_van; + v_tot := p_tot; + + -- Als geen van/tot datum opgegeven, of als van/tot datum buiten periode valt, + -- dan zet op begin-/einddatum van de periode (periode) + IF (v_van IS NULL OR v_van < p_periode_van) + THEN + v_van := p_periode_van; + END IF; + IF (v_tot IS NULL OR v_tot > v_periode_tot) + THEN + v_tot := v_periode_tot; + END IF; + + -- Beslaat het contract de volledige periode, of beginnen/eindigen we halverwege? + -- DAN: + -- - ingangsmaand is hetzelfde als van huidige periode + -- - ingangsdag is later dan de eerste dag van de periode + -- EN/OF: + -- - eindmaand is hetzelfde als van huidige periode + -- - einddag is eerder dan de laatste dag van de periode + IF ( ( TRUNC(v_van, 'MM') = TRUNC(p_periode_van, 'MM') + AND TRUNC(v_van, 'DD') > p_periode_van ) + OR ( TRUNC(v_tot, 'MM') = TRUNC(v_periode_tot, 'MM') + AND TRUNC(v_tot, 'DD') < v_periode_tot ) ) + THEN + -- prijsfactor = aantal_dagen_gehuurd / aantal_dagen_in_deze_periode + -- = einddag - begindag + 1 / aantal_dagen_in_deze_periode + o_aantal_dagen := ( CAST( TO_CHAR(v_tot, 'DD') AS INT) + - CAST( TO_CHAR(v_van, 'DD') AS INT) + + 1 ); + END IF; + + RETURN o_aantal_dagen; + END; + PROCEDURE refreshscore(pUserKey IN NUMBER) AS BEGIN -- Waarden van de huidige periode(s) verwijderen. -- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een - -- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt + -- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt DELETE kpi_score WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN ( SELECT DISTINCT kpi_definitie_key, kpi_score_datum, alg_locatie_key @@ -3806,7 +3963,7 @@ AS kpi_score_norm_score, kpi_score_drempels) SELECT * FROM demo_v_kpi_all; - + COMMIT; END; END;