Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Time Card Processing
Message
 
To
11/06/2008 20:03:09
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01320618
Message ID:
01323535
Views:
25
Here's the program in test mode:
* Program to test the Post_Time_Clock.
* Cecil

*dClockedOut=CTOD(LEFT(employee.outtime ,10))
*dClockedIn =CTOD(LEFT(employee.intime,10))
dClockedOut={^2008/06/10}
dClockedIn ={^2008/06/10}

cActualStartTime="06:14"
cShiftStartTime="06:30"
cScheduledShiftStartMinute=SUBSTR(cShiftStartTime, 4, 2)

cActualEndTime="14:30"
cActualEndHour=LEFT(cActualEndTime, 2)
cActualEndMinute=SUBSTR(cActualEndTime, 4, 2)

cActualStartHour=LEFT(cActualStartTime, 2)
cActualStartMinute=SUBSTR(cActualStartTime, 4, 2)

set step on

IF EMPTY(cShiftStartTime)
   cScheduledStartMinute="00"
   IF cActualStartMinute > "15"
      cScheduledStartHour=STR(VAL(cActualStartHour)+1)
   ELSE
      cScheduledStartHour=cActualStartHour
   ENDIF
ELSE
   cScheduledStartHour=LEFT(cShiftStartTime,2)
   cScheduledStartMinute=SUBSTR(cShiftStartTime,4,2)
ENDIF
cScheduledStartHour=ALLTRIM(cScheduledStartHour)
cScheduledStartMinute=ALLTRIM(cScheduledStartMinute)

iScheduledStartMinutes=;
	(60 * VAL(cScheduledStartHour)) + VAL(cScheduledStartMinute)
iActualStartMinutes=;
	(60 * VAL(cActualStartHour)) + VAL(cActualStartMinute)
iEarlyOrLateMinutes =;
	(iScheduledStartMinutes - iActualStartMinutes)

* The cEffectiveStartHour and cEffectiveStartMinute are used for calculations.
DO CASE
   * Employee Clocked In over 15 minutes EARLY. Ex: 05:44.
   CASE iEarlyOrLateMinutes > 15
      cEffectiveStartHour=cActualStartHour
      cEffectiveStartMinute=cActualStartMinute
      * Employee Clocked In LATE. Ex: 06:01.
   CASE iEarlyOrLateMinutes < 0
      *cEffectiveStartHour=STR(VAL(cActualStartHour) - iAdjustStartHours)
      cEffectiveStartHour=cActualStartHour
      cEffectiveStartMinute=cActualStartMinute
   OTHERWISE	&& Employee Clocked In on time. Scheduled Shift Start.
      cEffectiveStartHour=cScheduledStartHour
      cEffectiveStartMinute=cScheduledStartMinute
ENDCASE
cEffectiveStartHour=ALLTRIM(cEffectiveStartHour)
cEffectiveStartMinute=ALLTRIM(cEffectiveStartMinute)
cEffectiveStartTime=PADL(ALLTRIM(cEffectiveStartHour),2,"0")+':'+PADL(ALLTRIM(cEffectiveStartMinute),2,"0")

* Do some calculating to determine the Scheduled End Hour.

* Convert the END HOUR and END MINUTE into END MINUTES.
iActualEndMinutes=(60 * VAL(cActualEndHour)) + VAL(cActualEndMinute)
*iTotalActualMinutes=(iActualEndMinutes - iActualStartMinutes)

* Convert the Effective START HOUR and Effective START MINUTE into Effective Start Minutes.
iEffectiveStartMinutes = (60 * VAL(cEffectiveStartHour)) + VAL(cEffectiveStartMinute)
iTotalEffectiveMinutes=(iActualEndMinutes - iEffectiveStartMinutes)

iActualShiftHours=(iTotalEffectiveMinutes/60)
*!*iShiftMinutesRemainder=MOD(iTotalEffectiveMinutes, 60)
*IF iShiftMinutesRemainder >= 45	&& If the remaining minutes are > 45 Minutes,...
*   iTotalActualShiftHours=INT(ROUND(iActualShiftHours,0))	&& Rounds up to next hour.
*ELSE
   *iActualShiftHours=(iActualShiftHours + nPartialHour)
iTotalActualShiftHours=INT(iActualShiftHours)			&& No rounding. Integer only.
*ENDIF
*cScheduledEndHour=STR(VAL(cScheduledStartHour) + iTotalActualShiftHours - iAdjustStartHours)
cScheduledEndHour=STR(VAL(cEffectiveStartHour) + iTotalActualShiftHours)
cScheduledEndMinute=cScheduledStartMinute
* Check the 24 hour time and correct it, if necessary.
cScheduledEndHour=;
   IIF(VAL(cScheduledEndHour)>23,STR(VAL(cScheduledEndHour)-24),cScheduledEndHour)
iScheduledEndMinutes=(60 * VAL(cScheduledEndHour)) + VAL(cScheduledEndMinute)
iEarlyOrLateMinutes=(iScheduledEndMinutes - iActualEndMinutes)

*********************************************
*** (9F) CLOCK-OUT - EARLY OR LATE TESTS. ***
*********************************************
DO CASE
   CASE iEarlyOrLateMinutes > 0	&& Employee clocked out EARLY. Ex: 13:59.
      cEffectiveEndHour=STR(VAL(cActualEndHour) - iAdjustEndHours)
      *cEffectiveEndHour=STR(VAL(cScheduledEndHour) - iAdjustEndHours)
      cEffectiveEndMinute=cActualEndMinute
      *cEffectiveEndMinute=STR(iActualEndMinutes + iEarlyOrLateMinutes - (60 * VAL(cActualEndHour)))	
		
   CASE iEarlyOrLateMinutes < -15	&& Employee clocked out over 15 minutes LATE. Ex: 14:16.
      cEffectiveEndHour=STR(VAL(cActualEndHour) - iAdjustEndHours)
      *cEffectiveEndMinute=STR(iActualEndMinutes - iEarlyOrLateMinutes - (60 * VAL(cActualEndHour)))
      cEffectiveEndMinute=cActualEndMinute

   OTHERWISE  && Normal Shift End.
      cEffectiveEndHour=cScheduledEndHour
      cEffectiveEndMinute=cScheduledEndMinute
ENDCASE
cEffectiveEndHour=ALLTRIM(cEffectiveEndHour)
cEffectiveEndMinute=ALLTRIM(cEffectiveEndMinute)
************************************************************
* (9G) Put together complete END Time from the above code.
***************************************************************************
cEffectiveEndTime=;
   PADL(ALLTRIM(cEffectiveEndHour),2,"0")-':'-PADL(ALLTRIM(cEffectiveEndMinute),2,"0")

nPayHours=;
   (1440 * (dClockedOut - dClockedIn)) + ;
   60*VAL(SUBSTR(cEffectiveEndTime,1,2))+VAL(SUBSTR(cEffectiveEndTime,4,2))- ;
   60*VAL(SUBSTR(cEffectiveStartTime,1,2))-VAL(SUBSTR(cEffectiveStartTime,4,2))

nPayHours = IIF(nPayHours < 0, 1440 + nPayHours, nPayHours)/60
nPayHours = ROUND(nPayHours, 2)
set step on

ASSERT = .F.
Previous
Reply
Map
View

Click here to load this message in the networking platform