aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/Open311/GetServiceRequests.pm
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2019-10-30 19:28:55 +0100
committerMarius Halden <marius.h@lden.org>2019-10-30 19:28:55 +0100
commit377bd96aab7cad3434185c30eb908c9da447fe40 (patch)
tree7ec5527e205d5b62caaa862a7de8cd25199c8bf0 /perllib/Open311/GetServiceRequests.pm
parent56f61b1441070aa0b9ddcfc74aca46c20313609f (diff)
parent92b253904062edd533e55c22824de6fd01e2f7c1 (diff)
Merge tag 'v2.6' into fiksgatami-dev
Diffstat (limited to 'perllib/Open311/GetServiceRequests.pm')
-rw-r--r--perllib/Open311/GetServiceRequests.pm105
1 files changed, 55 insertions, 50 deletions
diff --git a/perllib/Open311/GetServiceRequests.pm b/perllib/Open311/GetServiceRequests.pm
index 2d15347fd..194d8d296 100644
--- a/perllib/Open311/GetServiceRequests.pm
+++ b/perllib/Open311/GetServiceRequests.pm
@@ -3,6 +3,7 @@ package Open311::GetServiceRequests;
use Moo;
use Open311;
use FixMyStreet::DB;
+use FixMyStreet::MapIt;
use FixMyStreet::App::Model::PhotoSet;
use DateTime::Format::W3CDTF;
@@ -89,18 +90,13 @@ sub create_problems {
}
my $request_id = $request->{service_request_id};
- my %params;
- $params{generation} = mySociety::Config::get('MAPIT_GENERATION')
- if mySociety::Config::get('MAPIT_GENERATION');
-
my ($latitude, $longitude) = ( $request->{lat}, $request->{long} );
($latitude, $longitude) = Utils::convert_en_to_latlon_truncated( $longitude, $latitude )
if $self->convert_latlong;
my $all_areas =
- mySociety::MaPit::call( 'point',
- "4326/$longitude,$latitude", %params );
+ FixMyStreet::MapIt::call('point', "4326/$longitude,$latitude");
# skip if it doesn't look like it's for this body
my @areas = grep { $all_areas->{$_->area_id} } $body->body_areas;
@@ -113,76 +109,85 @@ sub create_problems {
my $updated_time = eval {
DateTime::Format::W3CDTF->parse_datetime(
$request->{updated_datetime} || ""
- )->set_time_zone(
- FixMyStreet->time_zone || FixMyStreet->local_time_zone
- );
+ )->set_time_zone(FixMyStreet->local_time_zone);
};
if ($@) {
warn "Not creating problem $request_id for @{[$body->name]}, bad update time"
if $self->verbose;
next;
}
-
my $updated = DateTime::Format::W3CDTF->format_datetime(
$updated_time->clone->set_time_zone('UTC')
);
- if ($args->{start_date} && $args->{end_date} && ($updated lt $args->{start_date} || $updated gt $args->{end_date}) ) {
- warn "Problem id $request_id for @{[$body->name]} has an invalid time, not creating: "
- . "$updated either less than $args->{start_date} or greater than $args->{end_date}"
- if $self->verbose;
- next;
- }
my $created_time = eval {
DateTime::Format::W3CDTF->parse_datetime(
$request->{requested_datetime} || ""
- )->set_time_zone(
- FixMyStreet->time_zone || FixMyStreet->local_time_zone
- );
+ )->set_time_zone(FixMyStreet->local_time_zone);
};
$created_time = $updated_time if $@;
+ # Updated time must not be before created time, check and adjust as necessary.
+ # (This has happened with some fetched reports, oddly.)
+ $updated_time = $created_time if $updated_time lt $created_time;
+
my $problems;
my $criteria = {
external_id => $request_id,
};
- $problems = $self->schema->resultset('Problem')->to_body($body)->search( $criteria );
+
+ # Skip if this problem already exists (e.g. it may have originated from FMS and is being mirrored back!)
+ next if $self->schema->resultset('Problem')->to_body($body)->search( $criteria )->count;
+
+ if ($args->{start_date} && $args->{end_date} && ($updated lt $args->{start_date} || $updated gt $args->{end_date}) ) {
+ warn "Problem id $request_id for @{[$body->name]} has an invalid time, not creating: "
+ . "$updated either less than $args->{start_date} or greater than $args->{end_date}"
+ if $self->verbose;
+ next;
+ }
+
+ if ( my $cobrand = $body->get_cobrand_handler ) {
+ my $filtered = $cobrand->call_hook('filter_report_description', $request->{description});
+ $request->{description} = $filtered if defined $filtered;
+ }
my @contacts = grep { $request->{service_code} eq $_->email } $contacts->all;
my $contact = $contacts[0] ? $contacts[0]->category : 'Other';
my $state = $open311->map_state($request->{status});
- unless (my $p = $problems->first) {
- my $problem = $self->schema->resultset('Problem')->new(
- {
- user => $self->system_user,
- external_id => $request_id,
- detail => $request->{description},
- title => $request->{title} || $request->{service_name} . ' problem',
- anonymous => 0,
- name => $self->system_user->name,
- confirmed => $created_time,
- created => $created_time,
- lastupdate => $updated_time,
- whensent => $created_time,
- state => $state,
- postcode => '',
- used_map => 1,
- latitude => $latitude,
- longitude => $longitude,
- areas => ',' . $body->id . ',',
- bodies_str => $body->id,
- send_method_used => 'Open311',
- category => $contact,
- }
- );
-
- $open311->add_media($request->{media_url}, $problem)
- if $request->{media_url};
-
- $problem->insert();
- }
+ my $non_public = $request->{non_public} ? 1 : 0;
+
+ my $problem = $self->schema->resultset('Problem')->new(
+ {
+ user => $self->system_user,
+ external_id => $request_id,
+ detail => $request->{description} || $request->{service_name} . ' problem',
+ title => $request->{title} || $request->{service_name} . ' problem',
+ anonymous => 0,
+ name => $self->system_user->name,
+ confirmed => $created_time,
+ created => $created_time,
+ lastupdate => $updated_time,
+ whensent => $created_time,
+ state => $state,
+ postcode => '',
+ used_map => 1,
+ latitude => $latitude,
+ longitude => $longitude,
+ areas => ',' . $body->id . ',',
+ bodies_str => $body->id,
+ send_method_used => 'Open311',
+ category => $contact,
+ send_questionnaire => 0,
+ non_public => $non_public,
+ }
+ );
+
+ $open311->add_media($request->{media_url}, $problem)
+ if $request->{media_url};
+
+ $problem->insert();
}
return 1;