module Accountable extend ActiveSupport::Concern ASSET_TYPES = %w[Depository Investment Crypto Property Vehicle OtherAsset] LIABILITY_TYPES = %w[CreditCard Loan OtherLiability] TYPES = ASSET_TYPES + LIABILITY_TYPES def self.from_type(type) return nil unless TYPES.include?(type) type.constantize end def self.by_classification { assets: ASSET_TYPES, liabilities: LIABILITY_TYPES } end included do has_one :account, as: :accountable, touch: true end def post_sync broadcast_replace_to( account, target: "chart_account_#{account.id}", partial: "accounts/show/chart", locals: { account: account } ) end end