From 88fe0b296ef128991e9fd4fffe9a12baf582cec6 Mon Sep 17 00:00:00 2001 From: Arthur Campbell Date: Thu, 20 Apr 2023 15:16:11 +0100 Subject: [PATCH] add relevant links in the UI and pipe everything together in controllers amend organisations controller to have flexibility to download logs of either type add necessary methods to sales log controller, raising shared method to logs controller update routing for amendments and additions extract helper method to build urls for downloading logs within an organisation --- app/controllers/lettings_logs_controller.rb | 6 +---- app/controllers/logs_controller.rb | 4 +++ app/controllers/organisations_controller.rb | 30 ++++++++++++++++----- app/controllers/sales_logs_controller.rb | 14 ++++++++++ app/helpers/logs_helper.rb | 9 +++++++ app/views/logs/_log_list.html.erb | 2 +- app/views/organisations/logs.html.erb | 4 +-- config/routes.rb | 13 ++++++--- 8 files changed, 64 insertions(+), 18 deletions(-) diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index c97f5f45d..d0ec2460d 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -91,13 +91,9 @@ class LettingsLogsController < LogsController render "download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: email_csv_lettings_logs_path, codes_only: } end - def codes_only_export?(params) - params.require(:codes_only) == "true" - end - def email_csv all_orgs = params["organisation_select"] == "all" - codes_only_export = params.require(:codes_only) == "true" + codes_only_export = codes_only_export?(params) EmailCsvJob.perform_later(current_user, search_term, @session_filters, all_orgs, nil, codes_only_export) redirect_to csv_confirmation_lettings_logs_path end diff --git a/app/controllers/logs_controller.rb b/app/controllers/logs_controller.rb index 603608241..91276f9ce 100644 --- a/app/controllers/logs_controller.rb +++ b/app/controllers/logs_controller.rb @@ -28,6 +28,10 @@ private end end + def codes_only_export?(params) + params.require(:codes_only) == "true" + end + def post_create_redirect_url raise "implement in sub class" end diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index 70943063f..43a8562ce 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -6,8 +6,8 @@ class OrganisationsController < ApplicationController before_action :authenticate_user! before_action :find_resource, except: %i[index new create] before_action :authenticate_scope!, except: [:index] - before_action -> { session_filters(specific_org: true) }, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_csv download_csv] - before_action :set_session_filters, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_csv download_csv] + before_action -> { session_filters(specific_org: true) }, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_lettings_csv download_lettings_csv email_sales_csv download_sales_csv] + before_action :set_session_filters, if: -> { current_user.support? || current_user.organisation.has_managing_agents? }, only: %i[lettings_logs sales_logs email_lettings_csv download_lettings_csv email_sales_csv download_sales_csv] def index redirect_to organisation_path(current_user.organisation) unless current_user.support? @@ -99,23 +99,24 @@ class OrganisationsController < ApplicationController @pagy, @logs = pagy(unpaginated_filtered_logs) @searched = search_term.presence @total_count = organisation_logs.size + @log_type = :lettings render "logs", layout: "application" end end end - def download_csv + def download_lettings_csv organisation_logs = LettingsLog.visible.where(owning_organisation_id: @organisation.id) unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) codes_only = params.require(:codes_only) == "true" - render "logs/download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: logs_email_csv_organisation_path, codes_only: } + render "logs/download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: lettings_logs_email_csv_organisation_path, codes_only: } end - def email_csv + def email_lettings_csv codes_only_export = params.require(:codes_only) == "true" EmailCsvJob.perform_later(current_user, search_term, @session_filters, false, @organisation, codes_only_export) - redirect_to logs_csv_confirmation_organisation_path + redirect_to lettings_logs_csv_confirmation_organisation_path end def sales_logs @@ -128,6 +129,7 @@ class OrganisationsController < ApplicationController @pagy, @logs = pagy(unpaginated_filtered_logs) @searched = search_term.presence @total_count = organisation_logs.size + @log_type = :sales render "logs", layout: "application" end @@ -137,6 +139,20 @@ class OrganisationsController < ApplicationController end end + def download_sales_csv + organisation_logs = SalesLog.visible.where(owning_organisation_id: @organisation.id) + unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) + codes_only = params.require(:codes_only) == "true" + + render "logs/download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: sales_logs_email_csv_organisation_path, codes_only: } + end + + def email_sales_csv + codes_only_export = params.require(:codes_only) == "true" + EmailCsvJob.perform_later(current_user, search_term, @session_filters, false, @organisation, codes_only_export, "sales") + redirect_to sales_logs_csv_confirmation_organisation_path + end + def merge_request @merge_request = MergeRequest.new end @@ -152,7 +168,7 @@ private end def authenticate_scope! - if %w[create new lettings_logs download_csv email_csv].include? action_name + if %w[create new lettings_logs download_lettings_csv email_lettings_csv email_sales_csv download_sales_csv].include? action_name head :unauthorized and return unless current_user.support? elsif current_user.organisation != @organisation && !current_user.support? render_not_found diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 155f606ab..a338fcc48 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -36,6 +36,20 @@ class SalesLogsController < LogsController end end + def download_csv + unpaginated_filtered_logs = filtered_logs(current_user.sales_logs, search_term, @session_filters) + codes_only = codes_only_export?(params) + + render "download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: email_csv_sales_logs_path, codes_only: } + end + + def email_csv + all_orgs = params["organisation_select"] == "all" # what's this for? params['organisation_select'] appears to always be nil + codes_only_export = codes_only_export?(params) + EmailCsvJob.perform_later(current_user, search_term, @session_filters, all_orgs, nil, codes_only_export, "sales") + redirect_to csv_confirmation_lettings_logs_path + end + def post_create_redirect_url(log) sales_log_url(log) end diff --git a/app/helpers/logs_helper.rb b/app/helpers/logs_helper.rb index aa132afd6..f38ff3193 100644 --- a/app/helpers/logs_helper.rb +++ b/app/helpers/logs_helper.rb @@ -36,6 +36,15 @@ module LogsHelper def csv_download_url_for_controller(controller_type:, search:, codes_only:) case log_type_for_controller(controller_type) when "lettings" then csv_download_lettings_logs_path(search:, codes_only:) + when "sales" then csv_download_sales_logs_path(search:, codes_only:) + end + end + + def csv_download_url_by_log_type(log_type, organisation, search:, codes_only:) + if log_type == :lettings + lettings_logs_csv_download_organisation_path(organisation, search:, codes_only:) + else + sales_logs_csv_download_organisation_path(organisation, search:, codes_only:) end end end diff --git a/app/views/logs/_log_list.html.erb b/app/views/logs/_log_list.html.erb index 9112cde81..e92186d4d 100644 --- a/app/views/logs/_log_list.html.erb +++ b/app/views/logs/_log_list.html.erb @@ -1,6 +1,6 @@

