source: trunk/LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Controller/Json/Timeline.pm @ 1686

Last change on this file since 1686 was 1686, checked in by nanardon, 8 years ago

Add next employment/last end date when no active employment are found to timeline

File size: 4.7 KB
Line 
1package LATMOS::Accounts::Web::Controller::Json::Timeline;
2use Moose;
3use namespace::autoclean;
4
5use DateTime;
6use Date::Parse;
7
8BEGIN { extends 'Catalyst::Controller'; }
9
10=head1 NAME
11
12LATMOS::Accounts::Web::Controller::Json::Timeline - Catalyst Controller
13
14=head1 DESCRIPTION
15
16Catalyst Controller.
17
18=head1 METHODS
19
20=cut
21
22
23=head2 index
24
25=cut
26
27sub index :Path :Args(1) {
28    my ( $self, $c, $user ) = @_;
29
30    my $base = $c->model('Accounts')->db;
31    my $ouser = $base->get_object('user', $user)
32        or return;
33
34    my @colors = qw(black silver green blue red);
35    my %colorset;
36
37
38    my $var = {
39        start => $ouser->get_attributes('create'),
40        end => undef,
41        employments => {
42            name => 'Employment',
43            color => '#000000',
44            spans => [],
45            events => [],
46        },
47    };
48
49    foreach my $emp ($ouser->listEmployment) {
50        my $employment = $base->get_object('employment', $emp);
51
52        my $vemp = {
53            name => ($employment->get_attributes('contratType') || ''),
54            start => $employment->get_attributes('firstday'),
55            end => $employment->get_attributes('lastday') || undef,
56        };
57
58        if (!$colorset{$vemp->{name}}) {
59            $colorset{$vemp->{name}} = $colors[0];
60            push(@colors, shift(@colors));
61        }
62        $vemp->{color} =  $colorset{$vemp->{name}};
63
64        if (!$vemp->{end}) {
65            my $dt = DateTime->now();
66            $dt->add(days => 3 * 365);
67            $vemp->{end} = $dt->ymd('-') . ' ' . $dt->hms;
68        }
69
70        $vemp->{start} .= ' 00:00:00';
71        $vemp->{end}   .= ' 23:59:59';
72
73        push(@{$var->{employments}{spans}}, $vemp);
74    }
75
76    my $dtnow = DateTime->now;
77    push(@{$var->{employments}{events}}, {
78            name => $c->loc('Today'),
79            date => $dtnow->ymd . ' ' . $dtnow->hms,
80    });
81    push(@{$var->{employments}{events}}, {
82            name => $c->loc('Created'),
83            date => $ouser->get_attributes('create'),
84    });
85    if (my $expire = $ouser->get_attributes('expire')) {
86        push(@{$var->{employments}{events}}, {
87                name => $c->loc('Expire'),
88                date => $expire,
89                options => {
90                    type => 'alarm',
91                }
92        });
93    }
94    if (my $endcircuit = $ouser->get_attributes('endcircuit')) {
95        push(@{$var->{employments}{events}}, {
96                name => $c->loc('End of entrance'),
97                date => $endcircuit,
98                options => {
99                    type => 'alarm',
100                }
101        });
102    }
103    if (my $date = $ouser->get_attributes('startEmployment')) {
104        push(@{$var->{employments}{events}}, {
105                name => $c->loc('Activity start'),
106                date => $date,
107                options => {
108                    type => 'employment',
109                    showdate => 1,
110                }
111        });
112    } elsif (my $nextemp = $ouser->get_attributes('nextEmployment')) {
113        my $emp = $base->get_object('employment', $nextemp);
114        my $date = $emp->get_attributes('firstday') . ' 00:00:00';
115        push(@{$var->{employments}{events}}, {
116                name => $c->loc('Activity start'),
117                date => $date,
118                options => {
119                    type => 'employment',
120                    showdate => 1,
121                }
122        });
123    }
124
125
126    if (my $date = $ouser->get_attributes('endEmployment')) {
127        push(@{$var->{employments}{events}}, {
128                name => $c->loc('Activity end'),
129                date => $date,
130                options => {
131                    type => 'employment',
132                    showdate => 1,
133                }
134        });
135    } elsif (my $date = $ouser->get_attributes('endLastEmployment')) {
136        push(@{$var->{employments}{events}}, {
137                name => $c->loc('Activity end'),
138                date => $date,
139                options => {
140                    type => 'employment',
141                    showdate => 1,
142                }
143        });
144    }
145
146    foreach (@{ $var->{employments}{spans} }) {
147        $var->{end}   = $_->{end}   if ((!$var->{end})   || $_->{end} gt $var->{end});
148        $var->{start} = $_->{start} if ((!$var->{start}) || $_->{start} lt $var->{start});
149    }
150    foreach (@{ $var->{employments}{events} }) {
151        $var->{end}   = $_->{date}   if ((!$var->{end})   || $_->{date} gt $var->{end});
152        $var->{start} = $_->{date}   if ((!$var->{start}) || $_->{date} lt $var->{start});
153    }
154
155    $c->stash->{data} = $var;
156}
157
158
159
160=encoding utf8
161
162=head1 AUTHOR
163
164Olivier Thauvin,Guyancourt - B1428,+33 1 80285052,
165
166=head1 LICENSE
167
168This library is free software. You can redistribute it and/or modify
169it under the same terms as Perl itself.
170
171=cut
172
173__PACKAGE__->meta->make_immutable;
174
1751;
Note: See TracBrowser for help on using the repository browser.