aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2020-06-29 16:08:54 +0100
committerM Somerville <matthew-github@dracos.co.uk>2020-11-11 10:29:19 +0000
commit613f45c6514ace275b3a49a5d50f7b83ed536b5f (patch)
treec447d16e87af6d74c078bf04c72aa31c64e7fe4d
parentdbde76a5090e772c806bd189426ee078b9b7e4ba (diff)
[Bromley] Add general enquiries.
This adds general enquiries to the reporting flow.
-rw-r--r--perllib/FixMyStreet/App/Controller/Waste.pm72
-rw-r--r--perllib/FixMyStreet/App/Form/Waste/Enquiry.pm48
-rw-r--r--t/app/controller/waste.t25
-rw-r--r--templates/web/base/waste/enquiry.html33
-rw-r--r--templates/web/base/waste/summary_enquiry.html19
-rw-r--r--templates/web/bromley/waste/enquiry-problem.html13
-rw-r--r--templates/web/bromley/waste/services.html6
7 files changed, 216 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Waste.pm b/perllib/FixMyStreet/App/Controller/Waste.pm
index 667edad10..a31c359f1 100644
--- a/perllib/FixMyStreet/App/Controller/Waste.pm
+++ b/perllib/FixMyStreet/App/Controller/Waste.pm
@@ -10,6 +10,7 @@ use FixMyStreet::App::Form::Waste::UPRN;
use FixMyStreet::App::Form::Waste::AboutYou;
use FixMyStreet::App::Form::Waste::Request;
use FixMyStreet::App::Form::Waste::Report;
+use FixMyStreet::App::Form::Waste::Enquiry;
sub auto : Private {
my ( $self, $c ) = @_;
@@ -226,6 +227,77 @@ sub process_report_data : Private {
return 1;
}
+sub enquiry : Chained('uprn') : Args(0) {
+ my ($self, $c) = @_;
+
+ if (my $template = $c->get_param('template')) {
+ $c->stash->{template} = "waste/enquiry-$template.html";
+ $c->detach;
+ }
+
+ $c->forward('setup_categories_and_bodies');
+
+ my $category = $c->get_param('category');
+ my $service = $c->get_param('service_id');
+ if (!$category || !$service || !$c->stash->{services}{$service}) {
+ $c->res->redirect('/waste/uprn/' . $c->stash->{uprn});
+ $c->detach;
+ }
+ my ($contact) = grep { $_->category eq $category } @{$c->stash->{contacts}};
+ if (!$contact) {
+ $c->res->redirect('/waste/uprn/' . $c->stash->{uprn});
+ $c->detach;
+ }
+
+ my $field_list = [];
+ foreach (@{$contact->get_metadata_for_input}) {
+ next if $_->{code} eq 'service_id' || $_->{code} eq 'uprn';
+ my $type = 'Text';
+ $type = 'TextArea' if 'text' eq ($_->{datatype} || '');
+ my $required = $_->{required} eq 'true' ? 1 : 0;
+ push @$field_list, "extra_$_->{code}" => {
+ type => $type, label => $_->{description}, required => $required
+ };
+ }
+
+ $c->stash->{first_page} = 'enquiry';
+ $c->stash->{form_class} = 'FixMyStreet::App::Form::Waste::Enquiry';
+ $c->stash->{page_list} = [
+ enquiry => {
+ fields => [ 'category', 'service_id', grep { ! ref $_ } @$field_list, 'continue' ],
+ title => $category,
+ next => 'about_you',
+ update_field_list => sub {
+ my $form = shift;
+ my $c = $form->c;
+ return {
+ category => { default => $c->get_param('category') },
+ service_id => { default => $c->get_param('service_id') },
+ }
+ }
+ },
+ ];
+ $c->stash->{field_list} = $field_list;
+ $c->forward('form');
+}
+
+sub process_enquiry_data : Private {
+ my ($self, $c, $form) = @_;
+ my $data = $form->saved_data;
+ my $address = $c->stash->{property}->{address};
+ $data->{title} = $data->{category};
+ $data->{detail} = "$data->{category}\n\n$address";
+ # Read extra details in loop
+ foreach (grep { /^extra_/ } keys %$data) {
+ my ($id) = /^extra_(.*)/;
+ $c->set_param($id, $data->{$_});
+ }
+ $c->set_param('service_id', $data->{service_id});
+ $c->forward('add_report', [ $data ]) or return;
+ push @{$c->stash->{report_ids}}, $c->stash->{report}->id;
+ return 1;
+}
+
sub load_form {
my ($c, $previous_form) = @_;
diff --git a/perllib/FixMyStreet/App/Form/Waste/Enquiry.pm b/perllib/FixMyStreet/App/Form/Waste/Enquiry.pm
new file mode 100644
index 000000000..fa85d5d4c
--- /dev/null
+++ b/perllib/FixMyStreet/App/Form/Waste/Enquiry.pm
@@ -0,0 +1,48 @@
+package FixMyStreet::App::Form::Waste::Enquiry;
+
+use utf8;
+use HTML::FormHandler::Moose;
+extends 'FixMyStreet::App::Form::Waste';
+
+# First page has dynamic fields, so is set in code
+
+has_field category => ( type => 'Hidden' );
+has_field service_id => ( type => 'Hidden' );
+
+has_page about_you => (
+ fields => ['name', 'phone', 'email', 'continue'],
+ title => 'About you',
+ next => 'summary',
+);
+
+with 'FixMyStreet::App::Form::Waste::AboutYou';
+
+has_page summary => (
+ fields => ['submit'],
+ title => 'Submit missed collection',
+ template => 'waste/summary_enquiry.html',
+ finished => sub {
+ return $_[0]->wizard_finished('process_enquiry_data');
+ },
+ next => 'done',
+);
+
+has_page done => (
+ title => 'Enquiry sent',
+ template => 'waste/confirmation.html',
+);
+
+has_field continue => (
+ type => 'Submit',
+ value => 'Continue',
+ element_attr => { class => 'govuk-button' },
+ order => 999
+);
+
+has_field submit => (
+ type => 'Submit',
+ value => 'Submit',
+ element_attr => { class => 'govuk-button' }
+);
+
+1;
diff --git a/t/app/controller/waste.t b/t/app/controller/waste.t
index 454a593a6..bbd0cd00a 100644
--- a/t/app/controller/waste.t
+++ b/t/app/controller/waste.t
@@ -29,6 +29,8 @@ create_contact({ category => 'Request new container', email => 'request' },
{ code => 'Quantity', required => 1, automated => 'hidden_field' },
{ code => 'Container_Type', required => 1, automated => 'hidden_field' },
);
+create_contact({ category => 'General enquiry', email => 'general' },
+ { code => 'Notes', description => 'Notes', required => 1, datatype => 'text' });
FixMyStreet::override_config {
ALLOWED_COBRANDS => ['bromley', 'fixmystreet'],
@@ -106,6 +108,29 @@ FixMyStreet::override_config {
is $report->get_extra_field_value('Quantity'), 2;
is $report->get_extra_field_value('Container_Type'), 1;
};
+ subtest 'General enquiry, bad data' => sub {
+ $mech->get_ok('/waste/uprn/1000000002/enquiry');
+ is $mech->uri->path, '/waste/uprn/1000000002';
+ $mech->get_ok('/waste/uprn/1000000002/enquiry?category=Bad');
+ is $mech->uri->path, '/waste/uprn/1000000002';
+ $mech->get_ok('/waste/uprn/1000000002/enquiry?service=1');
+ is $mech->uri->path, '/waste/uprn/1000000002';
+ };
+ subtest 'General enquiry, on behalf of someone else' => sub {
+ $mech->log_in_ok($staff_user->email);
+ $mech->get_ok('/waste/uprn/1000000002/enquiry?category=General+enquiry&service_id=537');
+ $mech->submit_form_ok({ with_fields => { extra_Notes => 'Some notes' } });
+ $mech->submit_form_ok({ with_fields => { name => "Test McTest", email => $user->email } });
+ $mech->content_contains('Some notes');
+ $mech->content_contains('Test McTest');
+ $mech->content_contains($user->email);
+ $mech->submit_form_ok({ with_fields => { process => 'summary' } });
+ $mech->content_contains('Your enquiry has been sent');
+ my $report = FixMyStreet::DB->resultset("Problem")->search(undef, { order_by => { -desc => 'id' } })->first;
+ is $report->get_extra_field_value('Notes'), 'Some notes';
+ is $report->user->email, $user->email;
+ is $report->get_extra_metadata('contributed_by'), $staff_user->id;
+ };
};
package SOAP::Result;
diff --git a/templates/web/base/waste/enquiry.html b/templates/web/base/waste/enquiry.html
new file mode 100644
index 000000000..8993b0fd8
--- /dev/null
+++ b/templates/web/base/waste/enquiry.html
@@ -0,0 +1,33 @@
+[% SET bodyclass = 'waste' %]
+[% INCLUDE header.html %]
+
+[% PROCESS 'waste/govuk/fields.html' %]
+[% PROCESS title %]
+[% SET service_id = c.req.params.service_id %]
+
+<dl class="waste__address">
+ <dt class="waste__address__title">Address</dt>
+ <dd class="waste__address__property">[% property.address %]</dd>
+</dl>
+
+<dl class="waste__address">
+ <dt class="waste__address__title">Service</dt>
+ <dd class="waste__address__property">[% services.$service_id.service_name %]</dd>
+</dl>
+
+<form method="get" action="[% c.uri_for_action('waste/enquiry', [ uprn ]) %]">
+ <div class="govuk-form-group">
+ [% PROCESS radio field = {
+ id = 'category',
+ html_name = 'category',
+ label = 'Category',
+ options = field_options
+ }
+ %]
+ </div>
+ <div class="govuk-form-group"><input type="submit" value="Continue" class="govuk-button"></div>
+
+ <input type="hidden" name="service_id" value="[% service_id %]">
+</form>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/summary_enquiry.html b/templates/web/base/waste/summary_enquiry.html
new file mode 100644
index 000000000..8e5967a3b
--- /dev/null
+++ b/templates/web/base/waste/summary_enquiry.html
@@ -0,0 +1,19 @@
+[%
+title = 'Submit enquiry';
+thing = 'enquiry';
+summary_title = data.category;
+step1 = 'enquiry';
+%]
+
+[% BLOCK answers %]
+ [% FOR extra IN data.keys.grep('^extra_') %]
+ [% NEXT UNLESS data.$extra %]
+ [% SET extra_name = extra.replace('extra_', '') %]
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">[% extra_name | title %]</dt>
+ <dd class="govuk-summary-list__value">[% data.$extra %]</dd>
+ </div>
+ [% END %]
+[% END %]
+
+[% PROCESS waste/summary.html %]
diff --git a/templates/web/bromley/waste/enquiry-problem.html b/templates/web/bromley/waste/enquiry-problem.html
new file mode 100644
index 000000000..948cb91f3
--- /dev/null
+++ b/templates/web/bromley/waste/enquiry-problem.html
@@ -0,0 +1,13 @@
+[% PROCESS waste/enquiry.html
+ title = 'Report a problem'
+ field_options = [
+ { value = 'Gate not closed', label = 'A gate or enclosure wasn’t closed after the collection' },
+ { value = 'Waste spillage', label = 'Bin contents were spilled during the collection' },
+ { value = 'Bin not returned', label = 'A bin wasn’t returned after the collection' },
+ { value = 'Crew behaviour', label = 'There was a problem with the crew’s behaviour' },
+ { value = 'Wrongful removal', label = 'Something was wrongly removed during the collection' },
+ { value = 'Damage to 3rd party', label = 'Someone else’s vehicle was damaged' },
+ { value = 'Damage to Property', label = 'My property was damaged' },
+ { value = 'Failure to deliver bin', label = 'My bin was not delivered' },
+ ]
+%]
diff --git a/templates/web/bromley/waste/services.html b/templates/web/bromley/waste/services.html
index 2f683ab2f..2caf41738 100644
--- a/templates/web/bromley/waste/services.html
+++ b/templates/web/bromley/waste/services.html
@@ -4,6 +4,7 @@
<input type="hidden" name="service-[% unit.service_id %]" value="1">
<input type="submit" value="Report a [% unit.service_name FILTER lower %] collection as missed" class="waste-service-descriptor waste-service-link">
</form>
+ <a href="[% c.uri_for_action('waste/enquiry', [ uprn ]) %]?template=problem&amp;service_id=[% unit.service_id %]" class="waste-service-link waste-service-descriptor">Report a problem with a [% unit.service_name FILTER lower %] collection</a>
[% IF unit.request_allowed %]
[% any_request_allowed = 1 %]
<form method="post" action="[% c.uri_for_action('waste/request', [ uprn ]) %]">
@@ -12,3 +13,8 @@
<input type="submit" value="Request a new [% unit.service_name FILTER lower %] container" class="waste-service-descriptor waste-service-link">
</form>
[% END %]
+ <form method="get" action="[% c.uri_for_action('waste/enquiry', [ uprn ]) %]">
+ <input type="hidden" name="service_id" value="[% unit.service_id %]">
+ <input type="hidden" name="category" id="category" value="General Enquiry">
+ <input type="submit" value="Contact us about a [% unit.service_name FILTER lower %] collection" class="waste-service-descriptor waste-service-link">
+ </form>