<%= render(SearchResultCaptionComponent.new(searched:, count: pagy.count, item_label:, total_count:, item: "logs", path: request.path)) %> - <% if logs&.first&.lettings? %> + <% if logs&.any? %> <%= govuk_link_to "Download (CSV)", csv_download_url, type: "text/csv", class: "govuk-!-margin-right-4" %> <% if @current_user.support? %> <%= govuk_link_to "Download (CSV, codes only)", csv_codes_only_download_url, type: "text/csv" %> diff --git a/app/views/organisations/logs.html.erb b/app/views/organisations/logs.html.erb index bac737e6c..55c130c29 100644 --- a/app/views/organisations/logs.html.erb +++ b/app/views/organisations/logs.html.erb @@ -34,8 +34,8 @@ searched: @searched, item_label:, total_count: @total_count, - csv_download_url: logs_csv_download_organisation_path(@organisation, search: @search_term, codes_only: false), - csv_codes_only_download_url: logs_csv_download_organisation_path(@organisation, search: @search_term, codes_only: true), + csv_download_url: csv_download_url_by_log_type(@log_type, @organisation, search: @search_term, codes_only: false), + csv_codes_only_download_url: csv_download_url_by_log_type(@log_type, @organisation, search: @search_term, codes_only: true), } %> <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "logs" } %> diff --git a/config/routes.rb b/config/routes.rb index 359e7e121..e815b5137 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -113,9 +113,12 @@ Rails.application.routes.draw do get "users/invite", to: "users/account#new" get "lettings-logs", to: "organisations#lettings_logs" get "sales-logs", to: "organisations#sales_logs" - get "logs/csv-download", to: "organisations#download_csv" - post "logs/email-csv", to: "organisations#email_csv" - get "logs/csv-confirmation", to: "lettings_logs#csv_confirmation" + get "lettings-logs/csv-download", to: "organisations#download_lettings_csv" + post "lettings-logs/email-csv", to: "organisations#email_lettings_csv" + get "lettings-logs/csv-confirmation", to: "lettings_logs#csv_confirmation" + get "sales-logs/csv-download", to: "organisations#download_sales_csv" + post "sales-logs/email-csv", to: "organisations#email_sales_csv" + get "sales-logs/csv-confirmation", to: "sales_logs#csv_confirmation" get "schemes", to: "organisations#schemes" get "stock-owners", to: "organisation_relationships#stock_owners" get "stock-owners/add", to: "organisation_relationships#add_stock_owner" @@ -198,6 +201,10 @@ Rails.application.routes.draw do resources :sales_logs, path: "/sales-logs" do collection do + get "csv-download", to: "sales_logs#download_csv" + post "email-csv", to: "sales_logs#email_csv" + get "csv-confirmation", to: "sales_logs#csv_confirmation" + resources :bulk_upload_sales_logs, path: "bulk-upload-logs" do collection do get :start