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
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
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