Use ActiveJob instead of Resque directly
This allows us to directly pass entities to the job.
This commit is contained in:
parent
07c8393c8c
commit
47d9c79617
16 changed files with 76 additions and 73 deletions
|
|
@ -137,7 +137,7 @@ class OrdersController < ApplicationController
|
|||
|
||||
flash[:notice] = (s ? I18n.t('orders.receive.notice', :msg => s) : I18n.t('orders.receive.notice_none'))
|
||||
end
|
||||
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'received_order', @order.id)
|
||||
NotifyReceivedOrderJob.perform_later(@order)
|
||||
if current_user.role_orders? || current_user.role_finance?
|
||||
redirect_to @order
|
||||
elsif current_user.role_pickups?
|
||||
|
|
|
|||
2
app/jobs/application_job.rb
Normal file
2
app/jobs/application_job.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
class ApplicationJob < ActiveJob::Base
|
||||
end
|
||||
15
app/jobs/notify_finished_order_job.rb
Normal file
15
app/jobs/notify_finished_order_job.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class NotifyFinishedOrderJob < ApplicationJob
|
||||
def perform(order)
|
||||
order.group_orders.each do |group_order|
|
||||
next unless group_order.ordergroup
|
||||
|
||||
group_order.ordergroup.users.each do |user|
|
||||
next unless user.settings.notify['order_finished']
|
||||
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.order_result(user, group_order)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
11
app/jobs/notify_negative_balance_job.rb
Normal file
11
app/jobs/notify_negative_balance_job.rb
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class NotifyNegativeBalanceJob < ApplicationJob
|
||||
def perform(ordergroup, transaction)
|
||||
ordergroup.users.each do |user|
|
||||
next unless user.settings.notify['negative_balance']
|
||||
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.negative_balance(user, transaction)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
15
app/jobs/notify_received_order_job.rb
Normal file
15
app/jobs/notify_received_order_job.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class NotifyReceivedOrderJob < ApplicationJob
|
||||
def perform(order)
|
||||
order.group_orders.each do |group_order|
|
||||
next unless group_order.ordergroup
|
||||
|
||||
group_order.ordergroup.users.each do |user|
|
||||
next unless user.settings.notify['order_received']
|
||||
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.order_received(user, group_order)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -260,7 +260,7 @@ class Order < ApplicationRecord
|
|||
ordergroups.each(&:update_stats!)
|
||||
|
||||
# Notifications
|
||||
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'finished_order', self.id)
|
||||
NotifyFinishedOrderJob.perform_later(self)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ class Ordergroup < Group
|
|||
update_balance!
|
||||
# Notify only when order group had a positive balance before the last transaction:
|
||||
if t.amount < 0 && self.account_balance < 0 && self.account_balance - t.amount >= 0
|
||||
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'negative_balance', self.id, t.id)
|
||||
NotifyNegativeBalanceJob.perform_later(self, t)
|
||||
end
|
||||
t
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,55 +0,0 @@
|
|||
# This plain ruby class should handle all user notifications, called by various models
|
||||
class UserNotifier
|
||||
@queue = :foodsoft_notifier
|
||||
|
||||
# Resque style method to perform every class method defined here
|
||||
def self.perform(foodcoop, method_name, *args)
|
||||
FoodsoftConfig.select_foodcoop(foodcoop) if FoodsoftConfig[:multi_coop_install]
|
||||
self.send method_name, args
|
||||
end
|
||||
|
||||
def self.finished_order(args)
|
||||
order_id = args.first
|
||||
Order.find(order_id).group_orders.each do |group_order|
|
||||
next if group_order.ordergroup.nil?
|
||||
|
||||
group_order.ordergroup.users.each do |user|
|
||||
if user.settings.notify['order_finished']
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.order_result(user, group_order)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.received_order(args)
|
||||
order_id = args.first
|
||||
Order.find(order_id).group_orders.each do |group_order|
|
||||
next if group_order.ordergroup.nil?
|
||||
|
||||
group_order.ordergroup.users.each do |user|
|
||||
next unless user.settings.notify['order_received']
|
||||
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.order_received(user, group_order)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# If this order group's account balance is made negative by the given/last transaction,
|
||||
# a message is sent to all users who have enabled notification.
|
||||
def self.negative_balance(args)
|
||||
ordergroup_id, transaction_id = args
|
||||
transaction = FinancialTransaction.find transaction_id
|
||||
|
||||
Ordergroup.find(ordergroup_id).users.each do |user|
|
||||
if user.settings.notify['negative_balance']
|
||||
Mailer.deliver_now_with_user_locale user do
|
||||
Mailer.negative_balance(user, transaction)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue