class Returnly::Services::CreateReimbursement
Attributes
reimbursement[RW]
Public Class Methods
new(reimbursement)
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 8 def initialize(reimbursement) @reimbursement = reimbursement end
Public Instance Methods
perform!()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 12 def perform! reimbursement.save! reimbursement.update!(total: calculated_total) performer.perform(reimbursement) if unpaid_amount_within_tolerance? reimbursement.reimbursed! Spree::Reimbursement.reimbursement_success_hooks.each { |h| h.call reimbursement } send_reimbursement_email else reimbursement.errored! Spree::Reimbursement.reimbursement_failure_hooks.each { |h| h.call reimbursement } raise incomplete_error_class, Spree.t('validation.unpaid_amount_not_zero', amount: unpaid_amount) end end
Private Instance Methods
calculated_total()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 48 def calculated_total return_items.to_a.sum(&:total).to_d.round(2, :down) end
incomplete_error_class()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 30 def incomplete_error_class Spree::Reimbursement::IncompleteReimbursementError end
paid_amount()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 38 def paid_amount reimbursement_models.sum do |model| model.total_amount_reimbursed_for(reimbursement) end end
performer()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 52 def performer Spree::Reimbursement.reimbursement_performer end
reimbursement_models()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 34 def reimbursement_models Spree::Reimbursement.reimbursement_models end
send_reimbursement_email()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 56 def send_reimbursement_email Spree::ReimbursementMailer.reimbursement_email(reimbursement.id).deliver_later end
unpaid_amount()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 44 def unpaid_amount reimbursement.total - paid_amount end
unpaid_amount_within_tolerance?()
click to toggle source
# File lib/returnly/services/create_reimbursement.rb, line 60 def unpaid_amount_within_tolerance? reimbursement_count = reimbursement_models.count do |model| model.total_amount_reimbursed_for(reimbursement) > 0 end leniency = if reimbursement_count > 0 (reimbursement_count - 1) * 0.01.to_d else 0 end unpaid_amount.abs.between?(0, leniency) end