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

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

speedup office web page

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    if (my $date = $ouser->get_attributes('endEmployment')) {
126        push(@{$var->{employments}{events}}, {
127                name => $c->loc('Activity end'),
128                date => $date,
129                options => {
130                    type => 'employment',
131                    showdate => 1,
132                }
133        });
134    } elsif (my $date = $ouser->get_attributes('endLastEmployment')) {
135        push(@{$var->{employments}{events}}, {
136                name => $c->loc('Activity end'),
137                date => $date,
138                options => {
139                    type => 'employment',
140                    showdate => 1,
141                }
142        });
143    }
144
145    foreach (@{ $var->{employments}{spans} }) {
146        $var->{end}   = $_->{end}   if ((!$var->{end})   || $_->{end} gt $var->{end});
147        $var->{start} = $_->{start} if ((!$var->{start}) || $_->{start} lt $var->{start});
148    }
149    foreach (@{ $var->{employments}{events} }) {
150        $var->{end}   = $_->{date}   if ((!$var->{end})   || $_->{date} gt $var->{end});
151        $var->{start} = $_->{date}   if ((!$var->{start}) || $_->{date} lt $var->{start});
152    }
153
154    $c->stash->{data} = $var;
155}
156
157
158
159=encoding utf8
160
161=head1 AUTHOR
162
163Olivier Thauvin,Guyancourt - B1428,+33 1 80285052,
164
165=head1 LICENSE
166
167This library is free software. You can redistribute it and/or modify
168it under the same terms as Perl itself.
169
170=cut
171
172__PACKAGE__->meta->make_immutable;
173
1741;
Note: See TracBrowser for help on using the repository browser.