Skip to content

Commit

Permalink
On #47: Escape commas in ratio unit names
Browse files Browse the repository at this point in the history
  • Loading branch information
lentschi committed Feb 23, 2024
1 parent 614cfdc commit 943f178
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 10 deletions.
10 changes: 8 additions & 2 deletions lib/article_units_lib.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,20 @@ def self.get_translated_aliases_for_code(code)
self.unit_translations&.dig('unece_units')&.dig(code)&.dig('aliases')
end

def self.get_code_for_translated_name(name)
def self.get_code_for_unit_name(name)
return nil if name.blank?

translation = self.unit_translations&.dig('unece_units')&.find do |_code, translations|
translations['name'] == name
end

translation&.dig(0)
return translation[0] unless translation.nil?

matching_unit = self.units.find do |_code, unit|
unit[:name] == name
end

matching_unit[0]
end

def self.convert_old_unit(old_compound_unit_str, unit_quantity)
Expand Down
6 changes: 5 additions & 1 deletion lib/articles_csv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,12 @@ def data
article.minimum_order_quantity,
ArticleUnitsLib.get_translated_name_for_code(article.billing_unit),
article.article_category.try(:name),
article.article_unit_ratios.map { |ratio| "#{ratio.quantity} #{ArticleUnitsLib.get_translated_name_for_code(ratio.unit)}" }.join(", ")
article.article_unit_ratios.map { |ratio| "#{ratio.quantity} #{escape_csv_ratio(ArticleUnitsLib.get_translated_name_for_code(ratio.unit))}" }.join(", ")
]
end
end

def escape_csv_ratio(str)
str.gsub("\\", "\\\\").gsub(",", "\\,")
end
end
16 changes: 9 additions & 7 deletions lib/foodsoft_file.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ def self.parse(file, options = {})
:price => row[7],
:tax => row[8],
:deposit => (row[9].nil? ? "0" : row[9]),
:supplier_order_unit => ArticleUnitsLib.get_code_for_translated_name(row[10]),
:price_unit => ArticleUnitsLib.get_code_for_translated_name(row[11]),
:group_order_unit => ArticleUnitsLib.get_code_for_translated_name(row[12]),
:supplier_order_unit => ArticleUnitsLib.get_code_for_unit_name(row[10]),
:price_unit => ArticleUnitsLib.get_code_for_unit_name(row[11]),
:group_order_unit => ArticleUnitsLib.get_code_for_unit_name(row[12]),
:group_order_granularity => row[13],
:minimum_order_quantity => row[14],
:billing_unit => ArticleUnitsLib.get_code_for_translated_name(row[15]),
:billing_unit => ArticleUnitsLib.get_code_for_unit_name(row[15]),
:article_category => row[16],
:article_unit_ratios => FoodsoftFile.parse_ratios_cell(row[17]) }
articles << article
Expand All @@ -35,13 +35,15 @@ def self.parse(file, options = {})
def self.parse_ratios_cell(ratios_cell)
return [] if ratios_cell.blank?

ratios_cell.split(', ').each_with_index.map do |ratio_str, index|
md = ratio_str.match(/(?<quantity>[+-]?(?:[0-9]*[.])?[0-9]+) (?<unit_name>.*)/)
ratios = ratios_cell.split(/(?<!\\), /).each_with_index.map do |ratio_str, index|
md = ratio_str.gsub("\\\\", "\\").gsub("\\,", ",").match(/(?<quantity>[+-]?(?:[0-9]*[.])?[0-9]+) (?<unit_name>.*)/)
{
sort: index + 1,
quantity: md[:quantity],
unit: ArticleUnitsLib.get_code_for_translated_name(md[:unit_name])
unit: ArticleUnitsLib.get_code_for_unit_name(md[:unit_name])
}
end

ratios.reject { |ratio| ratio[:unit].nil? }
end
end

0 comments on commit 943f178

Please sign in to comment.