Skip to content

Commit c8736b4

Browse files
committed
Merge branch 'create-invoice-resource'
2 parents f7220c6 + 67b4cd2 commit c8736b4

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

lib/freeagent.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module FreeAgent
1414
require_relative 'freeagent/timeslip'
1515
require_relative 'freeagent/note'
1616
require_relative 'freeagent/recurring_invoice'
17+
require_relative 'freeagent/invoice'
1718

1819
class << self
1920
attr_accessor :environment

lib/freeagent/invoice.rb

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
module FreeAgent
2+
class Invoice < Resource
3+
resource :invoice
4+
5+
resource_methods :default
6+
7+
attr_accessor :contact, :reference, :currency, :status, :omit_header, :payment_terms_in_days, :ec_status, :invoice_items
8+
9+
attr_accessor :project, :discount_percent, :written_off_date
10+
11+
decimal_accessor :exchange_rate, :net_value, :sales_tax_value
12+
13+
date_accessor :dated_on, :due_on
14+
15+
# TODO FIXME Need to rename this better
16+
def self.all_with_nested_items
17+
Invoice.filter(:nested_invoice_items => true)
18+
end
19+
20+
def self.recent_open_or_overdue
21+
Invoice.filter(:view => 'recent_open_or_overdue')
22+
end
23+
24+
def self.open_or_overdue
25+
Invoice.filter(:view => 'recent_open_or_overdue')
26+
end
27+
28+
def self.draft
29+
Invoice.filter(:view => 'recent_open_or_overdue')
30+
end
31+
32+
def self.scheduled_to_email
33+
Invoice.filter(:view => 'recent_open_or_overdue')
34+
end
35+
36+
def self.thank_you_emails
37+
Invoice.filter(:view => 'recent_open_or_overdue')
38+
end
39+
40+
def self.reminder_emails
41+
Invoice.filter(:view => 'recent_open_or_overdue')
42+
end
43+
44+
def self.last_month(n)
45+
Invoice.filter(:view => 'recent_open_or_overdue')
46+
end
47+
48+
def self.find_all_by_contact(contact)
49+
Invoice.filter(:contact => contact)
50+
end
51+
52+
def self.find_all_by_project(project)
53+
Invoice.filter(:project => project)
54+
end
55+
56+
# FIXME Need to figure out the format of the json.
57+
#def send_email(email)
58+
# FreeAgent.client.post("invoices/#{id}/send_email", email)
59+
#end
60+
61+
def mark_as_sent
62+
FreeAgent.client.put("invoices/#{id}/transitions/mark_as_sent", nil)
63+
end
64+
65+
def mark_as_draft
66+
FreeAgent.client.put("invoices/#{id}/transitions/mark_as_draft", nil)
67+
end
68+
69+
def mark_as_cancelled
70+
FreeAgent.client.put("invoices/#{id}/transitions/mark_as_cancelled", nil)
71+
end
72+
73+
# TODO Write invoice timeline wrapper
74+
#def timeline
75+
#
76+
#end
77+
end
78+
end

0 commit comments

Comments
 (0)