class F2ynab::YNAB::BulkTransactionCreator

Constants

BATCH_SIZE

Public Class Methods

new(client, transactions) click to toggle source
# File lib/f2ynab/ynab/bulk_transaction_creator.rb, line 6
def initialize(client, transactions)
  @transactions = transactions
  @client = client
end

Public Instance Methods

create() click to toggle source
# File lib/f2ynab/ynab/bulk_transaction_creator.rb, line 11
def create
  if @transactions.size.zero?
    Rails.logger.info(:no_transactions_to_create)
    return false
  end

  created_transactions_ids = []
  batches = (@transactions.size.to_f / BATCH_SIZE).ceil

  Rails.logger.info("Splitting #{@transactions.size} transactions into #{batches} batches")

  @transactions.each_slice(BATCH_SIZE).with_index do |transactions, index|
    Rails.logger.info("Processing batch #{index + 1} of #{batches}")

    transactions_to_create = []
    transactions.each do |transaction|
      transactions_to_create << {
        import_id: transaction[:id].to_s.truncate(36),
        account_id: @client.selected_account_id,
        payee_name: transaction[:payee_name].to_s.truncate(50),
        amount: transaction[:amount],
        memo: transaction[:description],
        date: transaction[:date].to_date,
        cleared: transaction[:cleared] ? 'Cleared' : 'Uncleared',
        flag: transaction[:flag],
      }
    end

    if transactions_to_create.any?
      create_transactions = @client.create_transactions(transactions_to_create)
      Rails.logger.info(create_transactions)
      created_transactions_ids += create_transactions.transaction_ids if create_transactions
    else
      Rails.logger.info(:no_transactions_to_create)
    end
  end
  
  created_transactions_ids
end