Files
Database/_UP/431to431.3.sql
Jos Groot Lipman 847617911e FSN #495
svn path=/Database/trunk/; revision=8320
2003-08-20 12:32:28 +00:00

144 lines
5.0 KiB
SQL

SET PAGESIZE 0
SET HEADING OFF
SET TERMOUT ON
SET HEADING OFF
SET FEEDBACK ON
SET ECHO ON
SET VERIFY OFF
SET LINESIZE 1000
SET SERVEROUTPUT ON;
UPDATE FAC_MODULE SET fac_module_VERSION='04.31.3';
COMMIT;
CREATE OR REPLACE PACKAGE MLD_P_MLD_DATUMTIJD AS
FUNCTION DatumTijdPlusUitvoerTijd(BeginDatum IN DATE
,UitvoerTijd IN NUMBER
,UitvoerTijdType IN VARCHAR2) RETURN DATE;
PRAGMA RESTRICT_REFERENCES (DatumTijdPlusUitvoerTijd, WNDS, WNPS);
END mld_p_mld_datumtijd;
/
CREATE OR REPLACE PACKAGE BODY Mld_P_Mld_Datumtijd AS
BeginWerkTijd DATE := TO_DATE('08:00','HH24:MI');
EindWerkTijd DATE := TO_DATE('17:00','HH24:MI');
BeginWerkUur NUMBER(4,2) := TO_NUMBER(TO_CHAR(BeginWerkTijd, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
EindWerkUur NUMBER(4,2) := TO_NUMBER(TO_CHAR(EindWerkTijd, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
AantalWerkUren NUMBER(4,2) := EindWerkUur - BeginWerkUur;
FUNCTION DatumTijdPlusUitvoerTijd(BeginDatum IN DATE
,UitvoerTijd IN NUMBER
,UitvoerTijdType IN VARCHAR2 ) RETURN DATE IS
OldDatumGereed DATE;
NewDatumGereed DATE;
DagVdWeek NUMBER(3,0);
VrijeDagen NUMBER(3,0);
AantalWerkweken NUMBER(3,0);
AantalDagen NUMBER(3,0);
AantaLDagenOver NUMBER(3,0);
BeginUur NUMBER(5,2);
EindUur NUMBER(5,2);
NewUitvoerTijd NUMBER(5,2);
BeginWerkNr NUMBER(5,2);
EindeWerkNr NUMBER(5,2);
WerkUrenNr NUMBER(5,2);
BeginUurNr NUMBER(5,2);
UitvoerNr NUMBER(5,2);
EindUurNr NUMBER(5,2);
NewUitvoerNr NUMBER(5,2);
ReturnVal DATE;
BEGIN
IF UitvoerTijd IS NOT NULL
AND BeginDatum IS NOT NULL
AND UitvoerTijdType = 'DAGEN'
THEN
OldDatumGereed := BeginDatum;
NewDatumGereed := OldDatumGereed;
AantalWerkweken := TRUNC(UitvoerTijd / 5);
AantalDagenOver := UitvoerTijd MOD 5;
NewDatumGereed := NewDatumGereed + (AantalWerkweken * 7);
SELECT TO_NUMBER(TO_CHAR(NewDatumGereed, 'D'))
INTO DagVdWeek
FROM DUAL;
NewDatumGereed := NewDatumGereed + AantalDagenOver;
IF DagVdWeek + AantalDagenOver > 8
THEN
NewDatumGereed := NewDatumGereed + 2;
END IF;
LOOP
SELECT TO_NUMBER(TO_CHAR(NewDatumGereed, 'D'))
INTO DagVdWeek
FROM DUAL;
IF DagVdWeek = 1 OR DagVdWeek = 7
THEN
NewDatumGereed := NewDatumGereed + 2;
END IF;
SELECT COUNT(*)
INTO VrijeDagen
FROM MLD_VRIJE_DAGEN
WHERE mld_vrije_dagen_datum > OldDatumGereed
AND mld_vrije_dagen_datum <= NewDatumGereed;
IF VrijeDagen > 0
THEN
OldDatumGereed := NewDatumGereed;
NewDatumGereed := NewDatumGereed + VrijeDagen;
END IF;
IF DagVdWeek > 1 AND DagVdWeek < 7
AND VrijeDagen = 0
THEN
EXIT;
END IF;
END LOOP;
ReturnVal := NewDatumGereed;
ELSIF UitvoerTijd IS NOT NULL
AND BeginDatum IS NOT NULL
AND UitvoerTijdType = 'UREN'
THEN
BeginUur := TO_NUMBER(TO_CHAR(BeginDatum, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
BeginWerkNr := TRUNC(BeginWerkUur) + (BeginWerkUur - TRUNC(BeginWerkUur))/0.6;
EindeWerkNr := TRUNC(EindWerkUur) + (EindWerkUur - TRUNC(EindWerkUur ))/0.6;
BeginUurNr := TRUNC(BeginUur) + (BeginUur - TRUNC(BeginUur ))/0.6;
UitvoerNr := TRUNC(UitvoerTijd) + (UitvoerTijd - TRUNC(UitvoerTijd ))/0.6;
WerkUrenNr := EindeWerkNr - BeginWerkNr;
EindUurNr := BeginUurNr + UitvoerNr;
AantalDagen := 0;
--
IF EindUurNr > EindeWerkNr
THEN
AantalDagen := TRUNC(EindUurNr / WerkUrenNr);
EindUurNr := EindUurNr - AantalDagen * WerkUrenNr;
END IF;
EindUur := TRUNC(EindUurNr) + (EindUurNr - TRUNC(EindUurNr))*0.6;
OldDatumGereed := TO_DATE(TO_CHAR(TRUNC(BeginDatum), 'DD-MM-YYYY') || ' '
|| TO_CHAR(EindUur, '09.99'), 'DD-MM-YYYY HH24.MI');
IF AantalDagen > 0
THEN
ReturnVal := DatumTijdPlusUitvoerTijd(OldDatumGereed, AantalDagen, 'DAGEN');
ELSE
ReturnVal := OldDatumGereed;
END IF;
ELSE
ReturnVal := NULL;
END IF;
RETURN ReturnVal;
END;
END Mld_P_Mld_Datumtijd;
/
SET TERMOUT OFF
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO ON
SET FEEDBACK ON
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Facilitor 4.31.3'
WHERE FAC_MESSAGE_CODE = 'FAC_M002'
;
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Welkom bij Facilitor 4.31.3'
WHERE FAC_MESSAGE_CODE = 'FAC_M035'
;
COMMIT;
SET ECHO OFF