class Ynaby::Transaction

Attributes

account[R]
account_name[R]
amount[RW]
approved[R]
category_id[R]
category_name[R]
cleared[R]
date[R]
flag_color[R]
id[RW]
import_id[R]
memo[RW]
payee_id[R]
payee_name[R]
subtransactions[R]
transfer_account_id[R]
transfer_transaction_id[R]

Public Class Methods

new(id: nil, date:, amount:, memo: nil, cleared: nil, approved: nil, flag_color: nil, payee_id: nil, category_id: nil, transfer_account_id: nil, transfer_transaction_id: nil, import_id: nil, account_name: nil, payee_name:, category_name: nil, account:, subtransactions: nil) click to toggle source
# File lib/ynaby/transaction.rb, line 10
def initialize(id: nil,
               date:,
               amount:,
               memo: nil,
               cleared: nil,
               approved: nil,
               flag_color: nil,
               payee_id: nil,
               category_id: nil,
               transfer_account_id: nil,
               transfer_transaction_id: nil,
               import_id: nil,
               account_name: nil,
               payee_name:,
               category_name: nil,
               account:,
               subtransactions: nil)

  @id = id
  @date = date
  @amount = amount
  @memo = memo
  @cleared = cleared
  @approved = approved
  @flag_color = flag_color
  @payee_id = payee_id
  @category_id = category_id
  @transfer_account_id = transfer_account_id
  @transfer_transaction_id = transfer_transaction_id
  @import_id = import_id
  @account_name = account_name
  @payee_name = payee_name
  @category_name = category_name
  @account = account
  @subtransactions = subtransactions
end
parse(object:, account:) click to toggle source
# File lib/ynaby/transaction.rb, line 87
def self.parse(object:, account:)
  new(
    id: object.id,
    date: object.date,
    amount: object.amount.to_i,
    memo: object.memo,
    cleared: object.cleared,
    approved: object.approved,
    flag_color: object.flag_color,
    payee_id: object.payee_id,
    category_id: object.category_id,
    transfer_account_id: object.transfer_account_id,
    transfer_transaction_id: object.transfer_transaction_id,
    import_id: object.import_id,
    account_name: object.account_name,
    payee_name: object.payee_name,
    category_name: object.category_name,
    account: account,
    subtransactions: object.subtransactions.map(&:to_body)
  )
end

Public Instance Methods

update() click to toggle source
# File lib/ynaby/transaction.rb, line 77
def update
  body = {
    transaction: upload_hash
  }

  response = ynab_client.transactions.update_transaction(budget_id, id, body)

  self.class.parse(object: response.data.transaction, account: account)
end
upload() click to toggle source
# File lib/ynaby/transaction.rb, line 47
def upload
  body = {
    transaction: upload_hash
  }

  response = ynab_client.transactions.create_transaction(budget_id, body)

  self.class.parse(object: response.data.transaction, account: account)
end
upload_hash() click to toggle source
# File lib/ynaby/transaction.rb, line 57
def upload_hash
  hash = {
    account_id: @account.id,
    date: @date.to_date.iso8601,
    amount: @amount,
    import_id: @import_id,
    memo: @memo&.slice(0...50)
  }

  if @transfer_account_id && @transfer_transaction_id
    hash[:transfer_account_id] = @transfer_account_id
    hash[:transfer_transaction_id] = @transfer_transaction_id
  else
    hash[:payee_name] = @payee_name
    hash[:payee_id] = nil
  end

  hash
end

Private Instance Methods

api_token() click to toggle source
# File lib/ynaby/transaction.rb, line 115
def api_token
  account.api_token
end
budget_id() click to toggle source
# File lib/ynaby/transaction.rb, line 111
def budget_id
  account.budget.id
end