Flow Logic
============
TOW TRUCK DRIVER - EACH DRIVER has TO have 40 HOURS BEFORE overtime kicks IN
ALL TIME IS IN military TIME, ALL Weeks BEGIN ON Sunday
ALL DATETIME's are based on United States Date and Time with 2 daylight savings to include
I SUM-up how many DRIVER HOURS FROM previous entries TO FIND greater than less than 40 FOR that WEEK
AND STORE a logical VALUE TO: llOver40 .T. OR .F.
DRIVER works 0700 TO 1700 REG TIME
DRIVER overtime IS OverTimeStart 1700 TO OverTimeEnd 0700
DRIVER creates an invoice WITH the invoice START TIME AND invoice Ending TIME, AND OTHER INFO
EMP/DRIVER FILE STRUCTURE
============================
DriverName = JOHN DOE
overtime START = 1700
OverTimeEnd = 0700
RegRate = $11.00
OverRate = $17.00
Need guidance OR pesudo CODE TO HELP me thru THIS please
should I convert ALL datetimes INTO seconfs AND THEN DO calculations/Logic?
SOME OF MY Logic - I KNOW I AM MISSING SOMETHING
I can think OF 4 possible cases TO CHECK
1) TIME period IS completely inside overtime
2) TIME period IS bigger than the overtime
3) TIME period starts BEFORE the overtime but ENDS inside the overtime
4) TIME period starts inside the overtime but ENDS AFTER the overtime
SELECT 0
USE invoice ALIAS invoice SHARED
SET ORDER TO NAME
SEEK 'JOHN DOE'
IF ! FOUND()
* someone deleted this driver, throw a flag/message to user
ENDIF
* found employee/driver
* I SUM-UP HOW MANY DRIVER HOURS FROM previous entries TO FIND greater than less than 40 FOR that WEEK
* AND STORE a logical VALUE TO: llOver40 .T. OR .F.
llOver40=.T. &&..force to over 40 hours
* set vars
lnRegHrs=0
lnOverHrs=0
* invoice times
ltInvStartTime=CTOT("2012-01-16T15:00:00") &&..invoice DateTime Start
ltInvEndTime=CTOT("2012-01-17T02:30:00") &&..invoice DateTime End
* emp start/end over times
ltEmpStartOver=CTOT("2012-01-16T17:00:00") &&..time driver starts overtime
ltEmpEndOver=CTOT("2012-01-17T07:00:00") &&..time driver ends overtime
DO CASE
* all overtime periods
* 1-16-12 17:00 1-16-12 15:00 1-17-12 02:30 1-17-12 07:00
CASE ltInvStartTime>=ltEmpStartOver AND ltInvEndTime <= ltEmpEndOver
IF llOver40 &&..if over 40 hours
lnOverHrs=ltInvEndTime-ltInvStartTime
ELSE
lnRegHours=ltInvEndTime-ltInvStartTime
ENDIF
REPLACE reghrs WITH lnRegHrs, OverHrs WITH lnOverHrs
RETURN .T.
* I GET PROGRAMMERS BLOCK HERE AND JUST TOTALLY LOSE IT
* Period bigger than end overtime
* 1-16-12 15:00 1-16-12 17:00 1-17-12 07:00 1-17-12 02:30
* .T. .T.
CASE ltInvStartTime <= ltEmpStartOver AND ltEmpEndOver >= ltInvEndTime
IF llOver40 &&..if over 40 hours
lnRegHrs=ltEmpStartOver-lnInvStartTime
lnOverHrs=ltInvEndTime-ltEmpStartOver
ELSE
lnRegHrs=(ltEmpStartOver-lnInvStartTime)+(ltInvEndTime-ltEmpStartOver)
ENDIF
REPLACE reghrs WITH lnRegHrs, OverHrs WITH lnOverHrs
RETURN .T.
* Period starts before emp start overtime but ends inside overtime period
* 1-16-12 15:00 1-16-12 17:00 1-17-12 02:30 1-17-12 07:00
* .T.
CASE ltInvStartTime <= ltEmpStartOver AND ltInvEndTime <= ltEmpEndOver AND ltInvEndTime >= ltEmpStartOver
* Period starts after overtime starts and goes beyond overtime
CASE ltInvStartTime >= ltEmpStartOver AND ltInvEndTime >= ltEmpEndOver AND ltInvStartTime <= ltEmpEndOver
ENDCASE
RETURN
Thanks,
Randy
============
TOW TRUCK DRIVER - EACH DRIVER has TO have 40 HOURS BEFORE overtime kicks IN
ALL TIME IS IN military TIME, ALL Weeks BEGIN ON Sunday
ALL DATETIME's are based on United States Date and Time with 2 daylight savings to include
I SUM-up how many DRIVER HOURS FROM previous entries TO FIND greater than less than 40 FOR that WEEK
AND STORE a logical VALUE TO: llOver40 .T. OR .F.
DRIVER works 0700 TO 1700 REG TIME
DRIVER overtime IS OverTimeStart 1700 TO OverTimeEnd 0700
DRIVER creates an invoice WITH the invoice START TIME AND invoice Ending TIME, AND OTHER INFO
EMP/DRIVER FILE STRUCTURE
============================
DriverName = JOHN DOE
overtime START = 1700
OverTimeEnd = 0700
RegRate = $11.00
OverRate = $17.00
Need guidance OR pesudo CODE TO HELP me thru THIS please
should I convert ALL datetimes INTO seconfs AND THEN DO calculations/Logic?
SOME OF MY Logic - I KNOW I AM MISSING SOMETHING
I can think OF 4 possible cases TO CHECK
1) TIME period IS completely inside overtime
2) TIME period IS bigger than the overtime
3) TIME period starts BEFORE the overtime but ENDS inside the overtime
4) TIME period starts inside the overtime but ENDS AFTER the overtime
SELECT 0
USE invoice ALIAS invoice SHARED
SET ORDER TO NAME
SEEK 'JOHN DOE'
IF ! FOUND()
* someone deleted this driver, throw a flag/message to user
ENDIF
* found employee/driver
* I SUM-UP HOW MANY DRIVER HOURS FROM previous entries TO FIND greater than less than 40 FOR that WEEK
* AND STORE a logical VALUE TO: llOver40 .T. OR .F.
llOver40=.T. &&..force to over 40 hours
* set vars
lnRegHrs=0
lnOverHrs=0
* invoice times
ltInvStartTime=CTOT("2012-01-16T15:00:00") &&..invoice DateTime Start
ltInvEndTime=CTOT("2012-01-17T02:30:00") &&..invoice DateTime End
* emp start/end over times
ltEmpStartOver=CTOT("2012-01-16T17:00:00") &&..time driver starts overtime
ltEmpEndOver=CTOT("2012-01-17T07:00:00") &&..time driver ends overtime
DO CASE
* all overtime periods
* 1-16-12 17:00 1-16-12 15:00 1-17-12 02:30 1-17-12 07:00
CASE ltInvStartTime>=ltEmpStartOver AND ltInvEndTime <= ltEmpEndOver
IF llOver40 &&..if over 40 hours
lnOverHrs=ltInvEndTime-ltInvStartTime
ELSE
lnRegHours=ltInvEndTime-ltInvStartTime
ENDIF
REPLACE reghrs WITH lnRegHrs, OverHrs WITH lnOverHrs
RETURN .T.
* I GET PROGRAMMERS BLOCK HERE AND JUST TOTALLY LOSE IT
* Period bigger than end overtime
* 1-16-12 15:00 1-16-12 17:00 1-17-12 07:00 1-17-12 02:30
* .T. .T.
CASE ltInvStartTime <= ltEmpStartOver AND ltEmpEndOver >= ltInvEndTime
IF llOver40 &&..if over 40 hours
lnRegHrs=ltEmpStartOver-lnInvStartTime
lnOverHrs=ltInvEndTime-ltEmpStartOver
ELSE
lnRegHrs=(ltEmpStartOver-lnInvStartTime)+(ltInvEndTime-ltEmpStartOver)
ENDIF
REPLACE reghrs WITH lnRegHrs, OverHrs WITH lnOverHrs
RETURN .T.
* Period starts before emp start overtime but ends inside overtime period
* 1-16-12 15:00 1-16-12 17:00 1-17-12 02:30 1-17-12 07:00
* .T.
CASE ltInvStartTime <= ltEmpStartOver AND ltInvEndTime <= ltEmpEndOver AND ltInvEndTime >= ltEmpStartOver
* Period starts after overtime starts and goes beyond overtime
CASE ltInvStartTime >= ltEmpStartOver AND ltInvEndTime >= ltEmpEndOver AND ltInvStartTime <= ltEmpEndOver
ENDCASE
RETURN
Thanks,
Randy