mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-25 08:09:38 +02:00
* Initial entryable models * Update transfer and tests * Update transaction controllers and tests * Update sync process to use new entries model * Get dashboard working again * Update transfers, imports, and accounts to use Account::Entry * Update system tests * Consolidate transaction management into entries controller * Add permitted partial key helper * Move account transactions list to entries controller * Delegate transaction entries search * Move transfer relation to entry * Update bulk transaction management flows to use entries * Remove test code * Test fix attempt * Update demo data script * Consolidate remaining transaction partials to entries * Consolidate valuations controller to entries controller * Lint fix * Remove unused files, additional cleanup * Add back valuation creation * Make migrations fully reversible * Stale routes cleanup * Migrations reversible fix * Move types to entryable concern * Fix search when no entries found * Remove more unused code
40 lines
1.1 KiB
Ruby
40 lines
1.1 KiB
Ruby
class Account::Transaction < ApplicationRecord
|
|
include Account::Entryable
|
|
|
|
belongs_to :category, optional: true
|
|
belongs_to :merchant, optional: true
|
|
has_many :taggings, as: :taggable, dependent: :destroy
|
|
has_many :tags, through: :taggings
|
|
|
|
accepts_nested_attributes_for :taggings, allow_destroy: true
|
|
|
|
scope :active, -> { where(excluded: false) }
|
|
|
|
class << self
|
|
def search(params)
|
|
query = all
|
|
query = query.joins("LEFT JOIN categories ON categories.id = account_transactions.category_id").where(categories: { name: params[:categories] }) if params[:categories].present?
|
|
query = query.joins("LEFT JOIN merchants ON merchants.id = account_transactions.merchant_id").where(merchants: { name: params[:merchants] }) if params[:merchants].present?
|
|
query
|
|
end
|
|
|
|
def requires_search?(params)
|
|
searchable_keys.any? { |key| params.key?(key) }
|
|
end
|
|
|
|
private
|
|
|
|
def searchable_keys
|
|
%i[ categories merchants ]
|
|
end
|
|
end
|
|
|
|
private
|
|
def previous_transaction_date
|
|
self.account
|
|
.transactions
|
|
.where("date < ?", date)
|
|
.order(date: :desc)
|
|
.first&.date
|
|
end
|
|
end
|