aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/SendReport/Open311.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/SendReport/Open311.pm')
-rw-r--r--perllib/FixMyStreet/SendReport/Open311.pm74
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 );