Sha256: 2ca9215b1250ce826082e002f8f3a46b0a3efb0c7ab35ec9e658deee4da91226

Contents?: true

Size: 1.75 KB

Versions: 16

Compression:

Stored size: 1.75 KB

Contents

class Dorsale::ExpenseGun::Expense < ::Dorsale::ApplicationRecord
  self.table_name = "dorsale_expense_gun_expenses"
  include AASM

  has_many :expense_lines, inverse_of: :expense, dependent: :destroy, class_name: ::Dorsale::ExpenseGun::ExpenseLine

  has_many :attachments,
    :as         => :attachable,
    :dependent  => :destroy,
    :class_name => ::Dorsale::Alexandrie::Attachment

  belongs_to :user, class_name: User
  validates :user, presence: true

  validates :name, presence: true
  validates :date, presence: true

  accepts_nested_attributes_for :expense_lines,
    :allow_destroy => true,
    :reject_if => proc { |attr| attr["name"].blank? }

  default_scope -> {
    order(created_at: :desc, id: :desc)
  }

  def assign_default_values
    assign_default :date, Time.zone.now.to_date
  end

  # Sum of line amounts
  def total_all_taxes
    expense_lines.map(&:total_all_taxes).sum
  end

  # Sum of line emplee payback
  def total_employee_payback
    expense_lines.map(&:employee_payback).sum
  end

  # Sum of deductible deductible vat
  def total_vat_deductible
    expense_lines.map(&:total_vat_deductible).sum
  end

  def current_state
    aasm.current_state
  end

  aasm(column: :state, whiny_transitions: false) do
    state :draft, initial: true
    state :submitted
    state :accepted
    state :refused
    state :canceled

    event :go_to_submitted do
      transitions from: :draft, to: :submitted
    end

    event :go_to_accepted do
      transitions from: :submitted, to: :accepted
    end

    event :go_to_refused do
      transitions from: :submitted, to: :refused
    end

    event :go_to_canceled do
      transitions from: [:draft, :submitted, :accepted], to: :canceled
    end
  end

  def may_edit?
    current_state == :draft
  end

end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
dorsale-3.8.1 app/models/dorsale/expense_gun/expense.rb
dorsale-3.8.0 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.8 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.7 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.6 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.5 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.4 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.2 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.1 app/models/dorsale/expense_gun/expense.rb
dorsale-3.7.0 app/models/dorsale/expense_gun/expense.rb
dorsale-3.6.1 app/models/dorsale/expense_gun/expense.rb
dorsale-3.6.0 app/models/dorsale/expense_gun/expense.rb
dorsale-3.5.2 app/models/dorsale/expense_gun/expense.rb
dorsale-3.5.1 app/models/dorsale/expense_gun/expense.rb
dorsale-3.5.0 app/models/dorsale/expense_gun/expense.rb
dorsale-3.4.0 app/models/dorsale/expense_gun/expense.rb