diff --git a/Gemfile b/Gemfile index 12d0bbdff..d88dd2af8 100644 --- a/Gemfile +++ b/Gemfile @@ -28,6 +28,8 @@ gem "notifications-ruby-client" # A modest javascript framework for the html you already have gem "stimulus-rails" # Spreadsheet parsing +gem "securerandom" + gem "roo" # Json Schema gem "json-schema" diff --git a/Gemfile.lock b/Gemfile.lock index d7648b37c..b71a87ded 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -469,6 +469,7 @@ DEPENDENCIES rubocop-govuk (= 4.3.0) rubocop-performance rubocop-rails + securerandom selenium-webdriver sentry-rails sentry-ruby diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 541e72666..c1a3c4239 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -4,6 +4,7 @@ class SchemesController < ApplicationController before_action :authenticate_user! before_action :find_resource, except: %i[index] + before_action :find_by_scheme_id, only: %i[edit] before_action :authenticate_scope! def index @@ -30,15 +31,48 @@ class SchemesController < ApplicationController end def create - debugger + @scheme = Scheme.new(clean_params) + @scheme.save + + redirect_to edit_scheme_path(id: @scheme.id) + end + + def edit + if !params[:scheme] + @scheme = Scheme.find(params[:id]) + render "schemes/primary_client_group", locals: { scheme: @scheme } + elsif params[:scheme][:primary_client_group] + required_params = params.require(:scheme).permit(:primary_client_group) + @scheme.update(required_params) + render "schemes/secondary_client_group", locals: { scheme: @scheme } + elsif params[:scheme][:secondary_client_group] + required_params = params.require(:scheme).permit(:secondaryy_client_group) + @scheme.update(required_params) + render "schemes/secondary_client_group", locals: { scheme: @scheme } + elsif params[:scheme][:support] + required_params = params.require(:scheme).permit(:secondaryy_client_group) + @scheme.update(required_params) + render "schemes/secondary_client_group", locals: { scheme: @scheme } + end end -private + private + + def clean_params + code = "S#{SecureRandom.alphanumeric(5)}".upcase + required_params = params.require(:scheme).permit(:service_name, :sensitive, :organisation_id, :scheme_type, :registered_under_care_act, :total_units).merge(code: code) + required_params[:sensitive] = required_params[:sensitive].to_i + required_params + end def search_term params["search"] end + def find_by_scheme_id + @scheme = Scheme.find_by(id: params[:scheme_id]) + end + def find_resource @scheme = Scheme.find_by(id: params[:id]) end diff --git a/app/views/schemes/new.html.erb b/app/views/schemes/new.html.erb index 35b302f3f..b2775e9e8 100644 --- a/app/views/schemes/new.html.erb +++ b/app/views/schemes/new.html.erb @@ -21,8 +21,8 @@ hint: { text: "This is how you’ll refer to this supported housing scheme within your organisation. For example, the name could relate to the address or location. You’ll be able to see the client group when selecting it." } %> <%= f.govuk_check_box :sensitive, - 1, 0, + 1, multiple: false, label: { text: "This scheme contains confidential information" } %> @@ -45,23 +45,23 @@ "data-controller": %w[accessible-autocomplete conditional-filter] %> <% end %> - <% scheme_types = Scheme.scheme_types.keys.map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> + <% scheme_types_selection = Scheme.scheme_types.keys.excluding("Missing").map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> <%= f.govuk_collection_radio_buttons :scheme_type, - scheme_types, + scheme_types_selection, :id, :name, legend: { text: "What is this type of scheme?", size: "m" } %> - <% care_act_types = Scheme.registered_under_care_acts.keys.map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> + <% care_acts_selection = Scheme.registered_under_care_acts.keys.reverse.map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> - <%= f.govuk_collection_radio_buttons :scheme_type, - care_act_types, + <%= f.govuk_collection_radio_buttons :registered_under_care_act, + care_acts_selection, :id, :name, legend: { text: "Is this scheme registered under the Care Standards Act 2000?", size: "m" } %> - <%= f.govuk_number_field :service_name, + <%= f.govuk_number_field :total_units, width: 2, label: { text: "Total number of units", size: "m" }, hint: { text: "For example, a unit can be a bedroom in a shared house or flat, or a house with 4 bedrooms. Do not include bedrooms used for wardens, managers, volunteers or sleep-in staff." } %> diff --git a/app/views/schemes/primary_client_group.html.erb b/app/views/schemes/primary_client_group.html.erb new file mode 100644 index 000000000..ba82a86ae --- /dev/null +++ b/app/views/schemes/primary_client_group.html.erb @@ -0,0 +1,32 @@ +<% content_for :before_content do %> + <%= govuk_back_link( + text: "Back", + href: :back, + ) %> +<% end %> + +<%= render partial: "organisations/headings", locals: { main: "What client group is this scheme intended for?", sub: @scheme.service_name } %> + +<%= form_for(@scheme, method: :patch, url: scheme_primary_path(scheme_id: @scheme.id)) do |f| %> +
+
+ <%= f.govuk_error_summary %> + +

+ <%= content_for(:title) %> +

+ + + + + <% primary_client_group_selection = Scheme.primary_client_groups.keys.excluding("Missing").map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> + <%= f.govuk_collection_radio_buttons :primary_client_group, + primary_client_group_selection, + :id, + :name, + legend: nil %> + + <%= f.govuk_submit "Save and continue" %> +
+
+<% end %> diff --git a/app/views/schemes/secondary_client_group.html.erb b/app/views/schemes/secondary_client_group.html.erb new file mode 100644 index 000000000..0a9d40eed --- /dev/null +++ b/app/views/schemes/secondary_client_group.html.erb @@ -0,0 +1,32 @@ +<% content_for :before_content do %> + <%= govuk_back_link( + text: "Back", + href: :back, + ) %> +<% end %> + +<%= render partial: "organisations/headings", locals: { main: "Does this scheme provide for another client group?", sub: @scheme.service_name } %> + +<%= form_for(@scheme, method: :patch, url: scheme_primary_path(scheme_id: @scheme.id)) do |f| %> +
+
+ <%= f.govuk_error_summary %> + +

+ <%= content_for(:title) %> +

+ + + + + <% primary_client_group_selection = Scheme.primary_client_groups.keys.excluding("Missing").map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> + <%= f.govuk_collection_radio_buttons :primary_client_group, + primary_client_group_selection, + :id, + :name, + legend: nil %> + + <%= f.govuk_submit "Save and continue" %> +
+
+<% end %> diff --git a/config/routes.rb b/config/routes.rb index 5c663bb13..0ee488417 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,8 @@ Rails.application.routes.draw do end resources :schemes do + patch "primary", to: "schemes#edit" + member do get "locations", to: "schemes#locations" end