aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/Open311/GetServiceRequestUpdates.pm41
-rw-r--r--t/open311/getservicerequestupdates.t12
2 files changed, 38 insertions, 15 deletions
diff --git a/perllib/Open311/GetServiceRequestUpdates.pm b/perllib/Open311/GetServiceRequestUpdates.pm
index b3b165d27..e052e4bd4 100644
--- a/perllib/Open311/GetServiceRequestUpdates.pm
+++ b/perllib/Open311/GetServiceRequestUpdates.pm
@@ -110,13 +110,18 @@ sub update_comments {
if ( !$c->first ) {
my $state = $open311->map_state( $request->{status} );
- my $external_status_code = $request->{external_status_code};
+ my $old_state = $p->state;
+ my $external_status_code = $request->{external_status_code} || '';
+ my $old_external_status_code = $p->get_extra_metadata('external_status_code') || '';
my $comment = $self->schema->resultset('Comment')->new(
{
problem => $p,
user => $self->system_user,
external_id => $request->{update_id},
- text => $self->comment_text_for_request($request, $p, $state, $external_status_code),
+ text => $self->comment_text_for_request(
+ $request, $p, $state, $old_state,
+ $external_status_code, $old_external_status_code
+ ),
mark_fixed => 0,
mark_open => 0,
anonymous => 0,
@@ -184,22 +189,28 @@ sub update_comments {
}
sub comment_text_for_request {
- my ($self, $request, $problem, $state, $external_status_code) = @_;
+ my ($self, $request, $problem, $state, $old_state,
+ $ext_code, $old_ext_code) = @_;
return $request->{description} if $request->{description};
- my $state_params = {
- 'me.state' => $state
- };
- if ($external_status_code) {
- $state_params->{'me.external_status_code'} = $external_status_code;
- };
-
- if (my $template = $problem->response_templates->search({
- auto_response => 1,
- -or => $state_params,
- })->first) {
- return $template->text;
+ # Response templates are only triggered if the state/external status has changed
+ my $state_changed = $state ne $old_state;
+ my $ext_code_changed = $ext_code ne $old_ext_code;
+ if ($state_changed || $ext_code_changed) {
+ my $state_params = {
+ 'me.state' => $state
+ };
+ if ($ext_code) {
+ $state_params->{'me.external_status_code'} = $ext_code;
+ };
+
+ if (my $template = $problem->response_templates->search({
+ auto_response => 1,
+ -or => $state_params,
+ })->first) {
+ return $template->text;
+ }
}
return "" if $self->blank_updates_permitted;
diff --git a/t/open311/getservicerequestupdates.t b/t/open311/getservicerequestupdates.t
index cc319cbdc..32fe4bc9e 100644
--- a/t/open311/getservicerequestupdates.t
+++ b/t/open311/getservicerequestupdates.t
@@ -358,6 +358,18 @@ for my $test (
end_state => 'investigating',
},
{
+ desc => 'unchanging state does not trigger auto-response template',
+ description => '',
+ xml_description => '',
+ external_id => 638344,
+ start_state => 'investigating',
+ comment_status => 'INVESTIGATING',
+ mark_fixed => 0,
+ mark_open => 0,
+ problem_state => 'investigating',
+ end_state => 'investigating',
+ },
+ {
desc => 'open status does not re-open hidden report',
description => 'This is a note',
external_id => 638344,