Running StandingOrderSyncJob when order cycles added to a schedule via OrderCyclesController

This commit is contained in:
Rob Harrington
2016-12-09 00:55:16 +11:00
parent 0a74bb8373
commit c2b68ed6b5
2 changed files with 30 additions and 4 deletions

View File

@@ -11,6 +11,8 @@ module Admin
before_filter :remove_unauthorized_bulk_attrs, only: [:bulk_update]
before_filter :check_editable_schedule_ids, only: [:create, :update]
around_filter :protect_invalid_destroy, only: :destroy
create.after :sync_standing_orders
update.after :sync_standing_orders
def index
respond_to do |format|
@@ -45,7 +47,7 @@ module Admin
respond_to do |format|
if @order_cycle.save
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, spree_current_user).go!
invoke_callbacks(:create, :after)
flash[:notice] = I18n.t(:order_cycles_create_notice)
format.html { redirect_to admin_order_cycles_path }
format.json { render :json => {:success => true} }
@@ -65,6 +67,7 @@ module Admin
# Only update apply exchange information if it is actually submmitted
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, spree_current_user).go!
end
invoke_callbacks(:update, :after)
flash[:notice] = I18n.t(:order_cycles_update_notice) if params[:reloading] == '1'
format.html { redirect_to main_app.edit_admin_order_cycle_path(@order_cycle) }
format.json { render :json => {:success => true} }
@@ -186,14 +189,25 @@ module Admin
def check_editable_schedule_ids
return unless params[:order_cycle][:schedule_ids]
requested = params[:order_cycle][:schedule_ids].map(&:to_i)
existing = @order_cycle.schedule_ids
permitted = Schedule.where(id: requested | existing).merge(OpenFoodNetwork::Permissions.new(spree_current_user).editable_schedules).pluck(:id)
result = existing
@existing_schedule_ids = @order_cycle.persisted? ? @order_cycle.schedule_ids : []
permitted = Schedule.where(id: requested | @existing_schedule_ids).merge(OpenFoodNetwork::Permissions.new(spree_current_user).editable_schedules).pluck(:id)
result = @existing_schedule_ids
result |= (requested & permitted) # add any requested & permitted ids
result -= ((result & permitted) - requested) # remove any existing and permitted ids that were not specifically requested
params[:order_cycle][:schedule_ids] = result
end
def sync_standing_orders
return unless params[:order_cycle][:schedule_ids]
removed_ids = @existing_schedule_ids - @order_cycle.schedule_ids
new_ids = @order_cycle.schedule_ids - @existing_schedule_ids
if removed_ids.any? || new_ids.any?
Schedule.where(id: removed_ids + new_ids).each do |schedule|
Delayed::Job.enqueue StandingOrderSyncJob.new(schedule)
end
end
end
def ams_prefix_whitelist
[:basic, :index]
end

View File

@@ -188,6 +188,18 @@ module Admin
# coordinated_order_cycle is removed, uncoordinated_order_cycle is NOT added
expect(coordinated_order_cycle.reload.schedules).to_not include coordinated_schedule, uncoordinated_schedule
end
it "enqueues a StandingOrderSyncJob when schedule_ids change" do
expect do
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id, coordinated_schedule2.id] }
end.to enqueue_job StandingOrderSyncJob
expect do
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id] }
end.to enqueue_job StandingOrderSyncJob
expect do
spree_put :update, format: :json, id: coordinated_order_cycle.id, order_cycle: { schedule_ids: [coordinated_schedule.id] }
end.to_not enqueue_job StandingOrderSyncJob
end
end
end