diff --git a/Gemfile.lock b/Gemfile.lock index ccf1e8bc2..19bfac61f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -124,6 +124,7 @@ GEM bootsnap (1.16.0) msgpack (~> 1.2) brakeman (6.0.1) + brow (0.4.1) builder (3.2.4) bullet (7.0.7) activesupport (>= 3.0.0) @@ -187,7 +188,7 @@ GEM concurrent-ruby (~> 1.0) dry-core (~> 1.0, < 2) zeitwerk (~> 2.6) - dry-schema (1.13.2) + dry-schema (1.13.3) concurrent-ruby (~> 1.0) dry-configurable (~> 1.0, >= 1.0.1) dry-core (~> 1.0, < 2) @@ -220,7 +221,7 @@ GEM exception_notification (4.5.0) actionmailer (>= 5.2, < 8) activesupport (>= 5.2, < 8) - execjs (2.8.1) + execjs (2.9.0) factory_bot (6.2.1) activesupport (>= 5.0.0) factory_bot_rails (6.2.0) @@ -241,23 +242,24 @@ GEM ffi-compiler (1.0.1) ffi (>= 1.0.0) rake - flipper (0.28.3) + flipper (1.0.0) + brow (~> 0.4.1) concurrent-ruby (< 2) - flipper-active_record (0.28.3) + flipper-active_record (1.0.0) activerecord (>= 4.2, < 8) - flipper (~> 0.28.3) - flipper-ui (0.28.3) + flipper (~> 1.0.0) + flipper-ui (1.0.0) erubi (>= 1.0.0, < 2.0.0) - flipper (~> 0.28.3) - rack (>= 1.4, < 3) + flipper (~> 1.0.0) + rack (>= 1.4, < 4) rack-protection (>= 1.5.3, <= 4.0.0) sanitize (< 7) foreman (0.87.2) fugit (1.8.1) et-orbi (~> 1, >= 1.2.7) raabro (~> 1.4) - globalid (1.1.0) - activesupport (>= 5.0) + globalid (1.2.1) + activesupport (>= 6.1) govuk_design_system_formbuilder (4.1.1) actionview (>= 6.1) activemodel (>= 6.1) @@ -341,7 +343,7 @@ GEM mini_mime (1.1.5) mini_racer (0.8.0) libv8-node (~> 18.16.0.0) - minitest (5.19.0) + minitest (5.20.0) mock_redis (0.37.0) msgpack (1.7.2) multi_json (1.15.0) @@ -358,11 +360,11 @@ GEM net-smtp (0.3.3) net-protocol nio4r (2.5.9) - nokogiri (1.15.3-arm64-darwin) + nokogiri (1.15.4-arm64-darwin) racc (~> 1.4) - nokogiri (1.15.3-x86_64-darwin) + nokogiri (1.15.4-x86_64-darwin) racc (~> 1.4) - nokogiri (1.15.3-x86_64-linux) + nokogiri (1.15.4-x86_64-linux) racc (~> 1.4) notifications-ruby-client (5.4.0) jwt (>= 1.5, < 3) @@ -397,7 +399,7 @@ GEM parser (3.2.2.3) ast (~> 2.4.1) racc - pg (1.5.3) + pg (1.5.4) pg_search (2.3.6) activerecord (>= 5.2) activesupport (>= 5.2) @@ -454,7 +456,7 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.7) + rails-i18n (7.0.8) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) rails_layout (1.0.42) @@ -491,7 +493,7 @@ GEM redis-actionpack (>= 5.0, < 6) redis-activesupport (>= 5.0, < 6) redis-store (>= 1.2, < 2) - redis-store (1.9.2) + redis-store (1.10.0) redis (>= 4, < 6) regexp_parser (2.8.1) request_store (1.5.1) @@ -591,7 +593,7 @@ GEM spring (4.1.1) spring-commands-rspec (1.0.4) spring (>= 0.9.1) - sprockets (4.2.0) + sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) sprockets-rails (3.4.2) @@ -607,7 +609,7 @@ GEM faraday-follow_redirects terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - terser (1.1.17) + terser (1.1.18) execjs (>= 0.3.0, < 3) thor (1.2.2) timeout (0.4.0) @@ -628,7 +630,7 @@ GEM validate_url (1.0.15) activemodel (>= 3.0.0) public_suffix - web-console (4.2.0) + web-console (4.2.1) actionview (>= 6.0.0) activemodel (>= 6.0.0) bindex (>= 0.4.0) @@ -637,7 +639,7 @@ GEM activesupport faraday (~> 2.0) faraday-follow_redirects - webmock (3.18.1) + webmock (3.19.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index ada4c7e4a..ba1886563 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -2,4 +2,5 @@ //= link_tree ../../javascript/faf //= link_tree ../../javascript/misc //= link_tree ../../javascript/request +//= link_tree ../../javascript/discovery_method //= link_tree ../../javascript/google-tag-manager diff --git a/app/controllers/engagement/cases_controller.rb b/app/controllers/engagement/cases_controller.rb index 56a5383bf..7583e180b 100644 --- a/app/controllers/engagement/cases_controller.rb +++ b/app/controllers/engagement/cases_controller.rb @@ -72,6 +72,8 @@ def form_params :email, :phone_number, :extension_number, + :discovery_method, + :discovery_method_other_text, :category_id, :query_id, :other_category, diff --git a/app/controllers/support/cases/previews_controller.rb b/app/controllers/support/cases/previews_controller.rb index aefa69fb6..a38f8c9d4 100644 --- a/app/controllers/support/cases/previews_controller.rb +++ b/app/controllers/support/cases/previews_controller.rb @@ -28,6 +28,8 @@ def form_params :email, :phone_number, :extension_number, + :discovery_method, + :discovery_method_other_text, :category_id, :query_id, :other_category, diff --git a/app/controllers/support/cases_controller.rb b/app/controllers/support/cases_controller.rb index 916a4a223..4421cf441 100644 --- a/app/controllers/support/cases_controller.rb +++ b/app/controllers/support/cases_controller.rb @@ -104,6 +104,8 @@ def form_params :email, :phone_number, :extension_number, + :discovery_method, + :discovery_method_other_text, :category_id, :query_id, :estimated_procurement_completion_date, diff --git a/app/forms/support/create_case_form.rb b/app/forms/support/create_case_form.rb index 63d74d134..395ebecc0 100644 --- a/app/forms/support/create_case_form.rb +++ b/app/forms/support/create_case_form.rb @@ -17,6 +17,8 @@ class CreateCaseForm option :email, optional: true option :phone_number, optional: true option :extension_number, optional: true + option :discovery_method, optional: true + option :discovery_method_other_text, optional: true option :source, optional: true option :creation_source, optional: true option :procurement_amount, ->(value) { value&.gsub(/[£,]/, "") }, optional: true diff --git a/app/forms/support/create_case_form_schema.rb b/app/forms/support/create_case_form_schema.rb index bcb165f0d..2d8244a17 100644 --- a/app/forms/support/create_case_form_schema.rb +++ b/app/forms/support/create_case_form_schema.rb @@ -11,6 +11,10 @@ class CreateCaseFormSchema < ::Support::Schema required(:last_name).value(:string) required(:email).value(:string) required(:source).value(:string) + + required(:discovery_method).value(:integer) + required(:discovery_method_other_text).value(:str?) + optional(:organisation_id).value(:string) optional(:organisation_type).value(:string) optional(:organisation_name).value(:string) @@ -60,6 +64,16 @@ class CreateCaseFormSchema < ::Support::Schema key(:source).failure(:missing) if value.blank? end + rule(:discovery_method) do + key.failure(:invalid) if + value < (Support::Case::discovery_methods.values.min()) || + value > (Support::Case::discovery_methods.values.max()) + end + + rule(:discovery_method_other_text) do + key(:discovery_method_other_text).failure(:missing) if value.blank? && values[:discovery_method].eql?(Support::Case::discovery_methods.keys.index("other")) + end + rule(:procurement_amount) do validator = Support::Forms::ValidateProcurementAmount.new(value) key(:procurement_amount).failure(:invalid) if validator.invalid_number? diff --git a/app/models/support/case.rb b/app/models/support/case.rb index bc871c153..3b42fa6b5 100644 --- a/app/models/support/case.rb +++ b/app/models/support/case.rb @@ -81,6 +81,18 @@ class Case < ApplicationRecord # faf - find a framework enum source: { digital: 0, nw_hub: 1, sw_hub: 2, incoming_email: 3, faf: 4, engagement_and_outreach: 5, schools_commercial_team: 6, engagement_and_outreach_cms: 7 } + # Discovery Method + # + # used_before - I've 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 + enum discovery_method: { used_before: 0, meeting_or_event: 1, newsletter: 2, recommendation: 3, search_engine: 4, social_media: 5, website: 6, other: 7 } + # Creation Source # # default - created by a member of the ProcOps team diff --git a/app/services/support/create_case.rb b/app/services/support/create_case.rb index 3444e1ddd..af163e078 100644 --- a/app/services/support/create_case.rb +++ b/app/services/support/create_case.rb @@ -21,6 +21,8 @@ def call email: @attrs[:email], phone_number: @attrs[:phone_number], extension_number: @attrs[:extension_number], + discovery_method: @attrs[:discovery_method], + discovery_method_other_text: @attrs[:discovery_method_other_text], request_text: @attrs[:request_text], action_required: @attrs.fetch(:action_required, false), procurement_amount: @attrs[:procurement_amount], diff --git a/app/views/engagement/cases/forms/_create_case_form.html.erb b/app/views/engagement/cases/forms/_create_case_form.html.erb index 72b74588e..dc4b582f3 100644 --- a/app/views/engagement/cases/forms/_create_case_form.html.erb +++ b/app/views/engagement/cases/forms/_create_case_form.html.erb @@ -33,6 +33,8 @@ <%= form.govuk_phone_field :phone_number, label: { text: I18n.t("support.case_hub_migration.label.phone_number", optional: I18n.t("support.generic.form.optional")) } %> <%= form.govuk_phone_field :extension_number, label: { text: I18n.t("support.case_hub_migration.label.extension_number", optional: I18n.t("support.generic.form.optional")) } %> + <%= render "support/cases/discovery_method/discovery_method", form: form %> + <%= render "support/cases/request_details/form_fields", form: form, show_request_text: false %> <%= form.govuk_text_field :procurement_amount, width: 5, diff --git a/app/views/engagement/cases/previews/new.html.erb b/app/views/engagement/cases/previews/new.html.erb index 56d0da2b9..0e3721544 100644 --- a/app/views/engagement/cases/previews/new.html.erb +++ b/app/views/engagement/cases/previews/new.html.erb @@ -117,6 +117,26 @@ + +