Module: PriceCalculation

Extended by:
ActiveSupport::Concern
Included in:
Article, ArticleVersion
Defined in:
app/models/concerns/price_calculation.rb

Defined Under Namespace

Classes: UnsupportedUnitConversionError

Instance Method Summary collapse

Instance Method Details

#convert_quantity(quantity, input_unit, output_unit) ⇒ Object



51
52
53
# File 'app/models/concerns/price_calculation.rb', line 51

def convert_quantity(quantity, input_unit, output_unit)
  quantity / get_unit_ratio_quantity(input_unit) * get_unit_ratio_quantity(output_unit)
end

#fc_group_order_priceObject



71
72
73
# File 'app/models/concerns/price_calculation.rb', line 71

def fc_group_order_price
  group_order_price(fc_price)
end

#fc_priceNumber

Returns Price for the foodcoop-member.

Returns:

  • (Number)

    Price for the foodcoop-member.



26
27
28
# File 'app/models/concerns/price_calculation.rb', line 26

def fc_price
  add_percent(gross_price, FoodsoftConfig[:price_markup].to_i)
end

#get_unit_ratio_quantity(unit) ⇒ Object

get the unit ratio quantity in reference to the supplier_order_unit



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/concerns/price_calculation.rb', line 31

def get_unit_ratio_quantity(unit)
  return 1 if unit == supplier_order_unit

  ratio = new_record? ? article_unit_ratios.detect { |ratio| ratio[:unit] == unit } : find_ratio_by_unit(unit)
  return ratio.quantity unless ratio.nil?

  unit_hash = ArticleUnit.as_hash[unit]
  raise UnsupportedUnitConversionError, "unit '#{unit}' is unknown" if unit_hash.nil?

  related_ratio = article_unit_ratios.detect do |current_ratio|
    ArticleUnit.as_hash[current_ratio.unit][:baseUnit] == unit_hash[:baseUnit]
  end
  return related_ratio.quantity / unit_hash[:conversionFactor] * ArticleUnit.as_hash[related_ratio.unit][:conversionFactor] unless related_ratio.nil?

  supplier_order_unit_conversion_factor = ArticleUnit.as_hash[supplier_order_unit]&.dig(:conversionFactor)
  raise UnsupportedUnitConversionError, "supplier_order_unit '#{supplier_order_unit}' is unknown or has no conversionFactor" if supplier_order_unit_conversion_factor.nil?

  supplier_order_unit_conversion_factor / unit_hash[:conversionFactor]
end

#gross_group_order_priceObject



67
68
69
# File 'app/models/concerns/price_calculation.rb', line 67

def gross_group_order_price
  group_order_price(gross_price)
end

#gross_priceNumber

Gross price = net price + deposit + tax.

Returns:

  • (Number)

    Gross price.



21
22
23
# File 'app/models/concerns/price_calculation.rb', line 21

def gross_price
  add_percent(price + deposit, tax)
end

#group_order_price(value = nil) ⇒ Object



55
56
57
58
59
# File 'app/models/concerns/price_calculation.rb', line 55

def group_order_price(value = nil)
  value ||= price
  # price is always stored in supplier_order_unit:
  value / convert_quantity(1, supplier_order_unit, group_order_unit)
end

#price_unit_price(value = nil) ⇒ Object



61
62
63
64
65
# File 'app/models/concerns/price_calculation.rb', line 61

def price_unit_price(value = nil)
  value ||= price
  # price is always stored in supplier_order_unit:
  value / convert_quantity(1, supplier_order_unit, price_unit)
end

#unit_quantityObject



10
11
12
13
14
15
16
17
# File 'app/models/concerns/price_calculation.rb', line 10

def unit_quantity
  first_ratio = article_unit_ratios.first
  if first_ratio.nil?
    1
  else
    first_ratio.quantity
  end
end