App-Jiffy
view release on metacpan or search on metacpan
lib/App/Jiffy/View/Timesheet.pm view on Meta::CPAN
package App::Jiffy::View::Timesheet;
use strict;
use warnings;
use App::Jiffy::TimeEntry;
use App::Jiffy::Util::Duration qw/round/;
use DateTime;
sub render {
my $entries = shift;
my $options = shift;
my $from = $options->{from};
# Header
if ($from) {
print "The past " . $from . " days' timesheet:\n\n";
} else {
print "Today's timesheet:\n\n";
}
my $current_day = $entries->[0]->start_time->clone->truncate( to => 'day' );
if ($from) {
print "Date: " . $current_day->mdy('/') . "\n";
}
foreach my $entry (@$entries) {
my $start_time = $entry->start_time->clone;
if (
DateTime->compare( $current_day, $start_time->truncate( to => 'day' ) )
== -1 )
{
$current_day = $start_time->truncate( to => 'day' );
print "\nDate: " . $current_day->mdy('/') . "\n";
}
# Get the deltas
my $duration = $entry->duration;
my %deltas = $duration->deltas;
foreach my $unit ( sort keys %deltas ) {
next unless $deltas{$unit};
print $deltas{$unit} . " " . $unit . " ";
}
# Print entry
if ( $options->{verbose} ) {
my ($clock_time) = $entry->start_time->hms =~ /(.*):.*$/;
print "\t " .
# Time
$clock_time .
# Title
"\t" . $entry->title . "\n";
} else {
print "\t " . $entry->title . "\n";
}
}
}
1;
( run in 0.601 second using v1.01-cache-2.11-cpan-302cb4679cc )