Extract helpers to new superclass

This commit is contained in:
Rohan Mitchell
2015-07-23 14:49:04 +10:00
parent f5c2386296
commit bdd792a3ea
2 changed files with 61 additions and 55 deletions

View File

@@ -0,0 +1,59 @@
require 'open_food_network/reports/report'
module OpenFoodNetwork::Reports
class BulkCoopReport < Report
private
class << self
def supplier_name(lis)
lis.first.variant.product.supplier.name
end
def product_name(lis)
lis.first.variant.product.name
end
def group_buy_unit_size(lis)
(lis.first.variant.product.group_buy_unit_size || 0.0) /
(lis.first.product.variant_unit_scale || 1)
end
def group_buy_unit_size_f(lis)
if lis.first.variant.product.group_buy
group_buy_unit_size(lis)
else
""
end
end
def total_amount(lis)
lis.sum { |li| (li.quantity || 0) * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1) }
end
def total_max_quantity_amount(lis)
lis.sum { |li| (li.max_quantity || 0) * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1) }
end
def units_required(lis)
if group_buy_unit_size(lis).zero?
0
else
( max_quantity_amount(lis) / group_buy_unit_size(lis) ).ceil
end
end
def remainder(lis)
(units_required(lis) * group_buy_unit_size(lis)) - max_quantity_amount(lis)
end
def max_quantity_amount(lis)
max_quantity_amount = lis.sum do |li|
max_quantity = [li.max_quantity || 0, li.quantity || 0].max
max_quantity * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1)
end
end
end
end
end

View File

@@ -1,7 +1,7 @@
require 'open_food_network/reports/report'
require 'open_food_network/reports/bulk_coop_report'
module OpenFoodNetwork::Reports
class BulkCoopSupplierReport < Report
class BulkCoopSupplierReport < BulkCoopReport
header "Supplier", "Product", "Unit Size", "Variant value", "Variant unit", "Weight", "Sum Total", "Sum Max Total", "Units Required", "Remainder"
organise do
@@ -44,58 +44,5 @@ module OpenFoodNetwork::Reports
column { |lis| '' }
column { |lis| '' }
end
private
class << self
def supplier_name(lis)
lis.first.variant.product.supplier.name
end
def product_name(lis)
lis.first.variant.product.name
end
def group_buy_unit_size(lis)
(lis.first.variant.product.group_buy_unit_size || 0.0) /
(lis.first.product.variant_unit_scale || 1)
end
def group_buy_unit_size_f(lis)
if lis.first.variant.product.group_buy
group_buy_unit_size(lis)
else
""
end
end
def total_amount(lis)
lis.sum { |li| (li.quantity || 0) * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1) }
end
def total_max_quantity_amount(lis)
lis.sum { |li| (li.max_quantity || 0) * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1) }
end
def units_required(lis)
if group_buy_unit_size(lis).zero?
0
else
( max_quantity_amount(lis) / group_buy_unit_size(lis) ).ceil
end
end
def remainder(lis)
(units_required(lis) * group_buy_unit_size(lis)) - max_quantity_amount(lis)
end
def max_quantity_amount(lis)
max_quantity_amount = lis.sum do |li|
max_quantity = [li.max_quantity || 0, li.quantity || 0].max
max_quantity * (li.variant.unit_value || 0) / (li.product.variant_unit_scale || 1)
end
end
end
end
end