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;