mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
PlacementJob loads ProxyOrders based on order cycle close date
This commit is contained in:
@@ -15,8 +15,11 @@ class StandingOrderPlacementJob
|
||||
private
|
||||
|
||||
def proxy_orders
|
||||
# Load proxy orders for standing orders whose begins at date may between now and the order cycle close date
|
||||
# Does not load proxy orders for standing orders who ends_at date is before order_cycle close
|
||||
ProxyOrder.not_canceled.where(order_cycle_id: order_cycle)
|
||||
.merge(StandingOrder.active).joins(:standing_order)
|
||||
.where('begins_at < ? AND (ends_at IS NULL OR ends_at > ?)', order_cycle.orders_close_at, order_cycle.orders_close_at)
|
||||
.merge(StandingOrder.not_canceled.not_paused).joins(:standing_order)
|
||||
end
|
||||
|
||||
def process(order)
|
||||
|
||||
@@ -4,19 +4,19 @@ describe StandingOrderPlacementJob do
|
||||
|
||||
describe "finding proxy_orders for the specified order cycle" do
|
||||
let(:shop) { create(:distributor_enterprise) }
|
||||
let(:order_cycle1) { create(:simple_order_cycle, coordinator: shop) }
|
||||
let(:order_cycle1) { create(:simple_order_cycle, coordinator: shop, orders_close_at: 10.minutes.from_now) }
|
||||
let(:order_cycle2) { create(:simple_order_cycle, coordinator: shop) }
|
||||
let(:schedule) { create(:schedule, order_cycles: [order_cycle1, order_cycle2]) }
|
||||
let(:standing_order1) { create(:standing_order, shop: shop, schedule: schedule) }
|
||||
let(:standing_order2) { create(:standing_order, shop: shop, schedule: schedule, paused_at: 1.minute.ago) }
|
||||
let(:standing_order3) { create(:standing_order, shop: shop, schedule: schedule, canceled_at: 1.minute.ago) }
|
||||
let(:standing_order4) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 1.minute.from_now) }
|
||||
let(:standing_order5) { create(:standing_order, shop: shop, schedule: schedule, ends_at: 1.minute.ago) }
|
||||
let(:standing_order1) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 9.minutes.from_now, ends_at: 11.minutes.from_now) }
|
||||
let(:standing_order2) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 9.minutes.from_now, ends_at: 11.minutes.from_now, paused_at: 1.minute.ago) }
|
||||
let(:standing_order3) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 9.minutes.from_now, ends_at: 11.minutes.from_now, canceled_at: 1.minute.ago) }
|
||||
let(:standing_order4) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 11.minutes.from_now, ends_at: 20.minutes.from_now) }
|
||||
let(:standing_order5) { create(:standing_order, shop: shop, schedule: schedule, begins_at: 1.minute.ago, ends_at: 9.minutes.from_now) }
|
||||
let!(:proxy_order1) { create(:proxy_order, standing_order: standing_order1, order_cycle: order_cycle2) } # OC Mismatch
|
||||
let!(:proxy_order2) { create(:proxy_order, standing_order: standing_order2, order_cycle: order_cycle1) } # Paused
|
||||
let!(:proxy_order3) { create(:proxy_order, standing_order: standing_order3, order_cycle: order_cycle1) } # Cancelled
|
||||
let!(:proxy_order4) { create(:proxy_order, standing_order: standing_order4, order_cycle: order_cycle1) } # Yet To Begin
|
||||
let!(:proxy_order5) { create(:proxy_order, standing_order: standing_order5, order_cycle: order_cycle1) } # Ended
|
||||
let!(:proxy_order4) { create(:proxy_order, standing_order: standing_order4, order_cycle: order_cycle1) } # Begins after OC close
|
||||
let!(:proxy_order5) { create(:proxy_order, standing_order: standing_order5, order_cycle: order_cycle1) } # Ends before OC close
|
||||
let!(:proxy_order6) { create(:proxy_order, standing_order: standing_order1, order_cycle: order_cycle1) } # OK
|
||||
|
||||
let!(:job) { StandingOrderPlacementJob.new(order_cycle1) }
|
||||
|
||||
Reference in New Issue
Block a user