259 lines
9.6 KiB
Plaintext
259 lines
9.6 KiB
Plaintext
#ifdef CARE
|
|
/* CARE_PAC.SRC
|
|
*
|
|
* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
|
|
CREATE OR REPLACE PACKAGE care
|
|
AS
|
|
TYPE t_cursor IS REF CURSOR;
|
|
FUNCTION goodmonday_start (p_mld_key IN NUMBER)
|
|
RETURN DATE;
|
|
FUNCTION goodmonday_end (p_mld_key IN NUMBER)
|
|
RETURN DATE;
|
|
PROCEDURE care_v_rap2_factuur_uren_a (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 care_v_rap2_factuur_uren_e (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 care;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY care
|
|
AS
|
|
|
|
FUNCTION goodmonday_start (p_mld_key IN NUMBER)
|
|
RETURN DATE
|
|
IS
|
|
-- Herindicaties/vorige indicaties van dezelfde client die in dezelfde week start/eindigt.
|
|
|
|
l_mld_key NUMBER(10);
|
|
l_good_monday DATE;
|
|
|
|
BEGIN
|
|
--- Vorige beschikking: bij herindicatie midden in de week is 1 van beide beschikkingen geldig
|
|
--- Herindicatie midden in de week wordt gekenmerkt door:
|
|
--- dezelfde client, dezelfde gemeente, eindweek van de vorige is gelijk aan beginweek van herindicatie,
|
|
--- en het maakt niet uit wat de product is/wordt.
|
|
--- Baas' van dubbele beschikking is diegene met de meeste aantal uren, ongeacht HV1->HV2 overgang.
|
|
--- Bij gelijke aantal uren is de nieuwe beschikking de baas.
|
|
|
|
|
|
|
|
-- Selecteer de vorige beschikking b1 van de beschikking b2 die meer uren heeft.
|
|
SELECT MAX(b1.mld_melding_key)
|
|
INTO l_mld_key
|
|
FROM care_v_beschikking_all b1, care_v_beschikking_all b2
|
|
WHERE b2.mld_melding_key = p_mld_key
|
|
AND b1.mld_melding_key <> b2.mld_melding_key
|
|
AND b1.mld_melding_status <> 1
|
|
AND b1.beschikking_week_tot = b2.beschikking_week_van
|
|
AND b1.beschikking_jaar_tot = b2.beschikking_jaar_van
|
|
AND b1.prs_client_key = b2.prs_client_key
|
|
AND b1.gemeente_code = b2.gemeente_code
|
|
AND b1.uren_beschikking > b2.uren_beschikking;
|
|
|
|
|
|
IF l_mld_key IS NOT NULL
|
|
THEN
|
|
-- Er is een vorige indicatie met meer uren, die is de 'baas'.
|
|
-- Dat betekent dat de goede maandag van de beschikking b2 verder, naar de volgende week wordt gezet
|
|
-- (ipv standaard op maandag deze week)
|
|
|
|
SELECT ( TRUNC (mld_melding_datum) + 7
|
|
- DECODE (TO_CHAR (mld_melding_datum, 'D'), '1', 8, TO_CHAR (mld_melding_datum, 'D'))
|
|
+ 2)
|
|
INTO l_good_monday
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = p_mld_key;
|
|
ELSE
|
|
-- Er is GEEN vorige indicatie bestaat of GEEN vorige indicatie met MEER uren, dus deze is de 'baas'.
|
|
-- Dat betekent dat de goede maandag van de beschikking b2 standaard op maandag deze week komt te staan.
|
|
SELECT ( TRUNC (mld_melding_datum)
|
|
- DECODE (TO_CHAR (mld_melding_datum, 'D'), '1', 8, TO_CHAR (mld_melding_datum, 'D'))
|
|
+ 2)
|
|
INTO l_good_monday
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = p_mld_key;
|
|
END IF;
|
|
|
|
RETURN l_good_monday;
|
|
END;
|
|
|
|
FUNCTION goodmonday_end (p_mld_key IN NUMBER)
|
|
RETURN DATE
|
|
IS
|
|
-- Herindicaties/vorige indicaties van dezelfde client die in dezelfde week start/eindigt.
|
|
|
|
l_mld_key NUMBER(10);
|
|
l_good_monday DATE;
|
|
|
|
BEGIN
|
|
--- Volgende beschikking: bij herindicatie midden in de week is 1 van beide beschikkingen geldig
|
|
--- Herindicatie midden in de week wordt gekenmerkt door:
|
|
--- dezelfde client, dezelfde gemeente, eindjaar/week van de vorige is gelijk aan beginjaar/week van herindicatie,
|
|
--- en het maakt niet uit wat de product is/wordt.
|
|
--- Baas' van dubbele beschikking is diegene met de meeste aantal uren, ongeacht HV1->HV2 overgang.
|
|
--- Bij gelijke aantal uren is de nieuwe beschikking de baas.
|
|
|
|
-- Controleer of die er is, en zo ja, selecteer de volgende beschikking b2 van de beschikking b1 die MEER
|
|
-- of GELIJK AANTAL uren heeft.
|
|
SELECT MAX(b2.mld_melding_key)
|
|
INTO l_mld_key
|
|
FROM care_v_beschikking_all b1, care_v_beschikking_all b2
|
|
WHERE b1.mld_melding_key = p_mld_key
|
|
AND b1.mld_melding_key <> b2.mld_melding_key
|
|
AND b2.mld_melding_status <> 1
|
|
AND b1.beschikking_week_tot = b2.beschikking_week_van
|
|
AND b1.beschikking_jaar_tot = b2.beschikking_jaar_van
|
|
AND b1.prs_client_key = b2.prs_client_key
|
|
AND b1.gemeente_code = b2.gemeente_code
|
|
AND b2.uren_beschikking >= b1.uren_beschikking;
|
|
|
|
|
|
IF l_mld_key IS NOT NULL
|
|
THEN
|
|
-- Er is een volgende indicatie b2 met MEER of GELIJK AANTAL uren, die is de 'baas' is.
|
|
-- Dat betekent dat de goede maandag van de beschikking b2 op de maandag van deze week wordt gezet
|
|
-- (ipv standaard op maandag de volgende week)
|
|
|
|
SELECT ( TRUNC (mld_melding_einddatum)
|
|
- DECODE (TO_CHAR (mld_melding_einddatum, 'D'), '1', 8, TO_CHAR (mld_melding_einddatum, 'D'))
|
|
+ 2)
|
|
INTO l_good_monday
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = p_mld_key;
|
|
|
|
|
|
ELSE
|
|
-- Er is GEEN volgende indicatie is of GEEN volgende indicatie met MEER of GELIJK AANTAL uren, dus deze is de 'baas'.
|
|
-- Dat betekent dat de goede maandag van de beschikking b2 standaard op maandag van de volgende week komt te staan.
|
|
|
|
SELECT ( TRUNC (mld_melding_einddatum) + 7
|
|
- DECODE (TO_CHAR (mld_melding_einddatum, 'D'), '1', 8, TO_CHAR (mld_melding_einddatum, 'D'))
|
|
+ 2)
|
|
INTO l_good_monday
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = p_mld_key;
|
|
END IF;
|
|
|
|
RETURN l_good_monday;
|
|
END;
|
|
|
|
PROCEDURE care_v_rap2_factuur_uren_a
|
|
( 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;
|
|
BEGIN
|
|
|
|
|
|
DELETE FROM care_periode;
|
|
|
|
INSERT INTO care_periode (jaar, periode, week, maandag)
|
|
SELECT
|
|
TO_CHAR (SYSDATE - 7*(LEVEL-1), 'IYYY') jaar,
|
|
LEAST(FLOOR((TO_CHAR (SYSDATE - 7*(LEVEL-1),'IW') - 1) /4) + 1, 13) periode,
|
|
TO_CHAR (SYSDATE - 7*(LEVEL-1), 'IW') week,
|
|
TRUNC (SYSDATE - 7*(LEVEL-1), 'IW') startdatum
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 1*52+1;
|
|
|
|
DELETE FROM CARE_T_BESCHIKK_X_PERIODETABEL;
|
|
|
|
INSERT INTO CARE_T_BESCHIKK_X_PERIODETABEL(JAAR, PERIODE,WEEK_VAN,WEEK_TM,BSN,PRODUCT,UREN_BESCHIKKING)
|
|
SELECT pw.jaar, pw.periode, MIN(week), MAX(week), b.client_bsn, b.product, SUM(b.uren_beschikking)
|
|
FROM care_periode pw, care_v_beschikking_all b
|
|
WHERE pw.maandag >= B.BESCHIKKING_MAANDAG_VAN
|
|
AND pw.maandag < B.BESCHIKKING_MAANDAG_TOT
|
|
AND b.beschikking_datum_tot >= sysdate - 53*7
|
|
GROUP BY pw.jaar, pw.periode, b.client_bsn, b.product;
|
|
|
|
OPEN p_cursor FOR
|
|
'SELECT
|
|
fclt_f_periode,
|
|
factuurdatum,
|
|
wzacode,
|
|
fclt_f_gemeente,
|
|
beschikkingsnr,
|
|
bsn_client,
|
|
client,
|
|
geboortedatum,
|
|
uren_periode,
|
|
indicatie_uren,
|
|
product,
|
|
tarief,
|
|
uren,
|
|
minuten,
|
|
bedrag_euro,
|
|
bedrag_centen
|
|
FROM care_v_rap2_factuur_uren_a' || p_where;
|
|
|
|
END care_v_rap2_factuur_uren_a;
|
|
|
|
|
|
PROCEDURE care_v_rap2_factuur_uren_e
|
|
( 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;
|
|
BEGIN
|
|
|
|
DELETE FROM care_periode;
|
|
|
|
INSERT INTO care_periode (jaar, periode, week, maandag)
|
|
SELECT
|
|
TO_CHAR (SYSDATE - 7*(LEVEL-1), 'IYYY') jaar,
|
|
LEAST(FLOOR((TO_CHAR (SYSDATE - 7*(LEVEL-1),'IW') - 1) /4) + 1, 13) periode,
|
|
TO_CHAR (SYSDATE - 7*(LEVEL-1), 'IW') week,
|
|
TRUNC (SYSDATE - 7*(LEVEL-1), 'IW') startdatum
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 1*52+1;
|
|
|
|
DELETE FROM CARE_T_BESCHIKK_X_PERIODETABEL;
|
|
|
|
INSERT INTO CARE_T_BESCHIKK_X_PERIODETABEL(JAAR, PERIODE,WEEK_VAN,WEEK_TM,BSN,PRODUCT,UREN_BESCHIKKING)
|
|
SELECT pw.jaar, pw.periode, MIN(week), MAX(week), b.client_bsn, b.product, SUM(b.uren_beschikking)
|
|
FROM care_periode pw, care_v_beschikking_all b
|
|
WHERE pw.maandag >= B.BESCHIKKING_MAANDAG_VAN
|
|
AND pw.maandag < B.BESCHIKKING_MAANDAG_TOT
|
|
AND b.beschikking_datum_tot >= sysdate - 53*7
|
|
GROUP BY pw.jaar, pw.periode, b.client_bsn, b.product;
|
|
|
|
OPEN p_cursor FOR
|
|
'SELECT
|
|
fclt_x_periode,
|
|
periode,
|
|
weeknrs,
|
|
factuurnummer,
|
|
wzacode,
|
|
fclt_f_gemeente,
|
|
bsn_client,
|
|
client,
|
|
geboortedatum,
|
|
uren_periode,
|
|
indicatie_uren,
|
|
product,
|
|
tarief,
|
|
uren,
|
|
bedrag_euro
|
|
FROM care_v_rap2_factuur_uren_e' || p_where;
|
|
|
|
END care_v_rap2_factuur_uren_e;
|
|
|
|
END care;
|
|
/
|
|
|
|
REGISTERRUN('$Id$')
|
|
|
|
#endif // CARE
|