Class: AdditionalCalculator::WeightAndQuantity
- Inherits:
-
Base
- Object
- Base
- AdditionalCalculator::WeightAndQuantity
- Defined in:
- app/models/additional_calculator/weight_and_quantity.rb
Class Method Summary collapse
-
.description ⇒ Object
The description of the calculator.
Instance Method Summary collapse
-
#available?(object) ⇒ Boolean
check if this calculator is available for the Order.
-
#compute(object) ⇒ Object
object can be [Order, Shipment] and maybe something else …
Class Method Details
.description ⇒ Object
The description of the calculator
6 7 8 |
# File 'app/models/additional_calculator/weight_and_quantity.rb', line 6 def self.description I18n.t('calculator_names.weight_and_quantity') end |
Instance Method Details
#available?(object) ⇒ Boolean
check if this calculator is available for the Order
44 45 46 |
# File 'app/models/additional_calculator/weight_and_quantity.rb', line 44 def available?(object) !self.compute(object).nil? end |
#compute(object) ⇒ Object
object can be [Order, Shipment] and maybe something else …
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/models/additional_calculator/weight_and_quantity.rb', line 11 def compute(object) line_items = object_to_line_items(object) return nil if line_items.nil? total_qnty = get_total_qnty(line_items) total_weight = get_total_weight(line_items) weight_rate = get_rate(total_weight, AdditionalCalculatorRate::WEIGHT) # sometimes the compute method is called without checking if the calculator is available if weight_rate.nil? logger.warn("The calculator's #{name} weight_rate is nil - returning. Availability is not checked!") return nil end # quantity rate might be nil if the specified range is not available qnty_rate = get_rate(total_qnty, AdditionalCalculatorRate::QNTY) # find the previous qnty rate or set it to 0 if not found previous_qnty_rate = get_previous_rate(total_qnty, AdditionalCalculatorRate::QNTY) # the total rate is sum of weight and quantity rates # the rate is available if # 1) qnty_rate is not nil # 2) qnty_rate is nil AND previous_qnty_rate is nil (quantity configuration not defined at all) if !qnty_rate.nil? weight_rate + qnty_rate elsif previous_qnty_rate.nil? weight_rate else nil end end |