Skip to content

Commit

Permalink
[Bromley] Look for open events.
Browse files Browse the repository at this point in the history
  • Loading branch information
dracos committed Jun 29, 2020
1 parent 0c8abc4 commit d0006e8
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 4 deletions.
4 changes: 2 additions & 2 deletions perllib/FixMyStreet/App/Controller/Waste.pm
Expand Up @@ -136,7 +136,7 @@ sub construct_bin_request_form {
my $field_list = [];

foreach (@{$c->stash->{service_data}}) {
next unless $_->{next};
next unless $_->{next} && !$_->{request_open};
my $name = $_->{service_name};
my $containers = $_->{request_containers};
my $max = $_->{request_max};
Expand Down Expand Up @@ -237,7 +237,7 @@ sub construct_bin_report_form {
my $field_list = [];

foreach (@{$c->stash->{service_data}}) {
next unless $_->{last} && $_->{report_allowed};
next unless $_->{last} && $_->{report_allowed} && !$_->{report_open};
my $id = $_->{service_id};
my $name = $_->{service_name};
push @$field_list, "service-$id" => {
Expand Down
37 changes: 37 additions & 0 deletions perllib/FixMyStreet/Cobrand/Bromley.pm
Expand Up @@ -513,6 +513,9 @@ sub bin_services_for_address {
my $result = $echo->GetServiceUnitsForObject($property->{uprn});
return [] unless @$result;

my $events = $echo->GetEventsForObject($property->{id});
my $open = $self->_parse_open_events($events);

my @out;
foreach (@$result) {
next unless $_->{ServiceTasks};
Expand All @@ -523,12 +526,15 @@ sub bin_services_for_address {
next unless $schedules->{next} or $schedules->{last};

my $containers = $service_to_containers{$_->{ServiceId}};
my ($open_request) = grep { $_ } map { $open->{request}->{$_} } @$containers;
my $row = {
id => $_->{Id},
service_id => $_->{ServiceId},
service_name => $service_name_override{$_->{ServiceId}} || $_->{ServiceName},
report_allowed => within_working_days($schedules->{last}, 2),
report_open => $open->{missed}->{$_->{ServiceId}},
request_allowed => $request_allowed{$_->{ServiceId}},
request_open => $open_request,
request_containers => $containers,
request_max => $quantity_max{$_->{ServiceId}},
service_task_id => $servicetask->{Id},
Expand All @@ -547,6 +553,37 @@ sub bin_services_for_address {
return \@out;
}

sub _parse_open_events {
my $self = shift;
my $events = shift;
my $open;
foreach (@$events) {
next if $_->{ResolvedDate} || $_->{ResolutionCodeId}; # Is this the right field?
my $event_type = $_->{EventTypeId};
my $service_id = $_->{ServiceId};
if ($event_type == 2104) { # Request
my $data = $_->{Data}{ExtensibleDatum};
my $container;
DATA: foreach (@$data) {
if ($_->{ChildData}) {
foreach (@{$_->{ChildData}{ExtensibleDatum}}) {
if ($_->{DatatypeName} eq 'Container Type') {
$container = $_->{Value};
last DATA;
}
}
}
}
my $report = $self->problems->search({ external_id => $_->{Guid} })->first;
$open->{request}->{$container} = $report ? { report => $report } : 1;
} elsif (2095 <= $event_type && $event_type <= 2103) { # Missed collection
my $report = $self->problems->search({ external_id => $_->{Guid} })->first;
$open->{missed}->{$service_id} = $report ? { report => $report } : 1;
}
}
return $open;
}

sub _parse_schedules {
my $servicetask = shift;
my $schedules = $servicetask->{ServiceTaskSchedules}{ServiceTaskSchedule};
Expand Down
40 changes: 40 additions & 0 deletions perllib/Integrations/Echo.pm
Expand Up @@ -271,6 +271,46 @@ sub GetServiceTaskInstances {
return force_arrayref($res, 'ServiceTaskInstances');
}

sub GetEventsForObject {
my ($self, $id, $type) = @_;
my $from = DateTime->now->set_time_zone(FixMyStreet->local_time_zone)->subtract(months => 3);
return [ {
# Missed collection for service 542
EventTypeId => 2100,
ServiceId => 542,
}, {
# Request for a new paper container
EventTypeId => 2104,
Data => { ExtensibleDatum => [
{ Value => 2, DatatypeName => 'Source' },
{
ChildData => { ExtensibleDatum => [
{ Value => 1, DatatypeName => 'Action' },
{ Value => 12, DatatypeName => 'Container Type' },
] },
},
] },
ServiceId => 535,
} ] if $self->sample_data;
# uncoverable statement
my $res = $self->call('GetEventsForObject',
objectRef => ixhash(
Key => 'Id',
Type => 'PointAddress',
Value => { 'msArray:anyType' => $id },
),
query => ixhash(
$type ? (EventTypeRef => ixhash(
Key => 'Id',
Type => 'EventType',
Value => { 'msArray:anyType' => $type },
)) : (),
From => dt_to_hash($from),
),
);
return force_arrayref($res, 'Event');
}

sub ixhash {
tie (my %data, 'Tie::IxHash', @_);
return \%data;
Expand Down
7 changes: 7 additions & 0 deletions t/app/controller/waste.t
Expand Up @@ -59,6 +59,9 @@ FixMyStreet::override_config {
$mech->content_contains('2 Example Street');
$mech->content_contains('Food Waste');
};
subtest 'Thing already requested' => sub {
$mech->content_contains('A food waste collection has been reported as missed');
};
subtest 'Report a missed bin' => sub {
$mech->content_contains('service-101', 'Can report, last collection was 27th');
$mech->content_contains('service-537', 'Can report, last collection was 27th');
Expand Down Expand Up @@ -132,6 +135,10 @@ FixMyStreet::override_config {
is $report->get_extra_field_value('Quantity'), 2;
is $report->get_extra_field_value('Container_Type'), 1;
};
subtest 'Thing already requested' => sub {
$mech->get_ok('/waste/uprn/1000000002');
$mech->content_contains('A new paper &amp; cardboard container request has been made');
};
subtest 'General enquiry, bad data' => sub {
$mech->get_ok('/waste/uprn/1000000002/enquiry');
is $mech->uri->path, '/waste/uprn/1000000002';
Expand Down
12 changes: 10 additions & 2 deletions templates/web/bromley/waste/services.html
@@ -1,4 +1,8 @@
[% IF unit.report_allowed %]
[% IF unit.report_open %]
[% IF unit.report_open.report %]<a href="[% unit.report_open.report.url %]" class="waste-service-link waste-service-descriptor">[% ELSE %]<span class="waste-service-descriptor">[% END %]
A [% unit.service_name FILTER lower %] collection has been reported as missed
[% IF unit.report_open.report %]</a>[% ELSE %]</span>[% END %]
[% ELSIF unit.report_allowed %]
[% any_report_allowed = 1 %]
<form method="post" action="[% c.uri_for_action('waste/report', [ uprn ]) %]" class="waste-service-launch-arrow">
<input type="hidden" name="token" value="[% csrf_token %]">
Expand All @@ -10,7 +14,11 @@
[% END %]
<a href="[% c.uri_for_action('waste/enquiry', [ uprn ]) %]?template=problem&amp;service_id=[% unit.service_id %]" class="waste-service-link waste-service-launch-arrow waste-service-descriptor">Report a problem with a [% unit.service_name FILTER lower %] collection</a>
<a href="[% c.uri_for_action('waste/enquiry', [ uprn ]) %]?template=damage&amp;service_id=[% unit.service_id %]" class="waste-service-link waste-service-launch-arrow waste-service-descriptor">Report damage during a [% unit.service_name FILTER lower %] collection</a>
[% IF unit.request_allowed %]
[% IF unit.request_open %]
[% IF unit.request_open.report %]<a href="[% unit.request_open.report.url %]" class="waste-service-link waste-service-descriptor">[% ELSE %]<span class="waste-service-descriptor">[% END %]
A new [% unit.service_name FILTER lower %] container request has been made
[% IF unit.request_open.report %]</a>[% ELSE %]</span>[% END %]
[% ELSIF unit.request_allowed %]
[% any_request_allowed = 1 %]
<form method="post" action="[% c.uri_for_action('waste/request', [ uprn ]) %]" class="waste-service-launch-arrow">
<input type="hidden" name="token" value="[% csrf_token %]">
Expand Down

0 comments on commit d0006e8

Please sign in to comment.