adapt financial transaction type for online payment provider

This commit is contained in:
Philipp Rothmann 2023-10-02 23:00:24 +02:00
parent 66bbafcd4d
commit 82f0935d65
10 changed files with 66 additions and 23 deletions

View file

@ -11,9 +11,11 @@ class FinancialTransaction < ApplicationRecord
belongs_to :reverts, optional: true, class_name: 'FinancialTransaction'
has_one :reverted_by, class_name: 'FinancialTransaction', foreign_key: 'reverts_id'
validates :amount, :note, :user_id, presence: true
validates :note, :user_id, presence: true
validates :amount, numericality: { greater_then: -100_000,
less_than: 100_000 }
less_than: 100_000 },
allow_nil: -> { payment_amount.present? }
validates :payment_amount, :payment_fee, allow_nil: true, numericality: { greater_then: 0, less_than: 100_000 }
scope :visible, lambda {
joins('LEFT JOIN financial_transactions r ON financial_transactions.id = r.reverts_id').where('r.id IS NULL').where(reverts: nil)
@ -23,6 +25,8 @@ class FinancialTransaction < ApplicationRecord
localize_input_of :amount
after_save :update_ordergroup_balance
after_initialize do
initialize_financial_transaction_type
end
@ -38,16 +42,11 @@ class FinancialTransaction < ApplicationRecord
%w[] # none, and certainly not user until we've secured that more
end
# Use this save method instead of simple save and after callback
def add_transaction!
ordergroup.add_financial_transaction! amount, note, user, financial_transaction_type
end
def revert!(user)
transaction do
update_attribute :financial_link, FinancialLink.new
rt = dup
rt.amount = -rt.amount
rt.amount = rt.amount ? -rt.amount : nil
rt.reverts = self
rt.user = user
rt.save!
@ -73,4 +72,12 @@ class FinancialTransaction < ApplicationRecord
def initialize_financial_transaction_type
self.financial_transaction_type ||= FinancialTransactionType.default
end
private
def update_ordergroup_balance
# @todo Make sure this transaction and the ordergroup update is in one database transaction.
# It may be possible to use an around filter if needed.
ordergroup.update_balance!
end
end

View file

@ -92,13 +92,13 @@ class Ordergroup < Group
update_balance!
# Notify only when order group had a positive balance before the last transaction:
if t.amount < 0 && account_balance < 0 && account_balance - t.amount >= 0
NotifyNegativeBalanceJob.perform_later(self,
t)
NotifyNegativeBalanceJob.perform_later(self, t)
end
t
end
end
# Recomputes job statistics from group orders.
def update_stats!
# Get hours for every job of each user in period
jobs = users.to_a.sum { |u| u.tasks.done.where('updated_on > ?', APPLE_MONTH_AGO.month.ago).sum(:duration) }
@ -156,7 +156,7 @@ class Ordergroup < Group
end
def account_updated
financial_transactions.last.try(:created_on) || created_on
financial_transactions.last.try(:updated_on) || created_on
end
def self.sort_by_param(param)