This commit is contained in:
parent
eb719057c4
commit
ce7b4d7ce4
8 changed files with 94 additions and 0 deletions
|
|
@ -53,4 +53,12 @@ module GroupOrdersHelper
|
|||
return 'missing-many'
|
||||
end
|
||||
end
|
||||
|
||||
def price_per_base_unit(article:, price:)
|
||||
quantity_unit = QuantityUnit.parse(article.unit)
|
||||
return nil unless quantity_unit.present?
|
||||
|
||||
scaled_price, base_unit = quantity_unit.scale_price_to_base_unit(price)
|
||||
"#{number_to_currency(scaled_price)}/#{base_unit}"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
59
app/lib/quantity_unit.rb
Normal file
59
app/lib/quantity_unit.rb
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
class QuantityUnit
|
||||
def initialize(quantity, unit)
|
||||
@quantity = quantity
|
||||
@unit = unit
|
||||
end
|
||||
|
||||
def self.parse(number_with_unit)
|
||||
# remove whitespace
|
||||
number_with_unit = number_with_unit.gsub(/\s+/, '')
|
||||
# to lowercase
|
||||
number_with_unit = number_with_unit.downcase
|
||||
# remove numerical part
|
||||
number = number_with_unit.gsub(/[^0-9.,]/, '')
|
||||
# remove unit part
|
||||
unit = number_with_unit.gsub(/[^a-zA-Z]/, '')
|
||||
# convert comma to dot
|
||||
number = number.gsub(',', '.')
|
||||
# convert to float
|
||||
number = number.to_f
|
||||
|
||||
return nil unless unit.in?(%w[g kg l ml])
|
||||
|
||||
QuantityUnit.new(number, unit)
|
||||
end
|
||||
|
||||
def scale_price_to_base_unit(price)
|
||||
return nil unless price.is_a?(Numeric)
|
||||
|
||||
factor = if @unit == 'kg' || @unit == 'l'
|
||||
1
|
||||
elsif @unit == 'g' || @unit == 'ml'
|
||||
1000
|
||||
end
|
||||
|
||||
scaled_price = price / @quantity * factor
|
||||
scaled_price.round(2)
|
||||
|
||||
base_unit = if @unit == 'kg' || @unit == 'g'
|
||||
'kg'
|
||||
elsif @unit == 'l' || @unit == 'ml'
|
||||
'L'
|
||||
end
|
||||
|
||||
[scaled_price, base_unit]
|
||||
end
|
||||
|
||||
|
||||
def to_s
|
||||
"#{@quantity} #{@unit}"
|
||||
end
|
||||
|
||||
def quantity
|
||||
@quantity
|
||||
end
|
||||
|
||||
def unit
|
||||
@unit
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue