mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
64 lines
1.9 KiB
Ruby
64 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module OrderStockCheck
|
|
include CablecarResponses
|
|
extend ActiveSupport::Concern
|
|
|
|
delegate :sufficient_stock?, to: :check_stock_service
|
|
|
|
def valid_order_line_items?
|
|
OrderCycles::DistributedVariantsService.new(@order.order_cycle, @order.distributor).
|
|
distributes_order_variants?(@order)
|
|
end
|
|
|
|
def handle_insufficient_stock
|
|
@any_out_of_stock = false
|
|
|
|
return if sufficient_stock?
|
|
|
|
@any_out_of_stock = true
|
|
@updated_variants = check_stock_service.update_line_items
|
|
end
|
|
|
|
def check_order_cycle_expiry(should_empty_order: true)
|
|
return unless current_order_cycle&.closed?
|
|
|
|
Alert.raise_with_record("Notice: order cycle closed during checkout completion", current_order)
|
|
|
|
handle_closed_order_cycle if should_empty_order
|
|
|
|
flash[:info] = build_order_cycle_message(should_empty_order)
|
|
redirect_to_shop_page(should_empty_order)
|
|
end
|
|
|
|
private
|
|
|
|
def handle_closed_order_cycle
|
|
current_order.empty!
|
|
current_order.assign_order_cycle!(nil)
|
|
end
|
|
|
|
def build_order_cycle_message(should_empty_order)
|
|
# If order is not emptied, we assume user will contact support for next steps
|
|
key = should_empty_order ? 'order_cycle_closed' : 'order_cycle_closed_next_steps'
|
|
I18n.t(key, order_number: current_order.number)
|
|
end
|
|
|
|
def redirect_to_shop_page(should_empty_order)
|
|
# If order is not emptied, redirect to shops page because shop page empties the order by default
|
|
redirect_url = should_empty_order ? main_app.shop_path : main_app.shops_path
|
|
|
|
respond_to do |format|
|
|
format.cable_ready {
|
|
render status: :see_other, cable_ready: cable_car.redirect_to(url: redirect_url)
|
|
}
|
|
format.json { render json: { path: redirect_url }, status: :see_other }
|
|
format.html { redirect_to redirect_url, status: :see_other }
|
|
end
|
|
end
|
|
|
|
def check_stock_service
|
|
@check_stock_service ||= Orders::CheckStockService.new(order: @order)
|
|
end
|
|
end
|