144 lines
5.0 KiB
SQL
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
|