From 5f4d4f9d1f16d101c317f109241ac368509daafd Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:55:23 +0100 Subject: [PATCH] Include controller methods for bulk upload downloads --- app/controllers/lettings_logs_controller.rb | 18 +++++++++++++----- app/controllers/sales_logs_controller.rb | 16 ++++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index 630e2c9c9..6b7d1e446 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -5,8 +5,8 @@ class LettingsLogsController < LogsController before_action :find_resource, only: %i[update show] - before_action :session_filters, if: :current_user, only: %i[index email_csv download_csv] - before_action -> { filter_manager.serialize_filters_to_session }, if: :current_user, only: %i[index email_csv download_csv] + before_action :session_filters, if: :current_user, only: %i[index email_csv download_csv bulk_uploads] + before_action -> { filter_manager.serialize_filters_to_session }, if: :current_user, only: %i[index email_csv download_csv bulk_uploads] before_action :authenticate_scope!, only: %i[download_csv email_csv] before_action :extract_bulk_upload_from_session_filters, only: [:index] @@ -117,15 +117,23 @@ class LettingsLogsController < LogsController def bulk_uploads uploads = BulkUpload.lettings.where("created_at >= ?", 30.days.ago) - # unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, session_filters) - - @pagy, @bulk_uploads = pagy(uploads) + unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, filter_manager.session_filters) + @pagy, @bulk_uploads = pagy(unpaginated_filtered_uploads) @search_term = search_term + @total_count = uploads.size @searched = search_term.presence @filter_type = "lettings_bulk_uploads" render "bulk_upload_shared/uploads" end + def download_bulk_upload + bulk_upload = BulkUpload.find(params[:id]) + downloader = BulkUpload::Downloader.new(bulk_upload: bulk_upload) + downloader.call + + send_file downloader.file_path, filename: bulk_upload.filename, type: "text/csv" + end + private def session_filters diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 288ab8477..6c2877914 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -3,8 +3,8 @@ class SalesLogsController < LogsController rescue_from ActiveRecord::RecordNotFound, with: :render_not_found - before_action :session_filters, if: :current_user, only: %i[index email_csv download_csv] - before_action -> { filter_manager.serialize_filters_to_session }, if: :current_user, only: %i[index email_csv download_csv] + before_action :session_filters, if: :current_user, only: %i[index email_csv download_csv bulk_uploads] + before_action -> { filter_manager.serialize_filters_to_session }, if: :current_user, only: %i[index email_csv download_csv bulk_uploads] before_action :authenticate_scope!, only: %i[download_csv email_csv] before_action :extract_bulk_upload_from_session_filters, only: [:index] @@ -87,15 +87,23 @@ class SalesLogsController < LogsController def bulk_uploads uploads = BulkUpload.sales.where("created_at >= ?", 30.days.ago) - # unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, session_filters) + unpaginated_filtered_uploads = filter_manager.filtered_uploads(uploads, search_term, session_filters) - @pagy, @bulk_uploads = pagy(uploads) + @pagy, @bulk_uploads = pagy(unpaginated_filtered_uploads) @search_term = search_term @searched = search_term.presence @filter_type = "sales_bulk_uploads" render "bulk_upload_shared/uploads" end + def download_bulk_upload + bulk_upload = BulkUpload.find(params[:id]) + downloader = BulkUpload::Downloader.new(bulk_upload: bulk_upload) + downloader.call + + send_file downloader.file_path, filename: bulk_upload.filename, type: "text/csv" + end + private def session_filters