#!/usr/bin/perl use CGI qw(:standard); print "Content-type: text/html\n\n"; print "Time Clock\n"; print ""; my @week = ("monday","tuesday","wednesday","thursday","friday"); my %timeclock; if(param()) { $timeclock{total} = 0; foreach $day(@week) { $day =~ /^(...)/; $timeclock{$day}{in} = checkampm("$1in"); $timeclock{$day}{lout} = checkampm("$1lout"); $timeclock{$day}{lin} = checkampm("$1lin"); $timeclock{$day}{out} = checkampm("$1out"); $timeclock{$day}{time} = calculate_time($day); $timeclock{$day}{action} = param("action$day"); if(param("action") eq "Fill out All") { $timeclock{$day}{action} = "Fill out"; } } calculate_total(); foreach $day(@week) { if($timeclock{$day}{action} eq "Fill out") { $day =~ /^(...)/; $miniday = $1; if($timeclock{$day}{in} eq "") { $timeclock{$day}{in} = "8:00"; param( $miniday . "in" => mil_to_reg_time($timeclock{$day}{in}) ); } if($timeclock{$day}{lout} eq "") { $timeclock{$day}{lout} = "12:00"; param( $miniday . "loutampm" => "pm" ); param( $miniday . "lout" => mil_to_reg_time($timeclock{$day}{lout}) ); } if($timeclock{$day}{lin} eq "") { my ($hours, $mins) = split /:/, $timeclock{$day}{lout}; if($hours > 11) { $hours = ($hours + 1); param( $miniday . "linampm" => "pm" ); } else { $hours += 1; param( $miniday . "linampm" => "am" ); } $timeclock{$day}{lin} = "$hours:$mins"; param( $miniday . "lin" => mil_to_reg_time($timeclock{$day}{lin}) ); } if($timeclock{$day}{out} eq "") { my ($hours, $mins) = split /:/, $timeclock{$day}{lin}; my $first_half = time_diff($timeclock{$day}{in}, $timeclock{$day}{lout}); my $mindiff = ((8 * 60) - $first_half); $full_time = ((($hours * 60) + $mins) + $mindiff); $mins = $full_time % 60; $hours = ($full_time - $mins) / 60; if($mins < 10){$mins = "0$mins";} if($hours > 11) { param( $miniday . "outampm" => "pm" ); } else { param( $miniday . "outampm" => "am" ); } $timeclock{$day}{out} = "$hours:$mins"; param( $miniday . "out" => mil_to_reg_time($timeclock{$day}{out}) ); } $timeclock{$day}{time} = calculate_time($day); calculate_total(); } } } print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print start_form(); foreach $day(@week) { $day =~ /^(...)/; $miniday = $1; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if($timeclock{$day}{time}) { print "\n"; } else { print ""; } print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print end_form(); print "
INLUNCH OUTLUNCH INOUTTotal
" , "$day" , "" , textfield(-name => "$miniday" . "in", -size=>6) , radio_group(-name=>"$miniday" . "inampm", -values=>['am','pm']) , "" , textfield(-name => "$miniday" . "lout", -size=>6) , radio_group(-name=>"$miniday" . "loutampm", -values=>['am','pm']) ,"" , textfield(-name => "$miniday" . "lin", -size=>6) , radio_group(-name=>"$miniday" . "linampm", -values=>['am','pm'], -default=>'pm') ,"" , textfield(-name => "$miniday" . "out", -size=>6) , radio_group(-name=>"$miniday" . "outampm", -values=>['am','pm'], -default=>'pm') ,"$timeclock{$day}{time}" . submit(-name =>"action$day", -value=>"Fill out") . "
Total Time:$timeclock{total}
"; print submit(-name =>"action", -value=>"Submit Time"); print "\n"; print submit(-name =>"action", -value=>"Fill out All"); print "
\n"; print "\n"; print "\n"; sub calculate_time { my $day = shift; my $in = $timeclock{$day}{in}; my $lout = $timeclock{$day}{lout}; my $lin = $timeclock{$day}{lin}; my $out = $timeclock{$day}{out}; foreach(($in,$lout,$lin,$out)) { if($_ eq "") { return $_; } } my $first_half = time_diff($in, $lout); my $second_half = time_diff($lin, $out); my $full_time = $first_half + $second_half; my $hours, $mins; $mins = $full_time % 60; $hours = ($full_time - $mins) / 60; if($mins < 10){$mins = "0$mins";} if($hours < 10){$hours = "0$hours";} return "$hours:$mins"; } sub time_diff { my ($in, $out) = @_; my ($inhours, $inmins) = split /:/, $in; my ($outhours, $outmins) = split /:/, $out; my $time; return ((($outhours * 60) + $outmins) - (($inhours * 60) + $inmins)); } sub checkampm { my $param = shift; my $time = param("$param"); if($time eq "") { return $time; } my $ampm = param("$param" . ampm); my ($hours, $mins) = split /:/, $time; if(($ampm eq "pm") && ($hours < 12)) { $hours += 12; } return "$hours:$mins"; } sub calculate_total { $timeclock{total} = ""; foreach $day(@week) { if($timeclock{$day}{time}) { ($hours, $mins) = split /:/, $timeclock{$day}{time}; $mins += ($hours * 60); $timeclock{total} += $mins; } } $mins = $timeclock{total} % 60; $hours = ($timeclock{total} - $mins) / 60; if($hours < 10){ $hours = "0$hours";} if($mins < 10){ $mins = "0$mins";} $timeclock{total} = "$hours:$mins"; } sub mil_to_reg_time { my ($hours, $mins) = split /:/, shift; if($hours > 12){ $hours -= 12; } return "$hours:$mins"; }