Split method into higher-level smaller methods

This commit is contained in:
Pau Perez
2021-06-11 13:22:08 +02:00
parent f61cdb6608
commit 8bcb19f293

View File

@@ -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))