mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-13 04:00:21 +00:00
Extract helpers to new superclass
This commit is contained in:
59
lib/open_food_network/reports/bulk_coop_report.rb
Normal file
59
lib/open_food_network/reports/bulk_coop_report.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user