ALLV#15820: d) SLA berekening houdt rekening met momentum van afmelden/afwijzen. Hiervoor nieuwe functie count_work_days_incltime gemaakt.

svn path=/Database/trunk/; revision=10030
This commit is contained in:
Marcel Bourseau
2009-06-16 13:16:08 +00:00
parent 4ff79cac48
commit 940de0ab87

View File

@@ -1,6 +1,6 @@
#ifdef FAC
/* $Revision: 163 $
* $Modtime: 6-05-09 16:19 $
/* $Revision: 164 $
* $Modtime: 15-06-09 16:01 $
*/
/*
@@ -454,6 +454,7 @@ CREATE OR REPLACE PACKAGE fac AS
FUNCTION safe_To_Date ( pchar IN VARCHAR2, pfmt IN VARCHAR2 ) RETURN DATE;
FUNCTION getrefwaarde (module IN VARCHAR2, kkey IN NUMBER, waarde IN VARCHAR2) RETURN VARCHAR2;
FUNCTION count_Work_Days ( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
FUNCTION count_Work_Days_InclTime ( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
PROCEDURE imp_getfield ( p_parseline IN OUT VARCHAR2,
p_fielddelimitor IN VARCHAR2,
p_field OUT VARCHAR2
@@ -693,14 +694,15 @@ CREATE OR REPLACE PACKAGE BODY fac AS
RETURN resultvalue;
END;
/* Werkt vast nog niet voor sqls -pf */
-- Return number of workdays between two dates, not including the startdate, weekends and holidays
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
FUNCTION count_Work_Days0( pdate1 IN DATE , pdate2 IN DATE, pInclTime IN BOOLEAN ) RETURN NUMBER IS
eikdag NUMBER;
v_date_from DATE;
v_date_to DATE;
v_time_from NUMBER;
v_time_to NUMBER;
v_extra_day NUMBER;
lbackwards BOOLEAN;
v_week NUMBER;
v_mod NUMBER;
@@ -723,10 +725,14 @@ CREATE OR REPLACE PACKAGE BODY fac AS
IF pdate1 > pdate2 THEN
v_date_from := TRUNC(pdate2);
v_date_to := TRUNC(pdate1);
v_time_from := to_char(pdate2,'sssss');
v_time_to := to_char(pdate1,'sssss');
lbackwards := TRUE;
ELSE
v_date_from := TRUNC(pdate1);
v_date_to := TRUNC(pdate2);
v_time_from := to_char(pdate1,'sssss');
v_time_to := to_char(pdate2,'sssss');
lbackwards := FALSE;
END IF;
@@ -755,6 +761,14 @@ CREATE OR REPLACE PACKAGE BODY fac AS
END IF;
END IF;
v_extra_day := 0;
IF pInclTime THEN
IF v_time_to > v_time_from THEN
v_extra_day := 1;
END IF;
END IF;
-- Determine the registered holidays between FROM and TO
SELECT count(*)
INTO v_holidays
@@ -762,14 +776,24 @@ CREATE OR REPLACE PACKAGE BODY fac AS
WHERE MLD_VRIJE_DAGEN_DATUM BETWEEN v_date_from AND v_date_to;
IF lbackwards THEN
RETURN 0 - (5 * v_week + v_mod - v_holidays);
RETURN 0 - (5 * v_week + v_mod + v_extra_day - v_holidays);
ELSE
RETURN 5 * v_week + v_mod - v_holidays;
RETURN 5 * v_week + v_mod + v_extra_day - v_holidays;
END IF;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
END;
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
BEGIN
RETURN count_Work_Days0(pdate1,pdate2, TRUE);
END;
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
BEGIN
RETURN count_Work_Days0(pdate1,pdate2, FALSE);
END;
PROCEDURE imp_getfield (
p_parseline IN OUT VARCHAR2,
p_fielddelimitor IN VARCHAR2,