diff --git a/app/components/create_log_actions_component.rb b/app/components/create_log_actions_component.rb index c61a85b80..11c63c3a9 100644 --- a/app/components/create_log_actions_component.rb +++ b/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 diff --git a/app/components/missing_stock_owners_banner_component.html.erb b/app/components/missing_stock_owners_banner_component.html.erb new file mode 100644 index 000000000..1e961f4f9 --- /dev/null +++ b/app/components/missing_stock_owners_banner_component.html.erb @@ -0,0 +1,8 @@ +<% if display_banner? %> + <%= govuk_notification_banner(title_text: "Important") do %> +

+ <%= header_text %> +

+ <%= banner_text %> + <% end %> +<% end %> diff --git a/app/components/missing_stock_owners_banner_component.rb b/app/components/missing_stock_owners_banner_component.rb new file mode 100644 index 000000000..6585dd6ea --- /dev/null +++ b/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.
+ 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 diff --git a/app/views/logs/index.html.erb b/app/views/logs/index.html.erb index b0f7de6e0..603384a31 100644 --- a/app/views/logs/index.html.erb +++ b/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)) %> diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 646855f2e..661b85fd7 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/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