invoicexpress 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. data/CHANGELOG.md +0 -0
  2. data/README.md +322 -0
  3. data/Rakefile +19 -0
  4. data/invoicexpress.gemspec +26 -0
  5. data/lib/faraday/response/parse_xml.rb +23 -0
  6. data/lib/faraday/response/raise_invoicexpress_errors.rb +20 -0
  7. data/lib/invoicexpress.rb +26 -0
  8. data/lib/invoicexpress/authentication.rb +15 -0
  9. data/lib/invoicexpress/client.rb +56 -0
  10. data/lib/invoicexpress/client/cash_invoices.rb +110 -0
  11. data/lib/invoicexpress/client/charts.rb +57 -0
  12. data/lib/invoicexpress/client/clients.rb +215 -0
  13. data/lib/invoicexpress/client/credit_notes.rb +128 -0
  14. data/lib/invoicexpress/client/debit_notes.rb +129 -0
  15. data/lib/invoicexpress/client/invoices.rb +107 -0
  16. data/lib/invoicexpress/client/items.rb +82 -0
  17. data/lib/invoicexpress/client/purchase_orders.rb +126 -0
  18. data/lib/invoicexpress/client/schedules.rb +110 -0
  19. data/lib/invoicexpress/client/sequences.rb +71 -0
  20. data/lib/invoicexpress/client/simplified_invoices.rb +130 -0
  21. data/lib/invoicexpress/client/taxes.rb +82 -0
  22. data/lib/invoicexpress/client/users.rb +48 -0
  23. data/lib/invoicexpress/configuration.rb +51 -0
  24. data/lib/invoicexpress/connection.rb +40 -0
  25. data/lib/invoicexpress/error.rb +68 -0
  26. data/lib/invoicexpress/models.rb +29 -0
  27. data/lib/invoicexpress/models/chart.rb +41 -0
  28. data/lib/invoicexpress/models/client.rb +24 -0
  29. data/lib/invoicexpress/models/filter.rb +60 -0
  30. data/lib/invoicexpress/models/invoice.rb +235 -0
  31. data/lib/invoicexpress/models/purchase_order.rb +72 -0
  32. data/lib/invoicexpress/models/quarterly_result.rb +45 -0
  33. data/lib/invoicexpress/models/schedule.rb +87 -0
  34. data/lib/invoicexpress/models/sequence.rb +17 -0
  35. data/lib/invoicexpress/models/supplier.rb +17 -0
  36. data/lib/invoicexpress/models/top_client.rb +15 -0
  37. data/lib/invoicexpress/models/top_debtor.rb +14 -0
  38. data/lib/invoicexpress/models/user.rb +31 -0
  39. data/lib/invoicexpress/request.rb +63 -0
  40. data/lib/invoicexpress/version.rb +3 -0
  41. data/spec/fixtures/charts.invoicing.xml +21 -0
  42. data/spec/fixtures/charts.quarterly-results.xml +25 -0
  43. data/spec/fixtures/charts.top-clients.xml +10 -0
  44. data/spec/fixtures/charts.top-debtors.xml +10 -0
  45. data/spec/fixtures/charts.treasury.xml +49 -0
  46. data/spec/fixtures/clients.create.xml +6 -0
  47. data/spec/fixtures/clients.get.xml +21 -0
  48. data/spec/fixtures/clients.invoices.xml +11 -0
  49. data/spec/fixtures/clients.list.xml +18 -0
  50. data/spec/fixtures/clients.update.xml +1 -0
  51. data/spec/fixtures/credit_notes.create.xml +53 -0
  52. data/spec/fixtures/credit_notes.email_document.xml +9 -0
  53. data/spec/fixtures/credit_notes.list.xml +114 -0
  54. data/spec/fixtures/credit_notes.update_state.xml +7 -0
  55. data/spec/fixtures/invoices.create.xml +37 -0
  56. data/spec/fixtures/invoices.get.xml +50 -0
  57. data/spec/fixtures/invoices.list.xml +537 -0
  58. data/spec/fixtures/invoices.update_state.xml +7 -0
  59. data/spec/fixtures/ok.xml +0 -0
  60. data/spec/fixtures/po.create.xml +42 -0
  61. data/spec/fixtures/po.email_document.xml +0 -0
  62. data/spec/fixtures/po.get.xml +42 -0
  63. data/spec/fixtures/po.list.xml +44 -0
  64. data/spec/fixtures/po.update_state.xml +7 -0
  65. data/spec/fixtures/schedules.create.xml +48 -0
  66. data/spec/fixtures/schedules.get.xml +57 -0
  67. data/spec/fixtures/schedules.list.xml +40 -0
  68. data/spec/fixtures/sequences.create.xml +9 -0
  69. data/spec/fixtures/sequences.get.xml +10 -0
  70. data/spec/fixtures/sequences.list.xml +12 -0
  71. data/spec/fixtures/sequences.update.xml +10 -0
  72. data/spec/fixtures/simplified_invoices.create.xml +53 -0
  73. data/spec/fixtures/simplified_invoices.email_document.xml +9 -0
  74. data/spec/fixtures/simplified_invoices.get.xml +74 -0
  75. data/spec/fixtures/simplified_invoices.list.xml +114 -0
  76. data/spec/fixtures/simplified_invoices.update.xml +0 -0
  77. data/spec/fixtures/simplified_invoices.update_state.xml +7 -0
  78. data/spec/fixtures/taxes.create.xml +7 -0
  79. data/spec/fixtures/taxes.list.xml +18 -0
  80. data/spec/fixtures/taxes.update.xml +7 -0
  81. data/spec/fixtures/users.accounts.xml +12 -0
  82. data/spec/fixtures/users.change-account.xml +0 -0
  83. data/spec/fixtures/users.login.xml +11 -0
  84. data/spec/helper.rb +62 -0
  85. data/spec/invoicexpress/client/charts_spec.rb +69 -0
  86. data/spec/invoicexpress/client/clients_spec.rb +108 -0
  87. data/spec/invoicexpress/client/credit_notes_spec.rb +104 -0
  88. data/spec/invoicexpress/client/invoices_spec.rb +110 -0
  89. data/spec/invoicexpress/client/purchase_orders_spec.rb +116 -0
  90. data/spec/invoicexpress/client/schedules_spec.rb +111 -0
  91. data/spec/invoicexpress/client/sequences_spec.rb +68 -0
  92. data/spec/invoicexpress/client/simplified_invoices_spec.rb +116 -0
  93. data/spec/invoicexpress/client/taxes_spec.rb +70 -0
  94. data/spec/invoicexpress/client/users_spec.rb +40 -0
  95. data/spec/invoicexpress/client_spec.rb +24 -0
  96. data/spec/invoicexpress_spec.rb +19 -0
  97. metadata +279 -0
