diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-08-26 15:05:30 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-08-26 15:05:30 +0100 |
commit | 0e45fa27e4bc857f61b71f6c121a61e08e54cb6a (patch) | |
tree | 7e83c50825819b60a9a73f16c4d4f0a4ff247650 /perllib/FixMyStreet/SendReport/Open311.pm | |
parent | c1178ea85d1879d6533ac09e2a3c813441554b43 (diff) | |
parent | a09c61c807d8d6b50227c9d8aa687f1eb22bad00 (diff) |
Merge branch 'stevenage-open311'
Diffstat (limited to 'perllib/FixMyStreet/SendReport/Open311.pm')
-rw-r--r-- | perllib/FixMyStreet/SendReport/Open311.pm | 74 |
1 files changed, 35 insertions, 39 deletions
diff --git a/perllib/FixMyStreet/SendReport/Open311.pm b/perllib/FixMyStreet/SendReport/Open311.pm index bf5ed3e30..ee40f371a 100644 --- a/perllib/FixMyStreet/SendReport/Open311.pm +++ b/perllib/FixMyStreet/SendReport/Open311.pm @@ -12,6 +12,11 @@ use Readonly; Readonly::Scalar my $COUNCIL_ID_OXFORDSHIRE => 2237; Readonly::Scalar my $COUNCIL_ID_WARWICKSHIRE => 2243; Readonly::Scalar my $COUNCIL_ID_GREENWICH => 2493; +Readonly::Scalar my $COUNCIL_ID_BROMLEY => 2482; + +has open311_test_req_used => ( + is => 'rw', +); sub send { my $self = shift; @@ -28,21 +33,11 @@ sub send { my $extended_desc = 1; - # To rollback temporary changes made by this function - my $revert = 0; + my $extra = $row->get_extra_fields(); # Extra bromley fields - if ( $row->bodies_str eq '2482' ) { - - $revert = 1; - - my $extra = $row->get_extra_fields(); - if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { - push @$extra, { name => 'northing', value => $h->{northing} }; - push @$extra, { name => 'easting', value => $h->{easting} }; - } + if ( $row->bodies_str eq $COUNCIL_ID_BROMLEY ) { push @$extra, { name => 'report_url', value => $h->{url} }; - push @$extra, { name => 'service_request_id_ext', value => $row->id }; push @$extra, { name => 'report_title', value => $row->title }; push @$extra, { name => 'public_anonymity_required', value => $row->anonymous ? 'TRUE' : 'FALSE' }; push @$extra, { name => 'email_alerts_requested', value => 'FALSE' }; # always false as can never request them @@ -54,41 +49,47 @@ sub send { my ( $firstname, $lastname ) = ( $row->name =~ /(\w+)\.?\s+(.+)/ ); push @$extra, { name => 'last_name', value => $lastname }; } - $row->set_extra_fields( @$extra ); - $always_send_latlong = 0; $send_notpinpointed = 1; - $use_service_as_deviceid = 0; $extended_desc = 0; - } - - # extra Oxfordshire fields: send nearest street, postcode, northing and easting, and the FMS id - if ( $row->bodies_str =~ /\b(?:$COUNCIL_ID_OXFORDSHIRE|$COUNCIL_ID_WARWICKSHIRE)\b/ ) { - - my $extra = $row->get_extra_fields; + } elsif ( $row->bodies_str =~ /\b$COUNCIL_ID_OXFORDSHIRE\b/ ) { + # Oxfordshire doesn't have category metadata to fill these + $extended_desc = 'oxfordshire'; push @$extra, { name => 'external_id', value => $row->id }; push @$extra, { name => 'closest_address', value => $h->{closest_address} } if $h->{closest_address}; if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { push @$extra, { name => 'northing', value => $h->{northing} }; push @$extra, { name => 'easting', value => $h->{easting} }; } - $row->set_extra_fields( @$extra ); - - if ($row->bodies_str =~ /$COUNCIL_ID_OXFORDSHIRE/) { - $extended_desc = 'oxfordshire'; - } - elsif ($row->bodies_str =~ /$COUNCIL_ID_WARWICKSHIRE/) { - $extended_desc = 'warwickshire'; - } + } elsif ( $row->bodies_str =~ /\b$COUNCIL_ID_WARWICKSHIRE\b/ ) { + $extended_desc = 'warwickshire'; + push @$extra, { name => 'closest_address', value => $h->{closest_address} } if $h->{closest_address}; + } elsif ( $row->bodies_str == $COUNCIL_ID_GREENWICH ) { + # Greenwich doesn't have category metadata to fill this + push @$extra, { name => 'external_id', value => $row->id }; } - # FIXME: we've already looked this up before + # Try and fill in some ones that we've been asked for, but not asked the user for + my $contact = $row->result_source->schema->resultset("Contact")->find( { deleted => 0, body_id => $body->id, category => $row->category } ); + my $id_field = $contact->id_field; + foreach (@{$contact->get_extra_fields}) { + if ($_->{code} eq $id_field) { + push @$extra, { name => $id_field, value => $row->id }; + } elsif ($_->{code} =~ /^(easting|northing)$/) { + if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { + push @$extra, { name => $_->{code}, value => $h->{$_->{code}} }; + } + } + } + + $row->set_extra_fields( @$extra ) if @$extra; + my %open311_params = ( jurisdiction => $conf->jurisdiction, endpoint => $conf->endpoint, @@ -117,25 +118,20 @@ sub send { # non-standard Oxfordshire endpoint (because it's just a script, not a full Open311 service) if ( $row->bodies_str =~ /$COUNCIL_ID_OXFORDSHIRE/ ) { $open311->endpoints( { requests => 'open311_service_request.cgi' } ); - $revert = 1; } # required to get round issues with CRM constraints if ( $row->bodies_str =~ /2218/ ) { $row->user->name( $row->user->id . ' ' . $row->user->name ); - $revert = 1; - } - - if ($row->bodies_str =~ /$COUNCIL_ID_GREENWICH/) { - # Greenwich endpoint expects external_id as an attribute - $row->set_extra_fields( { 'name' => 'external_id', 'value' => $row->id } ); - $revert = 1; } my $resp = $open311->send_service_request( $row, $h, $contact->email ); + if (FixMyStreet->test_mode) { + $self->open311_test_req_used($open311->test_req_used); + } # make sure we don't save user changes from above - $row->discard_changes() if $revert; + $row->discard_changes(); if ( $resp ) { $row->external_id( $resp ); |