FSN#23620 Correctie datumtijdnaaruitvoertijd bij begindatum > einddatum

svn path=/Database/trunk/; revision=22875
This commit is contained in:
Maarten van der Heide
2014-10-09 13:56:06 +00:00
parent 564bcec2ae
commit 5d7de63e6e

View File

@@ -61,9 +61,9 @@ CREATE OR REPLACE PACKAGE fac AS
FUNCTION datumtijdplusuitvoertijd (begindatum IN DATE, uitvoertijd IN NUMBER, uitvoertijdtype IN VARCHAR2) RETURN DATE;
FUNCTION datumtijdplusuitvoertijd (begindatum IN DATE, uitvoertijd IN NUMBER, uitvoertijdtype IN VARCHAR2,
pBeginWerkUur IN NUMBER, pEindWerkUur IN NUMBER, pMode IN NUMBER) RETURN DATE;
FUNCTION datumtijdnaaruitvoertijd (begindatum IN DATE, einddatum IN DATE, uitvoertijdtype IN VARCHAR2) RETURN NUMBER;
FUNCTION datumtijdnaaruitvoertijd (begindatum IN DATE, einddatum IN DATE, uitvoertijdtype IN VARCHAR2) RETURN MLD_T_UITVOERTIJD;
FUNCTION datumtijdnaaruitvoertijd (begindatum IN DATE, einddatum IN DATE, uitvoertijdtype IN VARCHAR2,
pBeginWerkUur IN NUMBER, pEindWerkUur IN NUMBER, pMode IN NUMBER) RETURN NUMBER;
pBeginWerkUur IN NUMBER, pEindWerkUur IN NUMBER, pMode IN NUMBER) RETURN MLD_T_UITVOERTIJD;
FUNCTION getdatemillisec (i_date IN DATE) RETURN NUMBER;
FUNCTION usrrap_query (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
FUNCTION usrrap_orderby (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
@@ -690,7 +690,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS
END IF;
END IF;
END IF;
RETURN returnval;
END;
@@ -699,7 +698,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS
-- datumtijdplusuitvoertijd(begin, datumtijdnaaruitvoertijd(begin, eind, type), type) == eind
-- datumtijdnaaruitvoertijd(begin, datumtijdplusuitvoertijd(begin, uitvoertijd, type), type) == uitvoertijd
-- Is de luxe versie van count_Work_Days
FUNCTION datumtijdnaaruitvoertijd (begindatum IN DATE, einddatum IN DATE, uitvoertijdtype IN VARCHAR2) RETURN NUMBER
FUNCTION datumtijdnaaruitvoertijd (begindatum IN DATE, einddatum IN DATE, uitvoertijdtype IN VARCHAR2) RETURN MLD_T_UITVOERTIJD
AS
BEGIN
IF BeginWerkUur IS NULL OR EindWerkUur IS NULL
@@ -718,13 +717,14 @@ CREATE OR REPLACE PACKAGE BODY fac AS
pBeginWerkUur IN NUMBER,
pEindWerkUur IN NUMBER,
pMode IN NUMBER)
RETURN NUMBER
RETURN MLD_T_UITVOERTIJD
AS
urenperdag NUMBER (10, 3);
eerstedag NUMBER (10, 3);
laatstedag NUMBER (10, 3);
heledagen NUMBER (10);
vrijedagen NUMBER;
uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie
urenperdag NUMBER (10, 3);
eerstedag NUMBER (10, 3);
laatstedag NUMBER (10, 3);
heledagen NUMBER (10);
vrijedagen NUMBER;
BEGIN
IF begindatum IS NOT NULL
AND einddatum IS NOT NULL
@@ -732,23 +732,19 @@ CREATE OR REPLACE PACKAGE BODY fac AS
THEN
IF begindatum > einddatum
THEN
RETURN -datumtijdnaaruitvoertijd (einddatum,
begindatum,
uitvoertijdtype,
pBeginWerkUur,
pEindWerkUur,
pMode);
END IF;
IF pMode = 2
uitvoertijd := datumtijdnaaruitvoertijd (einddatum, begindatum, uitvoertijdtype, pBeginWerkUur, pEindWerkUur, pMode);
uitvoertijd.tijdsduur := -uitvoertijd.tijdsduur;
ELSIF pMode = 2
THEN
-- Zo simpel kan het zijn (igv. 24/7)!
-- Zo simpel kan het zijn igv. 24/7!
IF uitvoertijdtype IN ('D', 'DAGEN')
THEN
-- Per 5.4.3 kunnen hier gebroken dagen worden teruggegeven!
RETURN einddatum - begindatum;
uitvoertijd.tijdsduur := einddatum - begindatum;
uitvoertijd.eenheid := 'D';
ELSE -- default/uitvoertijdtype IN ('U', 'UREN')
RETURN (einddatum - begindatum) * 24;
uitvoertijd.tijdsduur := (einddatum - begindatum) * 24;
uitvoertijd.eenheid := 'U';
END IF;
ELSIF pBeginWerkUur BETWEEN 0 AND 24
AND pEindWerkUur BETWEEN 0 AND 24
@@ -825,24 +821,23 @@ CREATE OR REPLACE PACKAGE BODY fac AS
heledagen := fac.count_Work_Days (TRUNC (begindatum), TRUNC (einddatum)) - 1;
END IF;
END IF;
ELSE
RETURN NULL;
END IF;
DBMS_OUTPUT.put_line ('Eerstedag ' || TO_CHAR (eerstedag));
DBMS_OUTPUT.put_line ('Laatstedag ' || TO_CHAR (laatstedag));
DBMS_OUTPUT.put_line ('Heledagen ' || TO_CHAR (heledagen));
DBMS_OUTPUT.put_line ('Eerstedag ' || TO_CHAR (eerstedag));
DBMS_OUTPUT.put_line ('Laatstedag ' || TO_CHAR (laatstedag));
DBMS_OUTPUT.put_line ('Heledagen ' || TO_CHAR (heledagen));
IF uitvoertijdtype IN ('D', 'DAGEN')
THEN
-- Per 5.4.3 kunnen hier gebroken dagen worden teruggegeven!
RETURN (eerstedag + laatstedag + heledagen * urenperdag) / urenperdag;
ELSE -- default/uitvoertijdtype IN ('U', 'UREN')
RETURN eerstedag + laatstedag + heledagen * urenperdag;
IF uitvoertijdtype IN ('D', 'DAGEN')
THEN
-- Per 5.4.3 kunnen hier gebroken dagen worden teruggegeven!
uitvoertijd.tijdsduur := (eerstedag + laatstedag + heledagen * urenperdag) / urenperdag;
uitvoertijd.eenheid := 'D';
ELSE -- default/uitvoertijdtype IN ('U', 'UREN')
uitvoertijd.tijdsduur := eerstedag + laatstedag + heledagen * urenperdag;
uitvoertijd.eenheid := 'U';
END IF;
END IF;
ELSE
RETURN NULL;
END IF;
RETURN uitvoertijd;
END datumtijdnaaruitvoertijd;
FUNCTION getdatemillisec (i_date IN DATE)