aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm17
-rw-r--r--perllib/Open311.pm13
-rw-r--r--perllib/Open311/GetServiceRequestUpdates.pm32
-rw-r--r--t/app/script/archive_old_enquiries.t35
-rw-r--r--t/open311/getservicerequestupdates.t2
6 files changed, 79 insertions, 22 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b8c484f9..563c491db 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -34,6 +34,7 @@
- Set a session timezone in case database server is set differently.
- Fix SQL error on update edit admin page in cobrands. #2049
- Improve chart display in old IE versions. #2005
+ - Improve handling of Open311 state changes. #2069
- Admin improvements:
- Inspectors can set non_public status of reports. #1992
- Default start date is shown on the dashboard.
@@ -42,6 +43,7 @@
- Show Open311 service code as tooltip on admin category checkboxes. #2049
- Bulk user import admin page. #2057
- Add link to admin edit page for reports. #2071
+ - Nicer Open311 errors. #2078
- Development improvements:
- Add HTML email previewer.
- Add CORS header to Open311 output. #2022
diff --git a/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm b/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm
index 31876d83d..03bc511a0 100644
--- a/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm
+++ b/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm
@@ -137,7 +137,7 @@ sub close_problems {
my $problems = shift;
while (my $problem = $problems->next) {
my $timestamp = \'current_timestamp';
- $problem->add_to_comments( {
+ my $comment = $problem->add_to_comments( {
text => '',
created => $timestamp,
confirmed => $timestamp,
@@ -150,5 +150,20 @@ sub close_problems {
extra => { is_superuser => 1 },
} );
$problem->update({ state => 'closed', send_questionnaire => 0 });
+
+ # Stop any alerts being sent out about this closure.
+ my @alerts = FixMyStreet::DB->resultset('Alert')->search( {
+ alert_type => 'new_updates',
+ parameter => $problem->id,
+ confirmed => 1,
+ } );
+
+ for my $alert (@alerts) {
+ my $alerts_sent = FixMyStreet::DB->resultset('AlertSent')->find_or_create( {
+ alert_id => $alert->id,
+ parameter => $comment->id,
+ } );
+ }
+
}
}
diff --git a/perllib/Open311.pm b/perllib/Open311.pm
index 577de31ea..a65e19fa6 100644
--- a/perllib/Open311.pm
+++ b/perllib/Open311.pm
@@ -257,7 +257,7 @@ sub get_service_request_updates {
my $end_date = shift;
my $params = {
- api_key => $self->api_key,
+ api_key => $self->api_key || '',
};
if ( $start_date || $end_date ) {
@@ -420,9 +420,12 @@ sub _get {
$params->{ jurisdiction_id } = $self->jurisdiction
if $self->jurisdiction;
$uri->path( $uri->path . $path );
+ my $base_uri = $uri->clone;
$uri->query_form( $params );
- $self->debug_details( $self->debug_details . "\nrequest:" . $uri->as_string );
+ my $debug_request = "GET " . $base_uri->as_string . "\n\n";
+ $debug_request .= join("\n", map { "$_: $params->{$_}" } keys %$params);
+ $self->debug_details( $self->debug_details . $debug_request );
my $content;
if ( $self->test_mode ) {
@@ -464,11 +467,13 @@ sub _post {
$params->{jurisdiction_id} = $self->jurisdiction
if $self->jurisdiction;
- $params->{api_key} = $self->api_key
+ $params->{api_key} = ($self->api_key || '')
if $self->api_key;
my $req = POST $uri->as_string, $params;
- $self->debug_details( $self->debug_details . "\nrequest:" . $req->as_string );
+ my $debug_request = $req->method . ' ' . $uri->as_string . "\n\n";
+ $debug_request .= join("\n", map { "$_: $params->{$_}" } keys %$params);
+ $self->debug_details( $self->debug_details . $debug_request );
my $ua = LWP::UserAgent->new();
my $res;
diff --git a/perllib/Open311/GetServiceRequestUpdates.pm b/perllib/Open311/GetServiceRequestUpdates.pm
index cee1a629f..b3b165d27 100644
--- a/perllib/Open311/GetServiceRequestUpdates.pm
+++ b/perllib/Open311/GetServiceRequestUpdates.pm
@@ -138,22 +138,22 @@ sub update_comments {
$open311->add_media($request->{media_url}, $comment)
if $request->{media_url};
- # if the comment is older than the last update
- # do not change the status of the problem as it's
- # tricky to determine the right thing to do.
- # Allow the same time in case report/update created at same time (in external system)
- if ( $comment->created >= $p->lastupdate ) {
- # don't update state unless it's an allowed state and it's
- # actually changing the state of the problem
- if ( FixMyStreet::DB::Result::Problem->visible_states()->{$state} && $p->state ne $state &&
- # For Oxfordshire, don't allow changes back to Open from other open states
- !( $body->areas->{$AREA_ID_OXFORDSHIRE} && $state eq 'confirmed' && $p->is_open ) &&
- # Don't let it change between the (same in the front end) fixed states
- !( $p->is_fixed && FixMyStreet::DB::Result::Problem->fixed_states()->{$state} ) ) {
- if ($p->is_visible) {
- $p->state($state);
- }
- $comment->problem_state($state);
+ # don't update state unless it's an allowed state
+ if ( FixMyStreet::DB::Result::Problem->visible_states()->{$state} &&
+ # For Oxfordshire, don't allow changes back to Open from other open states
+ !( $body->areas->{$AREA_ID_OXFORDSHIRE} && $state eq 'confirmed' && $p->is_open ) &&
+ # Don't let it change between the (same in the front end) fixed states
+ !( $p->is_fixed && FixMyStreet::DB::Result::Problem->fixed_states()->{$state} ) ) {
+
+ $comment->problem_state($state);
+
+ # if the comment is older than the last update do not
+ # change the status of the problem as it's tricky to
+ # determine the right thing to do. Allow the same time in
+ # case report/update created at same time (in external
+ # system). Only do this if the report is currently visible.
+ if ( $comment->created >= $p->lastupdate && $p->state ne $state && $p->is_visible ) {
+ $p->state($state);
}
}
diff --git a/t/app/script/archive_old_enquiries.t b/t/app/script/archive_old_enquiries.t
index 0475cb9ea..9774d3fc3 100644
--- a/t/app/script/archive_old_enquiries.t
+++ b/t/app/script/archive_old_enquiries.t
@@ -75,6 +75,41 @@ subtest 'sets reports to the correct status' => sub {
};
};
+subtest 'marks alerts as sent' => sub {
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'oxfordshire' ],
+ }, sub {
+ my ($report) = $mech->create_problems_for_body(1, $oxfordshire->id, 'Test', {
+ areas => ',2237,',
+ lastupdate => '2015-12-01 07:00:00',
+ user_id => $user->id,
+ });
+ my $alert = FixMyStreet::DB->resultset('Alert')->find_or_create(
+ {
+ user => $user,
+ parameter => $report->id,
+ alert_type => 'new_updates',
+ whensubscribed => '2015-12-01 07:00:00',
+ confirmed => 1,
+ cobrand => 'default',
+ }
+ );
+ is $alert->alerts_sent->count, 0, 'Nothing has been sent for this alert';
+
+ FixMyStreet::Script::ArchiveOldEnquiries::archive($opts);
+
+ $report->discard_changes;
+
+ is $report->state, 'closed', 'Report has been set to closed';
+
+ is $alert->alerts_sent->count, 1, 'Alert marked as sent for this report';
+
+ my $alert_sent = $alert->alerts_sent->first;
+ my $comment = $report->comments->first;
+ is $alert_sent->parameter, $comment->id, 'AlertSent created for new comment';
+ };
+};
+
subtest 'sends emails to a user' => sub {
FixMyStreet::override_config {
ALLOWED_COBRANDS => [ 'oxfordshire' ],
diff --git a/t/open311/getservicerequestupdates.t b/t/open311/getservicerequestupdates.t
index ec2ffb593..cc319cbdc 100644
--- a/t/open311/getservicerequestupdates.t
+++ b/t/open311/getservicerequestupdates.t
@@ -150,7 +150,7 @@ for my $test (
comment_status => 'OPEN',
mark_fixed=> 0,
mark_open => 0,
- problem_state => undef,
+ problem_state => 'confirmed',
end_state => 'confirmed',
},
{