diff --git a/app/helpers/bulk_upload/lettings_log_to_csv.rb b/app/helpers/bulk_upload/lettings_log_to_csv.rb index 9fa4e9dba..b81fec3d7 100644 --- a/app/helpers/bulk_upload/lettings_log_to_csv.rb +++ b/app/helpers/bulk_upload/lettings_log_to_csv.rb @@ -16,9 +16,12 @@ class BulkUpload::LettingsLogToCsv def to_csv_row(seed: nil) year = log.collection_start_year - send("to_#{year}_csv_row", seed:) - rescue NoMethodError - raise NotImplementedError, "No mapping function implemented for year #{year}" + case year + when 2022, 2023, 2024, 2025 + to_year_csv_row(year, seed:) + else + raise NotImplementedError "No mapping function implemented for year #{year}" + end end def to_row @@ -30,7 +33,7 @@ class BulkUpload::LettingsLogToCsv def default_field_numbers_row(seed: nil) year = log.collection_start_year - send("default_#{year}_field_numbers_row", seed:) + default_field_numbers_row_for_year(year, seed:) rescue NoMethodError raise NotImplementedError "No mapping function implemented for year #{year}" end @@ -42,51 +45,13 @@ class BulkUpload::LettingsLogToCsv raise NotImplementedError "No mapping function implemented for year #{year}" end - def to_2022_csv_row(seed: nil) - if seed - row = to_2022_row.shuffle(random: Random.new(seed)) - (row_prefix + row).flatten.join(",") + line_ending - else - (row_prefix + to_2022_row).flatten.join(",") + line_ending - end - end - - def default_2022_field_numbers - (1..134).to_a - end - - def default_2022_field_numbers_row(seed: nil) - if seed - ["Field number"] + default_2022_field_numbers.shuffle(random: Random.new(seed)) - else - ["Field number"] + default_2022_field_numbers - end.flatten.join(",") + line_ending - end - - def to_2023_csv_row(seed: nil) - if seed - row = to_2023_row.shuffle(random: Random.new(seed)) - (row_prefix + row).flatten.join(",") + line_ending - else - (row_prefix + to_2023_row).flatten.join(",") + line_ending - end - end - - def to_2024_csv_row(seed: nil) + def to_year_csv_row(year, seed: nil) + unshuffled_row = send("to_#{year}_row") if seed - row = to_2024_row.shuffle(random: Random.new(seed)) + row = unshuffled_row.shuffle(random: Random.new(seed)) (row_prefix + row).flatten.join(",") + line_ending else - (row_prefix + to_2024_row).flatten.join(",") + line_ending - end - end - - def to_2025_csv_row(seed: nil) - if seed - row = to_2025_row.shuffle(random: Random.new(seed)) - (row_prefix + row).flatten.join(",") + line_ending - else - (row_prefix + to_2025_row).flatten.join(",") + line_ending + (row_prefix + unshuffled_row).flatten.join(",") + line_ending end end @@ -102,42 +67,30 @@ class BulkUpload::LettingsLogToCsv ] end - def default_2023_field_numbers_row(seed: nil) + def default_field_numbers_row_for_year(year, seed: nil) if seed - ["Field number"] + default_2023_field_numbers.shuffle(random: Random.new(seed)) + ["Field number"] + send("default_#{year}_field_numbers").shuffle(random: Random.new(seed)) else - ["Field number"] + default_2023_field_numbers + ["Field number"] + send("default_#{year}_field_numbers") end.flatten.join(",") + line_ending end - def default_2025_field_numbers_row(seed: nil) - if seed - ["Field number"] + default_2025_field_numbers.shuffle(random: Random.new(seed)) - else - ["Field number"] + default_2025_field_numbers - end.flatten.join(",") + line_ending - end - - def default_2024_field_numbers_row(seed: nil) - if seed - ["Field number"] + default_2024_field_numbers.shuffle(random: Random.new(seed)) - else - ["Field number"] + default_2024_field_numbers - end.flatten.join(",") + line_ending + def default_2022_field_numbers + (1..134).to_a end def default_2023_field_numbers [5, nil, nil, 15, 16, nil, 13, 40, 41, 42, 43, 46, 52, 56, 60, 64, 68, 72, 76, 47, 53, 57, 61, 65, 69, 73, 77, 51, 55, 59, 63, 67, 71, 75, 50, 54, 58, 62, 66, 70, 74, 78, 48, 49, 79, 81, 82, 123, 124, 122, 120, 102, 103, nil, 83, 84, 85, 86, 87, 88, 104, 109, 107, 108, 106, 100, 101, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 126, 128, 129, 130, 131, 132, 127, 125, 133, 134, 33, 34, 35, 36, 37, 38, nil, 7, 8, 9, 28, 14, 32, 29, 30, 31, 26, 27, 25, 23, 24, nil, 1, 3, 2, 80, nil, 121, 44, 89, 98, 92, 95, 90, 91, 93, 94, 97, 96, 99, 10, 11, 12, 45, 39, 6, 4, 17, 18, 19, 20, 21, 22] end - def default_2025_field_numbers - (1..129).to_a - end - def default_2024_field_numbers (1..130).to_a end + def default_2025_field_numbers + (1..129).to_a + end + def to_2025_row [ overrides[:organisation_id] || log.owning_organisation&.old_visible_id, # 1 diff --git a/spec/services/bulk_upload/lettings/validator_spec.rb b/spec/services/bulk_upload/lettings/validator_spec.rb index 60eb8a955..cfe654980 100644 --- a/spec/services/bulk_upload/lettings/validator_spec.rb +++ b/spec/services/bulk_upload/lettings/validator_spec.rb @@ -103,7 +103,7 @@ RSpec.describe BulkUpload::Lettings::Validator do before do values = log_to_csv.to_2024_row values[7] = nil - file.write(log_to_csv.default_2024_field_numbers_row) + file.write(log_to_csv.default_field_numbers_row_for_year(2024)) file.write(log_to_csv.to_custom_csv_row(seed: nil, field_values: values)) file.rewind end @@ -146,7 +146,7 @@ RSpec.describe BulkUpload::Lettings::Validator do before do log.needstype = nil values = log_to_csv.to_2024_row - file.write(log_to_csv.default_2024_field_numbers_row(seed:)) + file.write(log_to_csv.default_field_numbers_row_for_year(2024, seed:)) file.write(log_to_csv.to_custom_csv_row(seed:, field_values: values)) file.close end diff --git a/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb index 43e2f262a..f8cca52ef 100644 --- a/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb @@ -15,8 +15,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -39,8 +39,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -64,8 +64,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023, seed:)) file.rewind end @@ -108,7 +108,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do context "when parsing csv without headers" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -127,7 +127,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do before do file.write(bom) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -141,7 +141,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do before do file.write(invalid_sequence) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -158,8 +158,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\r") file.write("Type of letting the question applies to\r\n") file.write("Duplicate check field?\r") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -177,8 +177,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023)) file.rewind end @@ -190,7 +190,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do context "when without headers using default ordering" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2023_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2023)) file.rewind end @@ -210,8 +210,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2023_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2023_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2023, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2023, seed:)) file.rewind end diff --git a/spec/services/bulk_upload/lettings/year2024/csv_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/csv_parser_spec.rb index b0fcaf8b6..b736dc5e5 100644 --- a/spec/services/bulk_upload/lettings/year2024/csv_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/csv_parser_spec.rb @@ -15,8 +15,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end @@ -38,8 +38,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end @@ -62,8 +62,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024)) file.write("\n") file.rewind end @@ -92,8 +92,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024, seed:)) file.rewind end @@ -136,7 +136,7 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do context "when parsing csv without headers" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.rewind end @@ -155,7 +155,7 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do before do file.write(bom) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.rewind end @@ -169,7 +169,7 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do before do file.write(invalid_sequence) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.rewind end @@ -186,8 +186,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\r") file.write("Type of letting the question applies to\r\n") file.write("Duplicate check field?\r") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end @@ -205,8 +205,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024)) file.rewind end @@ -218,7 +218,7 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do context "when without headers using default ordering" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2024_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2024)) file.rewind end @@ -238,8 +238,8 @@ RSpec.describe BulkUpload::Lettings::Year2024::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2024_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2024_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2024, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2024, seed:)) file.rewind end diff --git a/spec/services/bulk_upload/lettings/year2025/csv_parser_spec.rb b/spec/services/bulk_upload/lettings/year2025/csv_parser_spec.rb index 924171724..dcb1cd354 100644 --- a/spec/services/bulk_upload/lettings/year2025/csv_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2025/csv_parser_spec.rb @@ -15,8 +15,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025)) file.rewind end @@ -38,8 +38,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025)) file.rewind end @@ -62,8 +62,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025)) file.write("\n") file.rewind end @@ -92,8 +92,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025, seed:)) file.rewind end @@ -136,7 +136,7 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do context "when parsing csv without headers" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2025)) file.rewind end @@ -155,7 +155,7 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do before do file.write(bom) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2025)) file.rewind end @@ -169,7 +169,7 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do before do file.write(invalid_sequence) - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2025)) file.rewind end @@ -186,8 +186,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\r") file.write("Type of letting the question applies to\r\n") file.write("Duplicate check field?\r") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025)) file.rewind end @@ -205,8 +205,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025)) file.rewind end @@ -218,7 +218,7 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do context "when without headers using default ordering" do before do - file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2025_csv_row) + file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_year_csv_row(2025)) file.rewind end @@ -238,8 +238,8 @@ RSpec.describe BulkUpload::Lettings::Year2025::CsvParser do file.write("Can be empty?\n") file.write("Type of letting the question applies to\n") file.write("Duplicate check field?\n") - file.write(BulkUpload::LettingsLogToCsv.new(log:).default_2025_field_numbers_row(seed:)) - file.write(BulkUpload::LettingsLogToCsv.new(log:).to_2025_csv_row(seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).default_field_numbers_row_for_year(2025, seed:)) + file.write(BulkUpload::LettingsLogToCsv.new(log:).to_year_csv_row(2025, seed:)) file.rewind end