Browse Source

feat: update 2022 csv parser to have col flexibility like 2023

pull/1588/head
Sam Seed 3 years ago
parent
commit
8b845c2109
  1. 26
      app/services/bulk_upload/lettings/year2022/csv_parser.rb
  2. 4
      app/services/bulk_upload/lettings/year2022/row_parser.rb

26
app/services/bulk_upload/lettings/year2022/csv_parser.rb

@ -11,7 +11,11 @@ class BulkUpload::Lettings::Year2022::CsvParser
end end
def row_offset def row_offset
with_headers? ? 5 : 0 if with_headers?
rows.find_index { |row| row[0].match(/field number/i) } + 1
else
0
end
end end
def col_offset def col_offset
@ -25,7 +29,7 @@ class BulkUpload::Lettings::Year2022::CsvParser
def row_parsers def row_parsers
@row_parsers ||= body_rows.map do |row| @row_parsers ||= body_rows.map do |row|
stripped_row = row[col_offset..] stripped_row = row[col_offset..]
hash = Hash[headers.zip(stripped_row)] hash = Hash[field_numbers.zip(stripped_row)]
BulkUpload::Lettings::Year2022::RowParser.new(hash) BulkUpload::Lettings::Year2022::RowParser.new(hash)
end end
@ -40,21 +44,29 @@ class BulkUpload::Lettings::Year2022::CsvParser
end end
def column_for_field(field) def column_for_field(field)
cols[headers.find_index(field) + col_offset] cols[field_numbers.find_index(field) + col_offset]
end end
def valid_field_numbers_count def valid_field_numbers_count
FIELDS field_numbers.count { |f| f != "field_blank" }
end end
def with_headers? def with_headers?
rows[0][0]&.match?(/\D+/) rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
end end
private private
def headers def default_field_numbers
@headers ||= ("field_1".."field_#{FIELDS}").to_a ("field_1".."field_#{FIELDS}").to_a
end
def field_numbers
@field_numbers ||= if with_headers?
rows[row_offset - 1][col_offset..].map { |h| h.present? && h.match?(/^[0-9]+$/) ? "field_#{h}" : "field_blank" }
else
default_field_numbers
end
end end
def row_sep def row_sep

4
app/services/bulk_upload/lettings/year2022/row_parser.rb

@ -142,6 +142,8 @@ class BulkUpload::Lettings::Year2022::RowParser
attribute :bulk_upload attribute :bulk_upload
attribute :block_log_creation, :boolean, default: -> { false } attribute :block_log_creation, :boolean, default: -> { false }
attribute :field_blank
attribute :field_1, :integer attribute :field_1, :integer
attribute :field_2 attribute :field_2
attribute :field_3 attribute :field_3
@ -366,7 +368,7 @@ class BulkUpload::Lettings::Year2022::RowParser
def blank_row? def blank_row?
attribute_set attribute_set
.to_hash .to_hash
.reject { |k, _| %w[bulk_upload block_log_creation].include?(k) } .reject { |k, _| %w[bulk_upload block_log_creation field_blank].include?(k) }
.values .values
.compact .compact
.empty? .empty?

Loading…
Cancel
Save