Class: Uomi::CreditNote
- Inherits:
-
Invoice
- Object
- ActiveRecord::Base
- Invoice
- Uomi::CreditNote
show all
- Defined in:
- lib/uomi/credit_note.rb
Instance Method Summary
collapse
Methods inherited from Invoice
#add_credit_transaction, #add_debit_transaction, #add_line_item, #add_payment_reference, #adjust, #balance_zero?, #calculate_balance, #calculate_totals, #credit_notes, #credit_transactions, #debit_transactions, #decorate_with, draft, #due, #due_date_past?, for_payment_reference, #from, issued, #line_item, #mark_items_invoiced!, #mark_items_uninvoiced!, #net_total, #numbered, #overdue?, owing, #owing?, #payment_reference, #remove_line_item, #remove_payment_reference, #set_invoice_number!, settled, #should_settle?, #to, voided
Instance Method Details
#against_invoice(invoice) ⇒ Object
52
53
54
55
56
57
58
59
|
# File 'lib/uomi/credit_note.rb', line 52
def against_invoice(invoice)
raise RuntimeError, "You must allocate a credit note against an invoice" if invoice.blank?
raise RuntimeError, "You must allocate a credit note against an issued invoice" unless invoice.issued?
self.credit_note_invoices << CreditNoteInvoice.new(invoice_id: invoice.id)
self.buyer = invoice.buyer
self.seller = invoice.seller
end
|
#annul(params = {}) ⇒ Object
76
77
78
|
# File 'lib/uomi/credit_note.rb', line 76
def annul(params={})
record_amount_against_invoice(params[:amount], params[:against_invoice]) if params[:against_invoice]
end
|
#annul_remaining_amount! ⇒ Object
119
120
121
|
# File 'lib/uomi/credit_note.rb', line 119
def annul_remaining_amount!
add_debit_transaction amount: balance.abs
end
|
#create_initial_transaction! ⇒ Object
84
85
86
87
88
89
90
91
92
|
# File 'lib/uomi/credit_note.rb', line 84
def create_initial_transaction!
if total > 0
add_credit_transaction amount: total
else
add_debit_transaction amount: total
end
save!
end
|
#credit(options = {}) ⇒ Object
43
44
45
46
47
48
49
50
|
# File 'lib/uomi/credit_note.rb', line 43
def credit(options={})
add_line_item(
invoiceable: options[:line_item].andand.invoiceable,
amount: options[:amount] || 0,
tax: options[:tax] || 0,
description: options[:description] || "Credit note against #{options[:line_item].andand.description}" )
end
|
#default_numbering_prefix ⇒ Object
80
81
82
|
# File 'lib/uomi/credit_note.rb', line 80
def default_numbering_prefix
"CN"
end
|
#issue(issued_at = Time.now) ⇒ Object
27
28
29
30
31
32
33
|
# File 'lib/uomi/credit_note.rb', line 27
def issue(issued_at = Time.now)
self.issued_at = issued_at
create_initial_transaction!
record_transaction_against_invoice! unless self.invoices.blank?
record_credit_notes!
record_transaction!
end
|
#record_credit_notes! ⇒ Object
67
68
69
70
71
72
73
74
|
# File 'lib/uomi/credit_note.rb', line 67
def record_credit_notes!
line_items.each do |line_item|
invoiceable = line_item.invoiceable
next if invoiceable.blank?
invoiceable.handle_credit(line_item.amount) if invoiceable.respond_to?(:handle_credit)
invoiceable.save!
end
end
|
#record_transaction! ⇒ Object
61
62
63
64
65
|
# File 'lib/uomi/credit_note.rb', line 61
def record_transaction!
unless self.invoices.blank?
add_debit_transaction(amount: total)
end
end
|
#record_transaction_against_invoice! ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/uomi/credit_note.rb', line 35
def record_transaction_against_invoice!
invoice = invoices.first
validate(invoice: invoice, amount: self.total)
invoice.add_credit_transaction(amount: total)
invoice.save!
CreditNoteCreditTransaction.create!(transaction: invoice.transactions.last, credit_note_id: self.id)
end
|
#refund(&block) ⇒ Object
102
103
104
105
|
# File 'lib/uomi/credit_note.rb', line 102
def refund(&block)
instance_eval(&block)
save!
end
|
#reverse_transactions_against_invoice ⇒ Object
129
130
131
132
133
134
135
|
# File 'lib/uomi/credit_note.rb', line 129
def reverse_transactions_against_invoice
credit_note_credit_transactions.each do |cnct|
invoice = cnct.transaction.invoice
invoice.add_debit_transaction(amount: cnct.transaction.amount)
invoice.save!
end
end
|
#set_balance_off(options = {}) ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/uomi/credit_note.rb', line 107
def set_balance_off(options={})
validate(options)
invoice = options[:invoice]
invoice.add_credit_transaction(amount: options[:amount])
against_invoice(invoice)
invoice.save!
self.add_debit_transaction(amount: options[:amount])
CreditNoteCreditTransaction.create!(transaction: invoice.transactions.last, credit_note_id: self.id)
end
|
#validate(options = {}) ⇒ Object
94
95
96
97
98
|
# File 'lib/uomi/credit_note.rb', line 94
def validate(options={})
raise RuntimeError, "You must allocate this credit against an invoice" if options[:invoice].blank?
raise RuntimeError, "You must allocate this credit against a Uomi Invoice" unless options[:invoice].is_a?(Uomi::Invoice)
raise RuntimeError, "You cannot allocate nothing to the invoice" if (options[:amount].blank? || options[:amount].zero?)
end
|
#void ⇒ Object
123
124
125
126
127
|
# File 'lib/uomi/credit_note.rb', line 123
def void
annul_remaining_amount! unless self.draft?
reverse_transactions_against_invoice
self
end
|