Class: Pacioli::Party

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/pacioli/party.rb

Direct Known Subclasses

Creditor, Debtor

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.for(party) ⇒ Object



7
8
9
# File 'lib/pacioli/party.rb', line 7

def self.for(party)
  Party.where(partyable_type: party.class.name, partyable_id: party.id).includes(:transactions).first || Party.create!(partyable_type: party.class.name, partyable_id: party.id, type: "Pacioli::Debtor") # By default creates a debtor
end

Instance Method Details

#age_analysis_reportObject



77
78
79
80
81
82
83
84
85
# File 'lib/pacioli/party.rb', line 77

def age_analysis_report
  [
    {description: "Present", date: Date.today, balance: balance_at(Date.today), start_date: (Date.today - 30.days).strftime, end_date: Date.today.strftime},
    {description: "30 Days", date: Date.today - 30.days, balance: balance_at(Date.today - 30.days), start_date: (Date.today - 60.days).strftime, end_date:(Date.today - 30.days).strftime},
    {description: "60 Days", date: Date.today - 60.days, balance: balance_at(Date.today - 60.days), start_date: (Date.today - 90.days).strftime, end_date: (Date.today - 60.days).strftime},
    {description: "90 Days", date: Date.today - 90.days, balance: balance_at(Date.today - 90.days), start_date: (Date.today - 120.days).strftime, end_date: (Date.today - 90.days).strftime},
    {description: "120 Days", date: Date.today - 120.days, balance: balance_at(Date.today - 120.days), start_date: (Date.today - 150.days).strftime, end_date: (Date.today - 120.days).strftime}
  ]
end

#balanceObject



37
38
39
# File 'lib/pacioli/party.rb', line 37

def balance
  debits.sum(&:amount) - credits.sum(&:amount)
end

#balance_at(date = Time.now, t_id = nil) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/pacioli/party.rb', line 41

def balance_at(date=Time.now, t_id=nil)
  if t_id.nil?
    debits_before(date.end_of_day).sum(&:amount) - credits_before(date.end_of_day).sum(&:amount)
  else
    debits_before(date.end_of_day).sum(&:amount) - credits_before(date.end_of_day).sum(&:amount)
  end
end

#creditsObject



24
25
26
27
# File 'lib/pacioli/party.rb', line 24

def credits
  #transactions.where(type: 'Pacioli::Credit')
  transactions.select(&:credit?)
end

#credits_before(date) ⇒ Object



33
34
35
# File 'lib/pacioli/party.rb', line 33

def credits_before(date)
  credits.select {|credit| credit.dated < date}
end

#debitsObject



19
20
21
22
# File 'lib/pacioli/party.rb', line 19

def debits
  #transactions.where(type: 'Pacioli::Debit')
  transactions.select(&:debit?)
end

#debits_before(date) ⇒ Object



29
30
31
# File 'lib/pacioli/party.rb', line 29

def debits_before(date)
  debits.select {|debit| debit.dated < date}
end

#statement_between_dates(start_date, end_date = Time.now) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/pacioli/party.rb', line 49

def statement_between_dates(start_date, end_date=Time.now)
  start_date ||= (Date.today - 1.month).to_time

  temp_array = []

  opening_balance = debits_before(start_date.beginning_of_day).sum(&:amount) - credits_before(start_date.beginning_of_day).sum(&:amount)

  temp_array << {description: "Opening Balance", date: start_date, credit_amount: "", debit_amount: "", balance: opening_balance}

  running_balance = opening_balance

  temp_array << transactions.between(start_date, end_date).map do |transaction|
    description = transaction.journal_entry.description

    if transaction.credit?
      running_balance -= transaction.amount
      {description: description, date: transaction.dated, credit_amount: transaction.amount, debit_amount: "", balance: running_balance, source_document_description: description}
    else
      running_balance += transaction.amount
      {description: description, date: transaction.dated, debit_amount: transaction.amount, credit_amount: "", balance: running_balance, source_document_description: description}
    end
  end

  temp_array << {description: "Closing Balance", date: end_date, credit_amount: "", debit_amount: "", balance: balance_at(end_date)}

  temp_array.flatten
end

#with_name(party_name) ⇒ Object



11
12
13
# File 'lib/pacioli/party.rb', line 11

def with_name(party_name)
  self.name = party_name
end

#with_source(partyable_object) ⇒ Object



15
16
17
# File 'lib/pacioli/party.rb', line 15

def with_source(partyable_object)
  self.partyable = partyable_object
end