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