<%= I18n.t("support.case_hub_migration.edit.section.case") %>
@@ -163,25 +201,7 @@
<% end %>
-
-
- <%= I18n.t("support.case_hub_migration.edit.section.source") %>
-
-
-
-
-
-
- <%= I18n.t("support.case_hub_migration.label.case_source") %>
-
- -
- <%= I18n.t("support.case.label.source.#{@form.source}") %>
-
- -
- <%= form.button I18n.t("generic.button.change_answer"), class: "govuk-link", value: "change" %>
-
-
-
-
+
<%= I18n.t("support.case_hub_migration.edit.section.request_text") %>
diff --git a/app/views/support/cases/show/_case_details.html.erb b/app/views/support/cases/show/_case_details.html.erb
index d7bf6074e..a61c26b4e 100644
--- a/app/views/support/cases/show/_case_details.html.erb
+++ b/app/views/support/cases/show/_case_details.html.erb
@@ -57,6 +57,21 @@
+
+
+ <%= I18n.t("support.case.label.discovery_method.field") %>
+
+
+ <% if current_case.discovery_method.present? %>
+ <%= I18n.t("support.case.label.discovery_method.#{current_case.discovery_method}") %>
+ <%= if current_case.other? && !current_case.discovery_method_other_text.empty? then "- #{current_case.discovery_method_other_text}" end %>
+ <% else %>
+ <%= "Unknown" %>
+ <% end %>
+
+
+
+
<%= I18n.t("support.case.label.source.header") %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 457f011c6..1854c33d5 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -955,6 +955,19 @@ en:
schools_commercial_team: Schools Commercial Team (SCT)
sw_hub: South West (SW) Hub
unspecified: "-"
+ discovery_method:
+ legend: Case origin
+ field: Origin
+ please_select: Please select
+ other_text_field: Please specify origin
+ used_before: Used this service before
+ meeting_or_event: Meeting or event
+ newsletter: Newsletter
+ recommendation: Recommendation
+ search_engine: Search engine, such as Google
+ social_media: Social media, such as Twitter
+ website: Website, such as GOV.UK
+ other: Other
special_requirements: Accessibility
stage: Stage
state:
diff --git a/config/locales/validation/support/en.yml b/config/locales/validation/support/en.yml
index 672892e8f..aa239b586 100644
--- a/config/locales/validation/support/en.yml
+++ b/config/locales/validation/support/en.yml
@@ -117,6 +117,8 @@ en:
last_name: "" # Omitted
email: "" # Omitted
phone_number: Phone number
+ discovery_method: Case origin # Omitted
+ discovery_method_other_text: "" # Omitted
estimated_procurement_completion_date: Estimated procurement date
organisation_id: "" # Omitted
organisation_name: "" # Omitted
@@ -148,6 +150,12 @@ en:
# value in schema set to 13 as includes the + in +44
max_size?: "can not have more than 12 digits"
+ discovery_method:
+ missing: Select how you heard about this service
+ invalid: unknown selection
+ discovery_method_other_text:
+ missing: Explain how you heard about this service
+
estimated_procurement_completion_date:
format?: must follow the format of DD/MM/YYYY
category_id:
diff --git a/db/migrate/20230906141522_add_discovery_method_to_case.rb b/db/migrate/20230906141522_add_discovery_method_to_case.rb
new file mode 100644
index 000000000..2cf1343cb
--- /dev/null
+++ b/db/migrate/20230906141522_add_discovery_method_to_case.rb
@@ -0,0 +1,8 @@
+class AddDiscoveryMethodToCase < ActiveRecord::Migration[7.0]
+ def change
+ change_table :support_cases, bulk: true do |t|
+ t.integer :discovery_method
+ t.string :discovery_method_other_text
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 357797a2a..e2fdf998a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -12,7 +12,6 @@
ActiveRecord::Schema[7.0].define(version: 2023_09_19_092926) do
# These are extensions that must be enabled in order to support this database
- enable_extension "citext"
enable_extension "pg_trgm"
enable_extension "pgcrypto"
enable_extension "plpgsql"
@@ -84,8 +83,8 @@
t.datetime "updated_at", null: false
t.boolean "accessibility_research_opt_in"
t.string "accessibility_research_email"
- t.datetime "survey_sent_at", precision: nil
- t.datetime "survey_completed_at", precision: nil
+ t.datetime "survey_sent_at"
+ t.datetime "survey_completed_at"
t.index ["case_id"], name: "index_all_cases_survey_responses_on_case_id"
end
@@ -159,8 +158,8 @@
t.integer "status"
t.string "user_ip"
t.datetime "survey_started_at"
- t.datetime "survey_sent_at", precision: nil
- t.datetime "survey_completed_at", precision: nil
+ t.datetime "survey_sent_at"
+ t.datetime "survey_completed_at"
t.index ["case_id"], name: "index_exit_survey_responses_on_case_id"
end
@@ -307,8 +306,8 @@
t.string "title"
t.text "body"
t.string "slug"
- t.datetime "created_at", precision: nil, default: -> { "CURRENT_TIMESTAMP" }, null: false
- t.datetime "updated_at", precision: nil, default: -> { "CURRENT_TIMESTAMP" }, null: false
+ t.datetime "created_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
+ t.datetime "updated_at", default: -> { "CURRENT_TIMESTAMP" }, null: false
t.string "contentful_id"
t.text "sidebar"
t.string "breadcrumbs", default: [], array: true
@@ -481,6 +480,8 @@
t.boolean "with_school", default: false, null: false
t.date "next_key_date"
t.string "next_key_date_description"
+ t.integer "discovery_method"
+ t.string "discovery_method_other_text"
t.index ["category_id"], name: "index_support_cases_on_category_id"
t.index ["existing_contract_id"], name: "index_support_cases_on_existing_contract_id"
t.index ["new_contract_id"], name: "index_support_cases_on_new_contract_id"
@@ -725,7 +726,7 @@
t.string "ukprn"
t.string "telephone_number"
t.jsonb "local_authority"
- t.datetime "opened_date", precision: nil
+ t.datetime "opened_date"
t.string "number"
t.string "rsc_region"
t.string "trust_name"
@@ -907,6 +908,48 @@
add_foreign_key "user_journeys", "framework_requests"
add_foreign_key "user_journeys", "support_cases", column: "case_id"
+ create_view "support_establishment_searches", sql_definition: <<-SQL
+ SELECT organisations.id,
+ organisations.name,
+ (organisations.address ->> 'postcode'::text) AS postcode,
+ organisations.urn,
+ organisations.ukprn,
+ etypes.name AS establishment_type,
+ 'Support::Organisation'::text AS source
+ FROM (support_organisations organisations
+ JOIN support_establishment_types etypes ON ((etypes.id = organisations.establishment_type_id)))
+ WHERE (organisations.status <> 2)
+ UNION ALL
+ SELECT egroups.id,
+ egroups.name,
+ (egroups.address ->> 'postcode'::text) AS postcode,
+ NULL::character varying AS urn,
+ egroups.ukprn,
+ egtypes.name AS establishment_type,
+ 'Support::EstablishmentGroup'::text AS source
+ FROM (support_establishment_groups egroups
+ JOIN support_establishment_group_types egtypes ON ((egtypes.id = egroups.establishment_group_type_id)))
+ WHERE (egroups.status <> 2);
+ SQL
+ create_view "support_case_searches", sql_definition: <<-SQL
+ SELECT sc.id AS case_id,
+ sc.ref AS case_ref,
+ sc.created_at,
+ sc.updated_at,
+ sc.state AS case_state,
+ sc.email,
+ ses.name AS organisation_name,
+ ses.urn AS organisation_urn,
+ ses.ukprn AS organisation_ukprn,
+ (((sa.first_name)::text || ' '::text) || (sa.last_name)::text) AS agent_name,
+ sa.first_name AS agent_first_name,
+ sa.last_name AS agent_last_name,
+ cat.title AS category_title
+ FROM (((support_cases sc
+ LEFT JOIN support_agents sa ON ((sa.id = sc.agent_id)))
+ LEFT JOIN support_establishment_searches ses ON (((sc.organisation_id = ses.id) AND ((sc.organisation_type)::text = ses.source))))
+ LEFT JOIN support_categories cat ON ((sc.category_id = cat.id)));
+ SQL
create_view "support_case_data", sql_definition: <<-SQL
SELECT sc.id AS case_id,
sc.ref AS case_ref,
@@ -1009,48 +1052,6 @@
FROM support_interactions si_1
WHERE (si_1.event_type = 8)) sir ON ((si.case_id = sir.case_id)));
SQL
- create_view "support_establishment_searches", sql_definition: <<-SQL
- SELECT organisations.id,
- organisations.name,
- (organisations.address ->> 'postcode'::text) AS postcode,
- organisations.urn,
- organisations.ukprn,
- etypes.name AS establishment_type,
- 'Support::Organisation'::text AS source
- FROM (support_organisations organisations
- JOIN support_establishment_types etypes ON ((etypes.id = organisations.establishment_type_id)))
- WHERE (organisations.status <> 2)
- UNION ALL
- SELECT egroups.id,
- egroups.name,
- (egroups.address ->> 'postcode'::text) AS postcode,
- NULL::character varying AS urn,
- egroups.ukprn,
- egtypes.name AS establishment_type,
- 'Support::EstablishmentGroup'::text AS source
- FROM (support_establishment_groups egroups
- JOIN support_establishment_group_types egtypes ON ((egtypes.id = egroups.establishment_group_type_id)))
- WHERE (egroups.status <> 2);
- SQL
- create_view "support_case_searches", sql_definition: <<-SQL
- SELECT sc.id AS case_id,
- sc.ref AS case_ref,
- sc.created_at,
- sc.updated_at,
- sc.state AS case_state,
- sc.email,
- ses.name AS organisation_name,
- ses.urn AS organisation_urn,
- ses.ukprn AS organisation_ukprn,
- (((sa.first_name)::text || ' '::text) || (sa.last_name)::text) AS agent_name,
- sa.first_name AS agent_first_name,
- sa.last_name AS agent_last_name,
- cat.title AS category_title
- FROM (((support_cases sc
- LEFT JOIN support_agents sa ON ((sa.id = sc.agent_id)))
- LEFT JOIN support_establishment_searches ses ON (((sc.organisation_id = ses.id) AND ((sc.organisation_type)::text = ses.source))))
- LEFT JOIN support_categories cat ON ((sc.category_id = cat.id)));
- SQL
create_view "support_message_threads", sql_definition: <<-SQL
SELECT DISTINCT ON (se.outlook_conversation_id, se.case_id) se.outlook_conversation_id AS conversation_id,
se.case_id,
diff --git a/spec/features/engagement/create_case_spec.rb b/spec/features/engagement/create_case_spec.rb
index 57e581572..10e12054f 100644
--- a/spec/features/engagement/create_case_spec.rb
+++ b/spec/features/engagement/create_case_spec.rb
@@ -99,6 +99,7 @@ def valid_form_data_without_organisation
fill_in "create_case_form[last_name]", with: "last_name"
fill_in "create_case_form[email]", with: "test@example.com"
fill_in "create_case_form[phone_number]", with: "0778974653"
+ choose "Newsletter" # case origin
choose "Procurement" # request type
select "Other (General)", from: "select_request_details_category_id"
find("#request_details_other_category_text").set("Other Category Details")
diff --git a/spec/features/support/case_summary_spec.rb b/spec/features/support/case_summary_spec.rb
index 7a489e350..ae3fa22b4 100644
--- a/spec/features/support/case_summary_spec.rb
+++ b/spec/features/support/case_summary_spec.rb
@@ -9,7 +9,7 @@
context "when value and support level have been set to nil" do
let(:support_case) { create(:support_case, :with_fixed_category, :opened, value: nil, support_level: nil) }
- it "shows hypens" do
+ it "shows hyphens" do
within("div#case-details") do
expect(all("dt.govuk-summary-list__key")[0]).to have_text "Sub-category"
expect(all("dd.govuk-summary-list__value")[0]).to have_text "Fixed Category"
@@ -17,14 +17,16 @@
expect(all("dd.govuk-summary-list__value")[1]).to have_text "Not specified"
expect(all("dt.govuk-summary-list__key")[2]).to have_text "Case value"
expect(all("dd.govuk-summary-list__value")[2]).to have_text "Not specified"
- expect(all("dt.govuk-summary-list__key")[3]).to have_text "Source"
- expect(all("dd.govuk-summary-list__value")[3]).to have_text "-"
+ expect(all("dt.govuk-summary-list__key")[3]).to have_text "Origin"
+ expect(all("dd.govuk-summary-list__value")[3]).to have_text "Unknown"
+ expect(all("dt.govuk-summary-list__key")[4]).to have_text "Source"
+ expect(all("dd.govuk-summary-list__value")[4]).to have_text "-"
end
end
end
context "when value and support levels have been populated" do
- let(:support_case) { create(:support_case, :with_fixed_category, :opened, value: 123.32, support_level: "L2", source: :incoming_email) }
+ let(:support_case) { create(:support_case, :with_fixed_category, :opened, value: 123.32, support_level: "L2", source: :incoming_email, discovery_method: :newsletter) }
it "shows fields with details" do
within("div#case-details") do
@@ -34,8 +36,10 @@
expect(all("dd.govuk-summary-list__value")[1]).to have_text "2 - Specific advice"
expect(all("dt.govuk-summary-list__key")[2]).to have_text "Case value"
expect(all("dd.govuk-summary-list__value")[2]).to have_text "£123.32"
- expect(all("dt.govuk-summary-list__key")[3]).to have_text "Source"
- expect(all("dd.govuk-summary-list__value")[3]).to have_text "Email"
+ expect(all("dt.govuk-summary-list__key")[3]).to have_text "Origin"
+ expect(all("dd.govuk-summary-list__value")[3]).to have_text "Newsletter"
+ expect(all("dt.govuk-summary-list__key")[4]).to have_text "Source"
+ expect(all("dd.govuk-summary-list__value")[4]).to have_text "Email"
end
end
end
diff --git a/spec/features/support/case_tabs_spec.rb b/spec/features/support/case_tabs_spec.rb
index 96a3e9c6f..c324d2cdd 100644
--- a/spec/features/support/case_tabs_spec.rb
+++ b/spec/features/support/case_tabs_spec.rb
@@ -43,9 +43,10 @@
expect(all(".govuk-summary-list__row")[0]).to have_text "Sub-category"
expect(all(".govuk-summary-list__row")[1]).to have_text "Case level"
expect(all(".govuk-summary-list__row")[2]).to have_text "Case value"
- expect(all(".govuk-summary-list__row")[3]).to have_text "Source"
- expect(all(".govuk-summary-list__row")[4]).to have_text "Description of query"
- expect(all(".govuk-summary-list__row")[5]).to have_text "Next key date and description"
+ expect(all(".govuk-summary-list__row")[3]).to have_text "Origin"
+ expect(all(".govuk-summary-list__row")[4]).to have_text "Source"
+ expect(all(".govuk-summary-list__row")[5]).to have_text "Description of query"
+ expect(all(".govuk-summary-list__row")[6]).to have_text "Next key date and description"
end
end
diff --git a/spec/features/support/create_case_spec.rb b/spec/features/support/create_case_spec.rb
index d6529bb6d..a91dea6e5 100644
--- a/spec/features/support/create_case_spec.rb
+++ b/spec/features/support/create_case_spec.rb
@@ -84,10 +84,11 @@ def valid_form_data_without_organisation
fill_in "create_case_form[last_name]", with: "last_name"
fill_in "create_case_form[email]", with: "test@example.com"
fill_in "create_case_form[phone_number]", with: "0778974653"
+ choose "Newsletter" # case origin
choose "Procurement" # request type
select "Other (General)", from: "select_request_details_category_id"
find("#request_details_other_category_text").set("Other Category Details")
- select "North West (NW) Hub", from: "create_case_form[source]"
+ select "Schools Commercial Team (SCT)", from: "create_case_form[source]"
fill_in "create_case_form[request_text]", with: "This is a request"
fill_in "create_case_form[procurement_amount]", with: "45.22"
end
diff --git a/spec/models/support/case_spec.rb b/spec/models/support/case_spec.rb
index 7f85a232e..f77d59644 100644
--- a/spec/models/support/case_spec.rb
+++ b/spec/models/support/case_spec.rb
@@ -59,7 +59,7 @@
describe "#to_csv" do
it "includes headers" do
expect(described_class.to_csv).to eql(
- "id,ref,category_id,request_text,support_level,status,state,created_at,updated_at,agent_id,first_name,last_name,email,phone_number,source,organisation_id,existing_contract_id,new_contract_id,procurement_id,savings_status,savings_estimate_method,savings_actual_method,savings_estimate,savings_actual,action_required,organisation_type,value,closure_reason,extension_number,other_category,other_query,procurement_amount,confidence_level,special_requirements,query_id,exit_survey_sent,detected_category_id,creation_source,user_selected_category,created_by_id,procurement_stage_id,initial_request_text,with_school,next_key_date,next_key_date_description\n",
+ "id,ref,category_id,request_text,support_level,status,state,created_at,updated_at,agent_id,first_name,last_name,email,phone_number,source,organisation_id,existing_contract_id,new_contract_id,procurement_id,savings_status,savings_estimate_method,savings_actual_method,savings_estimate,savings_actual,action_required,organisation_type,value,closure_reason,extension_number,other_category,other_query,procurement_amount,confidence_level,special_requirements,query_id,exit_survey_sent,detected_category_id,creation_source,user_selected_category,created_by_id,procurement_stage_id,initial_request_text,with_school,next_key_date,next_key_date_description,discovery_method,discovery_method_other_text\n",
)
end
end