mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Split method into higher-level smaller methods
This commit is contained in:
@@ -3,34 +3,42 @@
|
||||
class CapQuantityAndStoreChanges
|
||||
def initialize(order)
|
||||
@order = order
|
||||
@changes = {}
|
||||
end
|
||||
|
||||
def call
|
||||
changes = {}
|
||||
cap_insufficient_stock!
|
||||
verify_line_items
|
||||
|
||||
order.insufficient_stock_lines.each do |line_item|
|
||||
changes[line_item.id] = line_item.quantity
|
||||
line_item.cap_quantity_at_stock!
|
||||
end
|
||||
|
||||
unavailable_stock_lines_for.each do |line_item|
|
||||
changes[line_item.id] = changes[line_item.id] || line_item.quantity
|
||||
line_item.update(quantity: 0)
|
||||
|
||||
Spree::OrderInventory.new(order).verify(line_item, order.shipment)
|
||||
end
|
||||
|
||||
if changes.present?
|
||||
order.line_items.reload
|
||||
order.update_order_fees!
|
||||
end
|
||||
reload_order if changes.present?
|
||||
|
||||
changes
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :order
|
||||
attr_reader :order, :changes
|
||||
|
||||
def cap_insufficient_stock!
|
||||
order.insufficient_stock_lines.each do |line_item|
|
||||
changes[line_item.id] = line_item.quantity
|
||||
line_item.cap_quantity_at_stock!
|
||||
end
|
||||
end
|
||||
|
||||
def verify_line_items
|
||||
unavailable_stock_lines_for.each do |line_item|
|
||||
changes[line_item.id] = changes[line_item.id] || line_item.quantity
|
||||
line_item.update(quantity: 0)
|
||||
|
||||
Spree::OrderInventory.new(order).verify(line_item, order.shipment)
|
||||
end
|
||||
end
|
||||
|
||||
def reload_order
|
||||
order.line_items.reload
|
||||
order.update_order_fees!
|
||||
end
|
||||
|
||||
def unavailable_stock_lines_for
|
||||
order.line_items.where('variant_id NOT IN (?)', available_variants_for.select(&:id))
|
||||
|
||||
Reference in New Issue
Block a user