@@ -0,0 +1,29 @@
1
+ require 'happymapper'
2
+
3
+ module Invoicexpress
4
+ module Models
5
+ DATE_FORMAT = Proc.new { |value| value.strftime("%d/%m/%Y") unless value.nil? }
6
+
7
+ class BaseModel
8
+ def initialize(attributes = {})
9
+ super()
10
+
11
+ attributes.each { |k,v| self.send("#{k}=", v) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ require 'invoicexpress/models/client'
18
+ require 'invoicexpress/models/invoice'
19
+ require 'invoicexpress/models/filter'
20
+ require 'invoicexpress/models/sequence'
21
+ require 'invoicexpress/models/user'
22
+ require 'invoicexpress/models/chart'
23
+ require 'invoicexpress/models/top_client'
24
+ require 'invoicexpress/models/top_debtor'
25
+ require 'invoicexpress/models/quarterly_result'
26
+ require 'invoicexpress/models/schedule'
27
+ require 'invoicexpress/models/purchase_order'
28
+
29
+
@@ -0,0 +1,41 @@
1
+ module Invoicexpress
2
+ module Models
3
+ class Value
4
+ include HappyMapper
5
+ tag "value"
6
+ content "value"
7
+ attribute :xid, Integer
8
+ end
9
+
10
+ class Series < BaseModel
11
+ include HappyMapper
12
+
13
+ tag 'series'
14
+ has_many :values, Value
15
+ end
16
+
17
+ class Graph < BaseModel
18
+ include HappyMapper
19
+
20
+ tag 'graph'
21
+ attribute :gid, String
22
+ attribute :title, String
23
+ has_many :values, Value
24
+ end
25
+
26
+ class Graphs < BaseModel
27
+ include HappyMapper
28
+
29
+ tag 'graphs'
30
+ has_many :graphs, Graph
31
+ end
32
+
33
+ class Chart < BaseModel
34
+ include HappyMapper
35
+
36
+ tag 'chart'
37
+ has_one :series, Series
38
+ has_many :graphs, Graph
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,24 @@
1
+ module Invoicexpress
2
+ module Models
3
+
4
+ class Client < BaseModel
5
+ include HappyMapper
6
+
7
+ element :id, Integer
8
+ element :name, String
9
+ element :code, Integer
10
+ element :email, String
11
+ element :address, String
12
+ element :postal_code, String
13
+ element :fiscal_id, String
14
+ element :website, String
15
+ element :phone, String
16
+ element :fax, String
17
+ element :observations, String
18
+ element :send_options, Integer
19
+ element :balance, Float
20
+ element :country, String
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,60 @@
1
+ module Invoicexpress
2
+ module Models
3
+ class FilterStatus < BaseModel
4
+ include HappyMapper
5
+
6
+ tag 'status'
7
+ has_many :options, String, :tag => 'option'
8
+ end
9
+
10
+ class FilterByType < BaseModel
11
+ include HappyMapper
12
+
13
+ tag 'by_type'
14
+ has_many :options, String, :tag => 'option'
15
+ end
16
+
17
+ class FilterArchived < BaseModel
18
+ include HappyMapper
19
+
20
+ tag 'archived'
21
+ has_many :options, String, :tag => 'option'
22
+ end
23
+
24
+ class Filter < BaseModel
25
+ include HappyMapper
26
+
27
+ tag 'filter'
28
+ element :status, FilterStatus
29
+ element :by_type, FilterByType
30
+ element :archived, FilterArchived
31
+
32
+ def initialize(args = {})
33
+ if args[:status] && args[:status].is_a?(Array)
34
+ o = FilterStatus.new
35
+ o.options = []
36
+ o.options = args[:status].map(&:to_s)
37
+
38
+ self.status = o
39
+ end
40
+
41
+ if args[:by_type] && args[:by_type].is_a?(Array)
42
+ o = FilterByType.new
43
+ o.options = []
44
+ o.options = args[:by_type].map(&:to_s)
45
+
46
+ self.by_type = o
47
+ end
48
+
49
+ if args[:archived] && args[:archived].is_a?(Array)
50
+ o = FilterArchived.new
51
+ o.options = []
52
+ o.options = args[:archived].map(&:to_s)
53
+
54
+ self.archived = o
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,235 @@
1
+ require 'invoicexpress/models/client'
2
+
3
+ module Invoicexpress
4
+ module Models
5
+
6
+ class Tax < BaseModel
7
+ include HappyMapper
8
+
9
+ tag 'tax'
10
+ element :id, Integer
11
+ element :name, String
12
+ element :value, Float
13
+ element :region, String
14
+ element :default_tax, Integer
15
+ end
16
+
17
+ class Item < BaseModel
18
+ include HappyMapper
19
+
20
+ tag 'item'
21
+ element :id, Integer
22
+ element :name, String
23
+ element :description, String
24
+ element :unit_price, Float
25
+ element :quantity, Float
26
+ element :unit, String
27
+ element :tax, Tax
28
+ element :discount, Float
29
+ end
30
+
31
+ class Items < BaseModel
32
+ include HappyMapper
33
+
34
+ tag 'items'
35
+ attribute :type, String, :on_save => Proc.new { |value|
36
+ "array"
37
+ }
38
+ has_many :items, Item
39
+ end
40
+
41
+ # Fields common to all invoice models, necessary for create/update
42
+ module BaseInvoice
43
+ def self.included(base)
44
+ base.class_eval do
45
+ include HappyMapper
46
+ element :id, Integer
47
+ element :date, Date, :on_save => DATE_FORMAT
48
+ element :due_date, Date, :on_save => DATE_FORMAT
49
+ element :reference, String
50
+ element :observations, String
51
+ element :retention, Float
52
+ element :tax_exemption, String
53
+ element :sequence_id, Integer
54
+ element :mb_reference, String
55
+ has_one :client, Client
56
+ has_many :items, Item, :on_save => Proc.new { |value|
57
+ Items.new(:items => value)
58
+ }
59
+ end
60
+ end
61
+ end
62
+
63
+ # Fields only available with GET request
64
+ module ExtraInvoice
65
+ def self.included(base)
66
+ base.class_eval do
67
+ element :status, String
68
+ element :sequence_number, String
69
+ element :currency, String
70
+ element :sum, Float
71
+ element :discount, Float
72
+ element :before_taxes, Float
73
+ element :taxes, Float
74
+ element :total, Float
75
+ element :mb_reference, Integer
76
+ end
77
+ end
78
+
79
+ def to_core()
80
+ fields={:date => self.date,
81
+ :due_date => self.due_date,
82
+ :reference=> self.reference,
83
+ :observations=> self.observations,
84
+ :retention=> self.retention,
85
+ :tax_exemption => self.tax_exemption,
86
+ :sequence_id=> self.sequence_id,
87
+ :client => self.client,
88
+ :items => self.items,
89
+ :mb_reference=> self.mb_reference}
90
+ case self.class.to_s
91
+ when "Invoicexpress::Models::SimplifiedInvoice"
92
+ invoice = Invoicexpress::Models::CoreSimplifiedInvoice.new(fields)
93
+ when "Invoicexpress::Models::CashInvoice"
94
+ invoice = Invoicexpress::Models::CoreCashInvoice.new(fields)
95
+ when "Invoicexpress::Models::CreditNote"
96
+ invoice = Invoicexpress::Models::CoreCreditNote.new(fields)
97
+ when "Invoicexpress::Models::DebitNote"
98
+ invoice = Invoicexpress::Models::CoreDebitNote.new(fields)
99
+ else
100
+ invoice = Invoicexpress::Models::CoreInvoice.new(fields)
101
+ end
102
+ end
103
+ end
104
+
105
+ # Note: we need all of these models because the API crashes when we send an object with the fields from the get request.
106
+ # example: do a get and then a update.
107
+ class CoreSimplifiedInvoice < BaseModel
108
+ include BaseInvoice
109
+ tag 'simplified_invoice'
110
+ end
111
+
112
+ class CoreInvoice < BaseModel
113
+ include BaseInvoice
114
+ tag 'invoice'
115
+ end
116
+
117
+ class CoreCashInvoice < BaseModel
118
+ include BaseInvoice
119
+ tag 'cash_invoice'
120
+ end
121
+
122
+ class CoreCreditNote < BaseModel
123
+ include BaseInvoice
124
+ tag 'credit_note'
125
+ end
126
+
127
+ class CoreDebitNote < BaseModel
128
+ include BaseInvoice
129
+ tag 'debit_note'
130
+ end
131
+
132
+ class SimplifiedInvoice < BaseModel
133
+ include BaseInvoice
134
+ include ExtraInvoice
135
+ tag 'simplified_invoice'
136
+ end
137
+
138
+ class Invoice < BaseModel
139
+ include BaseInvoice
140
+ include ExtraInvoice
141
+ tag 'invoice'
142
+ end
143
+
144
+ class CashInvoice < BaseModel
145
+ include BaseInvoice
146
+ include ExtraInvoice
147
+ tag 'cash_invoice'
148
+ end
149
+
150
+ class CreditNote < BaseModel
151
+ include BaseInvoice
152
+ include ExtraInvoice
153
+ tag 'credit_note'
154
+ end
155
+
156
+ class DebitNote < BaseModel
157
+ include BaseInvoice
158
+ include ExtraInvoice
159
+ tag 'debit_note'
160
+ end
161
+
162
+ class InvoiceResult
163
+ include HappyMapper
164
+
165
+ tag 'results'
166
+ element :current_page, Integer
167
+ element :entries, Integer
168
+ element :total_entries, Integer
169
+ end
170
+
171
+ class Invoices < BaseModel
172
+ include HappyMapper
173
+
174
+ tag 'invoices'
175
+ has_many :invoices, Invoice
176
+ element :current_page, Integer
177
+ element :total_pages, Integer
178
+ element :total_entries, Integer
179
+ element :per_page, Integer
180
+ end
181
+
182
+ class CashInvoices < BaseModel
183
+ include HappyMapper
184
+
185
+ tag 'cash_invoices'
186
+ has_one :results, InvoiceResult
187
+ has_many :cash_invoices, CashInvoice
188
+ end
189
+
190
+ class CreditNotes < BaseModel
191
+ include HappyMapper
192
+
193
+ tag 'credit_notes'
194
+ has_one :results, InvoiceResult
195
+ has_many :credit_notes, CreditNote
196
+ end
197
+
198
+ class ClientInvoices < BaseModel
199
+ include HappyMapper
200
+
201
+ tag 'invoices'
202
+ has_one :results, InvoiceResult
203
+ has_many :invoices, Invoice
204
+ end
205
+
206
+ class InvoiceState < BaseModel
207
+ include HappyMapper
208
+
209
+ tag 'invoice'
210
+ element :state, String
211
+ element :message, String
212
+ end
213
+
214
+ class MessageClient < BaseModel
215
+ include HappyMapper
216
+
217
+ tag 'client'
218
+ element :email, String
219
+ element :save, Integer
220
+ end
221
+
222
+ class Message < BaseModel
223
+ include HappyMapper
224
+
225
+ tag 'message'
226
+ has_one :client, MessageClient
227
+ element :cc, String
228
+ element :bcc, String
229
+ element :subject, String
230
+ element :body, String
231
+ end
232
+
233
+ end
234
+ end
235
+
@@ -0,0 +1,72 @@
1
+ require 'invoicexpress/models/invoice'
2
+ require 'invoicexpress/models/supplier'
3
+ require 'invoicexpress/models/client'
4
+
5
+ module Invoicexpress
6
+ module Models
7
+
8
+ module BasePurchaseOrder
9
+ def self.included(base)
10
+ base.class_eval do
11
+ include HappyMapper
12
+
13
+ tag 'purchase_order'
14
+ element :id, Integer
15
+ element :date, Date, :on_save => DATE_FORMAT
16
+ element :due_date, Date, :on_save => DATE_FORMAT
17
+ element :loaded_at, Date, :on_save => DATE_FORMAT
18
+ element :observations, String
19
+ element :delivery_site, String
20
+ has_one :supplier, Supplier
21
+ has_one :client, Client
22
+ has_many :items, Item, :on_save => Proc.new { |value|
23
+ Items.new(:items => value)
24
+ }
25
+ end
26
+ end
27
+ end
28
+
29
+ class CorePurchaseOrder < BaseModel
30
+ include BasePurchaseOrder
31
+ #tag 'purchase_order'
32
+ end
33
+
34
+ class PurchaseOrder < CorePurchaseOrder
35
+ include BasePurchaseOrder
36
+ #include HappyMapper
37
+ #tag 'purchase_order'
38
+
39
+ element :status, String
40
+ element :sequence_number, String
41
+ element :permalink, String
42
+ element :currency, String
43
+
44
+
45
+ element :sum, Float
46
+ element :discount, Float
47
+ element :before_taxes, Float
48
+ element :taxes, Float
49
+ element :total, Float
50
+
51
+ def to_core_purchase_order()
52
+ Invoicexpress::Models::CorePurchaseOrder.new(
53
+ :id=>self.id,
54
+ :date=>self.date,
55
+ :due_date=>self.due_date,
56
+ :loaded_at=>self.loaded_at,
57
+ :observations=>self.observations,
58
+ :delivery_site=>self.delivery_site,
59
+ :supplier=>self.supplier,
60
+ :client=>self.client,
61
+ :items=>self.items
62
+ )
63
+ end
64
+ end
65
+
66
+ class PurchaseOrders < BaseModel
67
+ include HappyMapper
68
+ tag 'purchase_orders'
69
+ has_many :purchase_orders, PurchaseOrder
70
+ end
71
+ end
72
+ end