diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 3d1aa3f5f..f0ff6e602 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -1,5 +1,5 @@ class MergeRequestsController < ApplicationController - before_action :find_resource, only: %i[update organisations update_organisations remove_merging_organisation] + before_action :find_resource, only: %i[update organisations update_organisations remove_merging_organisation absorbing_organisation confirm_telephone_number new_org_name] before_action :authenticate_user! before_action :authenticate_scope!, except: [:create] @@ -13,12 +13,18 @@ class MergeRequestsController < ApplicationController render_not_found end + def absorbing_organisation; end + def confirm_telephone_number; end + def new_org_name; end + def organisations @answer_options = organisations_answer_options end def update - if @merge_request.update(merge_request_params) + if params.dig(:merge_request, :absorbing_organisation_id) == "other" + redirect_to next_page_path + elsif @merge_request.update(merge_request_params) redirect_to next_page_path else render previous_template, status: :unprocessable_entity @@ -53,7 +59,12 @@ private end def merge_request_params - merge_params = params.fetch(:merge_request, {}).permit(:requesting_organisation_id, :other_merging_organisations, :status) + merge_params = params.fetch(:merge_request, {}).permit( + :requesting_organisation_id, + :other_merging_organisations, + :status, + :absorbing_organisation_id, + ) if merge_params[:requesting_organisation_id].present? && (current_user.data_coordinator? || current_user.data_provider?) merge_params[:requesting_organisation_id] = current_user.organisation.id @@ -63,7 +74,10 @@ private end def merge_request_organisation_params - { merge_request: @merge_request, merging_organisation_id: params[:merge_request][:merging_organisation] } + { + merge_request: @merge_request, + merging_organisation_id: params.dig(:merge_request, :merging_organisation), + } end def find_resource @@ -71,11 +85,22 @@ private end def next_page_path - absorbing_organisation_merge_request_path(@merge_request) + if params.dig(:merge_request, :absorbing_organisation_id) == "other" + # TODO: flow to be implemented in follow up PR + new_org_name_merge_request_path(@merge_request) + elsif params.dig(:merge_request, :absorbing_organisation_id).present? + confirm_telephone_number_merge_request_path(@merge_request) + else + absorbing_organisation_merge_request_path(@merge_request) + end end def previous_template - :organisations + if params.dig(:merge_request, :absorbing_organisation_id).present? + :absorbing_organisation + else + :organisations + end end def authenticate_scope! diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 111d25321..94e2f6d00 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -1,6 +1,7 @@ class MergeRequest < ApplicationRecord belongs_to :requesting_organisation, class_name: "Organisation" has_many :merge_request_organisations + belongs_to :absorbing_organisation, class_name: "Organisation", optional: true has_many :merging_organisations, through: :merge_request_organisations, source: :merging_organisation STATUS = { diff --git a/app/views/merge_requests/absorbing_organisation.html.erb b/app/views/merge_requests/absorbing_organisation.html.erb new file mode 100644 index 000000000..386dde311 --- /dev/null +++ b/app/views/merge_requests/absorbing_organisation.html.erb @@ -0,0 +1,36 @@ +<% content_for :before_content do %> + <% title = "Tell us if your organisation is merging" %> + <% content_for :title, title %> + <%= govuk_back_link(href: :back) %> +<% end %> + +
Select the organisation that the other organisations are merging into.
+ + <%= form_with model: @merge_request, url: merge_request_path, method: :patch do |f| %> + <%= f.govuk_error_summary %> + + <%= f.govuk_radio_buttons_fieldset( + :absorbing_organisation_id, + hint: { text: "For example, if Skype and Yammer merged into Microsoft, you would select Microsoft. " }, + legend: nil, + ) do %> + <% @merge_request.merging_organisations.order(:name).each do |org| %> + <%= f.govuk_radio_button( + :absorbing_organisation_id, + org.id, + label: { text: org.name }, + link_errors: true, + ) %> + <% end %> + <%= f.govuk_radio_divider %> + <%= f.govuk_radio_button :absorbing_organisation_id, "other", label: { text: "These organisations are merging into a new one" } %> + <% end %> + + <%= f.govuk_submit %> + <% end %> +Confirm the telephone number on file, or enter a new one.
+Add all organisations to be merged - we have already added your own.
++ Add all organisations to be merged - we have already added your own. +
-<%= form_with model: @merge_request, url: organisations_merge_request_path, method: :patch do |f| %> - <%= f.govuk_error_summary %> -Start typing to search
- <%= render partial: "organisation_relationships/related_organisation_select_question", locals: { - field: :merging_organisation, - question: Form::Question.new("", { "answer_options" => @answer_options }, nil), - f:, - } %> - <%= f.govuk_submit "Add organisation", classes: "govuk-button--secondary" %> - <%= govuk_table do |table| %> - <% @merge_request.merging_organisations.each do |merging_organisation| %> - <%= table.body do |body| %> - <%= body.row do |row| %> - <% row.cell(text: merging_organisation.name) %> - <% row.cell(html_attributes: { - scope: "row", - class: "govuk-!-text-align-right", - }) do %> - <% if @merge_request.requesting_organisation != merging_organisation %> - <%= govuk_link_to("Remove", organisations_remove_merge_request_path(merge_request: { merging_organisation: merging_organisation.id })) %> + <%= form_with model: @merge_request, url: organisations_merge_request_path, method: :patch do |f| %> + <%= f.govuk_error_summary %> +Start typing to search
+ <%= render partial: "organisation_relationships/related_organisation_select_question", locals: { + field: :merging_organisation, + question: Form::Question.new("", { "answer_options" => @answer_options }, nil), + f:, + } %> + <%= f.govuk_submit "Add organisation", classes: "govuk-button--secondary" %> + <%= govuk_table do |table| %> + <% @merge_request.merging_organisations.order(:name).each do |merging_organisation| %> + <%= table.body do |body| %> + <%= body.row do |row| %> + <% row.cell(text: merging_organisation.name) %> + <% row.cell(html_attributes: { + scope: "row", + class: "govuk-!-text-align-right", + }) do %> + <% if @merge_request.requesting_organisation != merging_organisation %> + <%= govuk_link_to("Remove", organisations_remove_merge_request_path(merge_request: { merging_organisation: merging_organisation.id })) %> + <% end %> <% end %> <% end %> <% end %> <% end %> <% end %> <% end %> -<% end %> -<%= form_with model: @merge_request, url: merge_request_path(id: @merge_request.id), method: :patch do |f| %> - <%= govuk_details(summary_text: "I cannot find an organisation on the list") do %> - <%= f.govuk_text_area :other_merging_organisations, label: { text: "Other organisations" }, hint: { text: "List other organisations that are part of the merge but not registered on CORE." }, rows: 9 %> - <% end %> - <% if @merge_request.merging_organisations.count > 1 %> - <%= f.govuk_submit "Continue" %> + <%= form_with model: @merge_request, url: merge_request_path(id: @merge_request.id), method: :patch do |f| %> + <%= govuk_details(summary_text: "I cannot find an organisation on the list") do %> + <%= f.govuk_text_area :other_merging_organisations, label: { text: "Other organisations" }, hint: { text: "List other organisations that are part of the merge but not registered on CORE." }, rows: 9 %> + <% end %> + <% if @merge_request.merging_organisations.count > 1 %> + <%= f.govuk_submit "Continue" %> + <% end %> <% end %> -<% end %>