Browse Source

Add relationship outcomes page

pull/2606/head
Manny Dinssa 2 years ago
parent
commit
8d517f97b3
  1. 9
      app/controllers/merge_requests_controller.rb
  2. 66
      app/helpers/merge_requests_helper.rb
  3. 23
      app/models/merge_request.rb
  4. 26
      app/views/merge_requests/relationship_outcomes.html.erb
  5. 1
      config/routes.rb

9
app/controllers/merge_requests_controller.rb

@ -9,6 +9,7 @@ class MergeRequestsController < ApplicationController
def helpdesk_ticket; end
def merge_start_confirmation; end
def user_outcomes; end
def relationship_outcomes; end
def create
ActiveRecord::Base.transaction do
@ -63,7 +64,13 @@ class MergeRequestsController < ApplicationController
def start_merge
if @merge_request.status == "ready_to_merge"
@merge_request.update!(processing: true, last_failed_attempt: nil, total_users: @merge_request.total_visible_users_after_merge)
@merge_request.update!(
processing: true,
last_failed_attempt: nil,
total_users: @merge_request.total_visible_users_after_merge,
total_stock_owners: @merge_request.total_stock_owners_after_merge,
total_managing_agents: @merge_request.total_managing_agents_after_merge,
)
ProcessMergeRequestJob.perform_later(merge_request: @merge_request)
end

66
app/helpers/merge_requests_helper.rb

@ -27,7 +27,7 @@ module MergeRequestsHelper
{ label: "Total users after merge", value: display_value_or_placeholder(merge_request.total_users_label), action: merge_outcome_action(merge_request, "user_outcomes") },
{ label: "Total schemes after merge", value: display_value_or_placeholder(merge_request.total_schemes), action: { text: "View", href: "#", visually_hidden_text: "total schemes after merge" } },
{ label: "Total logs after merge", value: merge_request.total_lettings_logs.present? || merge_request.total_sales_logs.present? ? "#{merge_request.total_lettings_logs} lettings logs<br>#{merge_request.total_sales_logs} sales logs".html_safe : display_value_or_placeholder(nil), action: { text: "View", href: "#", visually_hidden_text: "total logs after merge" } },
{ label: "Total stock owners & managing agents after merge", value: merge_request.total_stock_owners.present? || merge_request.total_managing_agents.present? ? "#{merge_request.total_stock_owners} stock owners<br>#{merge_request.total_managing_agents} managing agents".html_safe : display_value_or_placeholder(nil), action: { text: "View", href: "#", visually_hidden_text: "total stock owners & managing agents after merge" } },
{ label: "Total stock owners & managing agents after merge", value: display_value_or_placeholder(merge_request.total_stock_owners_managing_agents_label), action: merge_outcome_action(merge_request, "relationship_outcomes") },
]
end
@ -107,4 +107,68 @@ module MergeRequestsHelper
count = merge_request.total_visible_users_after_merge
"#{"#{count} user".pluralize(count)} after merge"
end
def total_stock_owners_after_merge_text(merge_request)
count = merge_request.total_stock_owners_after_merge || 0
"#{"#{count} stock owner".pluralize(count)} after merge"
end
def total_managing_agents_after_merge_text(merge_request)
count = merge_request.total_managing_agents_after_merge || 0
"#{"#{count} managing agent".pluralize(count)} after merge"
end
def stock_owners_text(merge_request)
relationship_text(merge_request, "stock_owner", :stock_owners_organisation_path)
end
def managing_agent_text(merge_request)
relationship_text(merge_request, "managing_agent", :managing_agents_organisation_path)
end
def relationship_text(merge_request, relationship_type, relationship_path_helper)
html_content = ""
duplicates = duplicate_relationships(merge_request, relationship_type)
organisations_without_relationships = ([merge_request.absorbing_organisation] + merge_request.merging_organisations).select { |org| org.send(relationship_type.pluralize).visible.empty? }
if duplicates.any?
html_content += "Some of the organisations merging have common #{relationship_type.humanize(capitalize: false).pluralize}.<br><br>"
end
if organisations_without_relationships.any?
org_names = organisations_without_relationships.map(&:name).to_sentence
verb = organisations_without_relationships.count > 1 ? "have" : "has"
html_content += "#{org_names} #{verb} no #{relationship_type.humanize(capitalize: false).pluralize}.<br><br>"
end
([merge_request.absorbing_organisation] + merge_request.merging_organisations).each do |org|
relationship_count = org.send(relationship_type.pluralize).visible.count
next if relationship_count.zero?
link_text = if relationship_count == 1
"View the #{relationship_count} #{org.name} #{relationship_type.humanize(capitalize: false)} (opens in a new tab)"
else
"View all #{relationship_count} #{org.name} #{relationship_type.humanize(capitalize: false).pluralize} (opens in a new tab)"
end
html_content += "#{govuk_link_to(link_text, send(relationship_path_helper, org), target: '_blank')}<br><br>"
end
html_content.html_safe
end
def duplicate_relationships(merge_request, relationship_type)
relationships = merge_request.absorbing_organisation.send(relationship_type.pluralize) + merge_request.merging_organisations.flat_map { |org| org.send(relationship_type.pluralize) }
seen = Set.new
duplicates = []
relationships.each do |relationship|
if seen.include?(relationship)
duplicates << relationship
else
seen.add(relationship)
end
end
duplicates
end
end

