class AccountBalance

Schema Information

Table name: account_balances

id           :integer          not null, primary key
user_id      :integer
amount_cents :integer          default(0)
withdrawable :boolean          default(FALSE)
university_id   :integer
created_at   :datetime
updated_at   :datetime

Public Class Methods

credit(user, resource, withdrawable_account, amount, account = nil) click to toggle source

To credit amount in user account balance

# File app/models/account_balance.rb, line 23
def self.credit(user, resource, withdrawable_account, amount, account = nil)
  if withdrawable_account
    account_balance = user.withdrawable_balance || user.build_withdrawable_balance
    account_balance.amount_cents += amount
    account_balance.account_balance_histories.build(resource: resource, credit: true, account: account, amount: amount)
    account_balance.save(validate: false)
  else
    account_balance = user.account_balance || user.build_account_balance
    account_balance.amount_cents += amount
    account_balance.account_balance_histories.build(resource: resource, credit: true, account: account, amount: amount)
    account_balance.save(validate: false)
    account_balance.reload
  end
end
debit(user, resource, withdrawable_account, amount, account = nil) click to toggle source

To debit amount from user account balance

# File app/models/account_balance.rb, line 39
def self.debit(user, resource, withdrawable_account, amount, account = nil)
  if withdrawable_account == nil
    has_amount = user.balance_amount.cents
    if has_amount < amount
      non_withdrawable_balance = user.account_balance || user.build_account_balance
      has_amount = user.total_balance.cents
      debited_amount = has_amount - user.withdrawable_amount.cents
      non_withdrawable_balance.amount_cents -= debited_amount
      non_withdrawable_balance.account_balance_histories.build(resource: resource, credit: false, account: account, amount: debited_amount)
      non_withdrawable_balance.save(validate: false)
      withdrawable_balance = user.withdrawable_balance || user.build_withdrawable_balance
      remaining_amount = amount - debited_amount
      withdrawable_balance.amount_cents -= remaining_amount
      withdrawable_balance.account_balance_histories.build(resource: resource, credit: false, account: account, amount: remaining_amount)
      withdrawable_balance.save(validate: false)
    else
      #From nonwithdrawable account when sufficent money is there.
      account_balance = user.account_balance || user.build_account_balance
      account_balance.amount_cents -= amount
      account_balance.account_balance_histories.build(resource: resource, credit: false, account: account, amount: amount)
      account_balance.save(validate: false)
    end
  elsif withdrawable_account
    account_balance = user.withdrawable_balance || user.build_withdrawable_balance
    account_balance.amount_cents += amount
    account_balance.account_balance_histories.build(resource: resource, credit: false, account: account, amount: amount)
    account_balance.save(validate: false)
  else
    account_balance = user.account_balance || user.build_account_balance
    account_balance.amount_cents += amount
    account_balance.account_balance_histories.build(resource: resource, credit: false, account: account, amount: amount)
    account_balance.save(validate: false)
  end
end