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