23
app/models/merge_request.rb

@ -61,8 +61,29 @@ class MergeRequest < ApplicationRecord
absorbing_organisation.users.visible.count + merging_organisations.sum { |org| org.users.visible.count }
end
def total_stock_owners_after_merge
return total_stock_owners if status == STATUS[:request_merged] || status == STATUS[:processing]
stock_owners = absorbing_organisation.stock_owners.visible + merging_organisations.flat_map { |org| org.stock_owners.visible }
stock_owners.uniq.count
end
def total_managing_agents_after_merge
return total_managing_agents if status == STATUS[:request_merged] || status == STATUS[:processing]
managing_agents = absorbing_organisation.managing_agents.visible + merging_organisations.flat_map { |org| org.managing_agents.visible }
managing_agents.uniq.count
end
def total_users_label
"#{total_visible_users_after_merge} #{'User'.pluralize(total_visible_users_after_merge)}"
"#{total_visible_users_after_merge} #{'user'.pluralize(total_visible_users_after_merge)}"
end
def total_stock_owners_managing_agents_label
stock_owners_count = total_stock_owners_after_merge
managing_agents_count = total_managing_agents_after_merge
"#{stock_owners_count} #{'stock owner'.pluralize(stock_owners_count)}\n#{managing_agents_count} #{'managing agent'.pluralize(managing_agents_count)}"
end
def organisations_with_users

26
app/views/merge_requests/relationship_outcomes.html.erb

@ -0,0 +1,26 @@
<% content_for :before_content do %>
<% title = "Stock owners & managing agents" %>
<% content_for :title, title %>
<%= govuk_back_link href: merge_request_path(@merge_request) %>
<% end %>
<h1 class="govuk-heading-l">
<span class="govuk-caption-l"><%= @merge_request.absorbing_organisation_name %></span>
Stock owners & managing agents
</h1>
<% unless @merge_request.status == "request_merged" || @merge_request.status == "processing" %>
<h2 class="govuk-heading-m"><%= total_stock_owners_after_merge_text(@merge_request) %></h2>
<p class="govuk-body">
<%= stock_owners_text(@merge_request) %>
</p>
<hr class="govuk-section-break govuk-section-break--m govuk-section-break--visible govuk-!-width-one-half">
<br>
<h2 class="govuk-heading-m"><%= total_managing_agents_after_merge_text(@merge_request) %></h2>
<p class="govuk-body">
<%= managing_agent_text(@merge_request) %>
</p>
<% end %>

1
config/routes.rb

@ -211,6 +211,7 @@ Rails.application.routes.draw do
get "helpdesk-ticket"
get "merge-start-confirmation"
get "user-outcomes"
get "relationship-outcomes"
get "delete-confirmation", to: "merge_requests#delete_confirmation"
delete "delete", to: "merge_requests#delete"
patch "start-merge", to: "merge_requests#start_merge"

Loading…
Cancel
Save