1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-05 16:24:21 +01:00
fab-manager/app/workers/payment_schedule_item_worker.rb

37 lines
1.2 KiB
Ruby

# frozen_string_literal: true
# Periodically checks if a PaymentScheduleItem cames to its due date.
# If this is the case
class PaymentScheduleItemWorker
include Sidekiq::Worker
def perform(record_id = nil)
if record_id
psi = PaymentScheduleItem.find(record_id)
check_item(psi)
else
PaymentScheduleItem.where.not(state: 'paid').where('due_date < ?', Time.current).each do |item|
check_item(item)
end
end
end
# @param psi [PaymentScheduleItem]
def check_item(psi)
# the following depends on the payment method (card/check)
if psi.payment_schedule.payment_method == 'card'
### Cards
PaymentGatewayService.new.process_payment_schedule_item(psi)
elsif psi.state == 'new'
### Check/Bank transfer (only new deadlines, to prevent spamming)
NotificationCenter.call type: "notify_admin_payment_schedule_#{psi.payment_schedule.payment_method}_deadline",
receiver: User.admins_and_managers,
attached_object: psi
psi.update(state: 'pending')
end
rescue StandardError => e
Rails.logger.debug(e.backtrace)
psi.update(state: 'error')
end
end