Browse Source

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
pull/1568/head
Arthur Campbell 3 years ago
parent
commit
88fe0b296e
  1. 6
      app/controllers/lettings_logs_controller.rb
  2. 4
      app/controllers/logs_controller.rb
  3. 30
      app/controllers/organisations_controller.rb
  4. 14
      app/controllers/sales_logs_controller.rb
  5. 9
      app/helpers/logs_helper.rb
  6. 2
      app/views/logs/_log_list.html.erb
  7. 4
      app/views/organisations/logs.html.erb
  8. 13
      config/routes.rb

6
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: } render "download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: email_csv_lettings_logs_path, codes_only: }
end end
def codes_only_export?(params)
params.require(:codes_only) == "true"
end
def email_csv def email_csv
all_orgs = params["organisation_select"] == "all" 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) EmailCsvJob.perform_later(current_user, search_term, @session_filters, all_orgs, nil, codes_only_export)
redirect_to csv_confirmation_lettings_logs_path redirect_to csv_confirmation_lettings_logs_path
end end

4
app/controllers/logs_controller.rb

@ -28,6 +28,10 @@ private
end end
end end
def codes_only_export?(params)
params.require(:codes_only) == "true"
end
def post_create_redirect_url def post_create_redirect_url
raise "implement in sub class" raise "implement in sub class"
end end

30
app/controllers/organisations_controller.rb

@ -6,8 +6,8 @@ class OrganisationsController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :find_resource, except: %i[index new create] before_action :find_resource, except: %i[index new create]
before_action :authenticate_scope!, except: [:index] 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 -> { 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_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_lettings_csv download_lettings_csv email_sales_csv download_sales_csv]
def index def index
redirect_to organisation_path(current_user.organisation) unless current_user.support? redirect_to organisation_path(current_user.organisation) unless current_user.support?
@ -99,23 +99,24 @@ class OrganisationsController < ApplicationController
@pagy, @logs = pagy(unpaginated_filtered_logs) @pagy, @logs = pagy(unpaginated_filtered_logs)
@searched = search_term.presence @searched = search_term.presence
@total_count = organisation_logs.size @total_count = organisation_logs.size
@log_type = :lettings
render "logs", layout: "application" render "logs", layout: "application"
end end
end end
end end
def download_csv def download_lettings_csv
organisation_logs = LettingsLog.visible.where(owning_organisation_id: @organisation.id) organisation_logs = LettingsLog.visible.where(owning_organisation_id: @organisation.id)
unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters) unpaginated_filtered_logs = filtered_logs(organisation_logs, search_term, @session_filters)
codes_only = params.require(:codes_only) == "true" 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 end
def email_csv def email_lettings_csv
codes_only_export = params.require(:codes_only) == "true" codes_only_export = params.require(:codes_only) == "true"
EmailCsvJob.perform_later(current_user, search_term, @session_filters, false, @organisation, codes_only_export) 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 end
def sales_logs def sales_logs
@ -128,6 +129,7 @@ class OrganisationsController < ApplicationController
@pagy, @logs = pagy(unpaginated_filtered_logs) @pagy, @logs = pagy(unpaginated_filtered_logs)
@searched = search_term.presence @searched = search_term.presence
@total_count = organisation_logs.size @total_count = organisation_logs.size
@log_type = :sales
render "logs", layout: "application" render "logs", layout: "application"
end end
@ -137,6 +139,20 @@ class OrganisationsController < ApplicationController
end end
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 def merge_request
@merge_request = MergeRequest.new @merge_request = MergeRequest.new
end end
@ -152,7 +168,7 @@ private
end end
def authenticate_scope! 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? head :unauthorized and return unless current_user.support?
elsif current_user.organisation != @organisation && !current_user.support? elsif current_user.organisation != @organisation && !current_user.support?
render_not_found render_not_found

14
app/controllers/sales_logs_controller.rb

@ -36,6 +36,20 @@ class SalesLogsController < LogsController
end end
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) def post_create_redirect_url(log)
sales_log_url(log) sales_log_url(log)
end end

9
app/helpers/logs_helper.rb

@ -36,6 +36,15 @@ module LogsHelper
def csv_download_url_for_controller(controller_type:, search:, codes_only:) def csv_download_url_for_controller(controller_type:, search:, codes_only:)
case log_type_for_controller(controller_type) case log_type_for_controller(controller_type)
when "lettings" then csv_download_lettings_logs_path(search:, codes_only:) 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 end
end end

2
app/views/logs/_log_list.html.erb

@ -1,6 +1,6 @@
<h2 class="govuk-body"> <h2 class="govuk-body">
<%= render(SearchResultCaptionComponent.new(searched:, count: pagy.count, item_label:, total_count:, item: "logs", path: request.path)) %> <%= 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" %> <%= govuk_link_to "Download (CSV)", csv_download_url, type: "text/csv", class: "govuk-!-margin-right-4" %>
<% if @current_user.support? %> <% if @current_user.support? %>
<%= govuk_link_to "Download (CSV, codes only)", csv_codes_only_download_url, type: "text/csv" %> <%= govuk_link_to "Download (CSV, codes only)", csv_codes_only_download_url, type: "text/csv" %>

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

@ -34,8 +34,8 @@
searched: @searched, searched: @searched,
item_label:, item_label:,
total_count: @total_count, total_count: @total_count,
csv_download_url: logs_csv_download_organisation_path(@organisation, search: @search_term, codes_only: false), csv_download_url: csv_download_url_by_log_type(@log_type, @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_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" } %> <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "logs" } %>
</div> </div>

13
config/routes.rb

@ -113,9 +113,12 @@ Rails.application.routes.draw do
get "users/invite", to: "users/account#new" get "users/invite", to: "users/account#new"
get "lettings-logs", to: "organisations#lettings_logs" get "lettings-logs", to: "organisations#lettings_logs"
get "sales-logs", to: "organisations#sales_logs" get "sales-logs", to: "organisations#sales_logs"
get "logs/csv-download", to: "organisations#download_csv" get "lettings-logs/csv-download", to: "organisations#download_lettings_csv"
post "logs/email-csv", to: "organisations#email_csv" post "lettings-logs/email-csv", to: "organisations#email_lettings_csv"
get "logs/csv-confirmation", to: "lettings_logs#csv_confirmation" 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 "schemes", to: "organisations#schemes"
get "stock-owners", to: "organisation_relationships#stock_owners" get "stock-owners", to: "organisation_relationships#stock_owners"
get "stock-owners/add", to: "organisation_relationships#add_stock_owner" 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 resources :sales_logs, path: "/sales-logs" do
collection 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 resources :bulk_upload_sales_logs, path: "bulk-upload-logs" do
collection do collection do
get :start get :start

Loading…
Cancel
Save