mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-29 10:24:20 +01:00
37 lines
1.2 KiB
Ruby
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' && psi.payment_method.nil?
|
|
### 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_method || 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
|