diff --git a/app/controllers/bulk_upload_controller.rb b/app/controllers/bulk_upload_controller.rb index 12ad21547..bc28180e3 100644 --- a/app/controllers/bulk_upload_controller.rb +++ b/app/controllers/bulk_upload_controller.rb @@ -1,13 +1,33 @@ class BulkUploadController < ApplicationController - XLS = "application/vnd.ms-excel".freeze + SPREADSHEET_CONTENT_TYPES = %w[ + application/vnd.ms-excel + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + ] + + FIRST_DATA_ROW = 7 def show render "case_logs/bulk_upload" end def process_bulk_upload - if params["case_log_bulk_upload"].content_type == XLS + if SPREADSHEET_CONTENT_TYPES.include?(params["case_log_bulk_upload"].content_type) xlsx = Roo::Spreadsheet.open(params["case_log_bulk_upload"].tempfile, extension: :xlsx) + sheet = xlsx.sheet(0) + last_row = sheet.last_row + if last_row < FIRST_DATA_ROW + head :no_content + else + data_range = FIRST_DATA_ROW..last_row + data_range.map do |row_num| + row = sheet.row(row_num) + CaseLog.create!( + tenant_code: row[7], + startertenancy: row[8] + ) + end + redirect_to(case_logs_path) + end end end end diff --git a/spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx b/spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx new file mode 100644 index 000000000..df0745700 Binary files /dev/null and b/spec/fixtures/files/2021_22_lettings_bulk_upload.xlsx differ diff --git a/spec/requests/bulk_upload_controller_spec.rb b/spec/requests/bulk_upload_controller_spec.rb new file mode 100644 index 000000000..63cb5ec27 --- /dev/null +++ b/spec/requests/bulk_upload_controller_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe BulkUploadController, type: :request do + let(:url) { "/case_logs/bulk_upload" } + + before do + get url, params: {} + end + + describe "GET #show" do + it "returns a success response" do + expect(response).to be_successful + end + + it "returns a page with a file upload form" do + expect(response.body).to match(/