1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package Open311::Endpoint::Service::Request::mySociety;
use Moo;
use MooX::HandlesVia;
extends 'Open311::Endpoint::Service::Request';
use DateTime;
use Open311::Endpoint::Service::Request::Update;
use Types::Standard ':all';
has updates => (
is => 'rw',
isa => ArrayRef[InstanceOf['Open311::Endpoint::Service::Request::Update']],
default => sub { [] },
handles_via => 'Array',
handles => {
_add_update => 'push',
get_updates => 'elements',
get_update => 'get',
has_updates => 'count',
filter_updates => 'grep',
}
);
sub add_update {
my ($self, %args) = @_;
my $update = Open311::Endpoint::Service::Request::Update->new(
%args,
service_request => $self,
service_request_id => $self->service_request_id,
);
$self->_add_update($update);
}
sub last_update {
my $self = shift;
return $self->has_updates ? $self->get_update(-1) : undef;
}
around updated_datetime => sub {
my ($orig, $self) = @_;
my $last_update = $self->last_update or return;
return $last_update->updated_datetime;
};
around status => sub {
my ($orig, $self) = @_;
my $last_update = $self->last_update or return 'open';
return $last_update->status;
};
1;
|