diff options
author | Matthew Somerville <matthew@mysociety.org> | 2020-07-30 12:25:20 +0100 |
---|---|---|
committer | M Somerville <matthew-github@dracos.co.uk> | 2020-10-12 13:38:03 +0100 |
commit | e008a0b1ddd45e9afed4198a32b20d6c4f5c6d66 (patch) | |
tree | 54b0a1825d672f0e355f4b3b10076a6cf220f6f3 /perllib | |
parent | 19deaf332d2843e3b4337f3e2047bce47e4a7cd1 (diff) |
[Oxfordshire] Send flag and other data with defect
If the update being sent is raising a defect, include USRN-based and
location data.
Diffstat (limited to 'perllib')
-rw-r--r-- | perllib/FixMyStreet/Cobrand/Oxfordshire.pm | 29 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/UKCouncils.pm | 6 |
2 files changed, 32 insertions, 3 deletions
diff --git a/perllib/FixMyStreet/Cobrand/Oxfordshire.pm b/perllib/FixMyStreet/Cobrand/Oxfordshire.pm index 0f34ff09f..34e21ddfc 100644 --- a/perllib/FixMyStreet/Cobrand/Oxfordshire.pm +++ b/perllib/FixMyStreet/Cobrand/Oxfordshire.pm @@ -155,6 +155,35 @@ sub open311_post_send { $row->detail($self->{ox_original_detail}); } +sub open311_munge_update_params { + my ($self, $params, $comment, $body) = @_; + + if ($comment->get_extra_metadata('defect_raised')) { + my $p = $comment->problem; + my ($e, $n) = $p->local_coords; + my $usrn = $p->get_extra_field_value('usrn'); + if (!$usrn) { + my $cfg = { + url => 'https://tilma.mysociety.org/mapserver/oxfordshire', + typename => "OCCRoads", + srsname => 'urn:ogc:def:crs:EPSG::27700', + accept_feature => sub { 1 }, + filter => "<Filter xmlns:gml=\"http://www.opengis.net/gml\"><DWithin><PropertyName>SHAPE_GEOMETRY</PropertyName><gml:Point><gml:coordinates>$e,$n</gml:coordinates></gml:Point><Distance units='m'>20</Distance></DWithin></Filter>", + }; + my $features = $self->_fetch_features($cfg); + my $feature = $self->_nearest_feature($cfg, $e, $n, $features); + if ($feature) { + my $props = $feature->{properties}; + $usrn = Utils::trim_text($props->{TYPE1_2_USRN}); + } + } + $params->{'attribute[usrn]'} = $usrn; + $params->{'attribute[raise_defect]'} = 1; + $params->{'attribute[easting]'} = $e; + $params->{'attribute[northing]'} = $n; + } +} + sub should_skip_sending_update { my ($self, $update ) = @_; diff --git a/perllib/FixMyStreet/Cobrand/UKCouncils.pm b/perllib/FixMyStreet/Cobrand/UKCouncils.pm index f472876ef..0e8341d57 100644 --- a/perllib/FixMyStreet/Cobrand/UKCouncils.pm +++ b/perllib/FixMyStreet/Cobrand/UKCouncils.pm @@ -425,7 +425,7 @@ sub _nearest_feature { # We have a list of features, and we want to find the one closest to the # report location. - my $site_code = ''; + my $chosen = ''; my $nearest; # We shouldn't receive anything aside from these geometry types, but belt and braces. @@ -452,14 +452,14 @@ sub _nearest_feature { for (my $i=0; $i<@$coordinates-1; $i++) { my $distance = $self->_distanceToLine($x, $y, $coordinates->[$i], $coordinates->[$i+1]); if ( !defined $nearest || $distance < $nearest ) { - $site_code = $feature->{properties}->{$cfg->{property}}; + $chosen = $feature; $nearest = $distance; } } } } - return $site_code; + return $cfg->{property} && $chosen ? $chosen->{properties}->{$cfg->{property}} : $chosen; } sub contact_name { |