Browse Source

DIsplay missing stock owners banner

pull/2086/head
Kat 2 years ago
parent
commit
a9b5eff130
  1. 1
      app/components/create_log_actions_component.rb
  2. 8
      app/components/missing_stock_owners_banner_component.html.erb
  3. 64
      app/components/missing_stock_owners_banner_component.rb
  4. 4
      app/views/logs/index.html.erb
  5. 35
      spec/requests/lettings_logs_controller_spec.rb

1
app/components/create_log_actions_component.rb

@ -14,6 +14,7 @@ class CreateLogActionsComponent < ViewComponent::Base
def display_actions?
return false if bulk_upload.present?
return true if user.support?
return false if !user.organisation.holds_own_stock? && user.organisation.stock_owners.empty? && user.organisation.absorbed_organisations.empty?
user.organisation.data_protection_confirmed?
end

8
app/components/missing_stock_owners_banner_component.html.erb

@ -0,0 +1,8 @@
<% if display_banner? %>
<%= govuk_notification_banner(title_text: "Important") do %>
<p class="govuk-notification-banner__heading govuk-!-width-full" style="max-width: fit-content">
<%= header_text %>
<p>
<%= banner_text %>
<% end %>
<% end %>

64
app/components/missing_stock_owners_banner_component.rb

@ -0,0 +1,64 @@
class MissingStockOwnersBannerComponent < ViewComponent::Base
include Rails.application.routes.url_helpers
attr_reader :user, :organisation
HELPDESK_URL = "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11".freeze
def initialize(user:)
@user = user
@organisation = user.organisation
super
end
def display_banner?
return false if user.support?
return false if DataProtectionConfirmationBannerComponent.new(user:, organisation:).display_banner?
!organisation.holds_own_stock? && organisation.stock_owners.empty? && organisation.absorbed_organisations.empty?
end
def header_text
if user.data_coordinator?
"Your organisation does not own stock. You must #{add_stock_owner_link} before you can create logs.".html_safe
else
"Your organisation does not own stock. You must add a stock owner before you can create logs.".html_safe
end
end
def banner_text
if user.data_coordinator?
"If your organisation does own stock, #{contact_helpdesk_link} to update your details.".html_safe
else
"If your organisation does own stock, #{contact_helpdesk_link} to update your details.</br>
Ask a data coordinator to add a stock owner. Find your data coordinators on the #{users_link}.".html_safe
end
end
private
def add_stock_owner_link
govuk_link_to(
"add a stock owner",
stock_owners_add_organisation_path(id: organisation.id),
class: "govuk-notification-banner__link govuk-!-font-weight-bold",
)
end
def contact_helpdesk_link
govuk_link_to(
"contact the helpdesk",
HELPDESK_URL,
class: "govuk-notification-banner__link govuk-!-font-weight-bold",
)
end
def users_link
govuk_link_to(
"users page",
users_path,
class: "govuk-notification-banner__link govuk-!-font-weight-bold",
)
end
end

4
app/views/logs/index.html.erb

@ -8,6 +8,10 @@
organisation: @organisation,
) %>
<%= render MissingStockOwnersBannerComponent.new(
user: current_user,
) %>
<% if @duplicate_sets_count&.positive? %>
<%= govuk_notification_banner(title_text: "Important", text: govuk_link_to("Review logs", duplicate_logs_path(referrer: "duplicate_logs_banner"))) do |banner| %>
<% banner.with_heading(text: I18n.t("notification.duplicate_sets", count: @duplicate_sets_count)) %>

35
spec/requests/lettings_logs_controller_spec.rb

@ -291,6 +291,41 @@ RSpec.describe LettingsLogsController, type: :request do
expect(page).to have_content("Managed by")
end
end
context "and organisation does not own stock or have valid stock owners" do
before do
organisation.update!(holds_own_stock: false)
end
it "hides button to create a new log" do
get "/lettings-logs"
expect(page).not_to have_content("Create a new lettings log")
end
context "with coordinator user" do
let(:user) { FactoryBot.create(:user, :data_coordinator) }
it "displays a banner exlaining why create new logs button is missing" do
get "/lettings-logs", headers:, params: {}
expect(page).to have_css(".govuk-notification-banner")
expect(page).to have_content("Your organisation does not own stock.")
expect(page).to have_link("add a stock owner", href: /stock-owners\/add/)
expect(page).not_to have_link("users page", href: /users/)
end
end
context "with provider user" do
let(:user) { FactoryBot.create(:user, :data_provider) }
it "displays a banner exlaining why create new logs button is missing" do
get "/lettings-logs", headers:, params: {}
expect(page).to have_css(".govuk-notification-banner")
expect(page).to have_content("Your organisation does not own stock.")
expect(page).not_to have_link("add a stock owner", href: /stock-owners\/add/)
expect(page).to have_link("users page", href: /users/)
end
end
end
end
context "when the user is a customer support user" do

Loading…
Cancel
Save