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.
- data/CHANGELOG.md +0 -0
- data/README.md +322 -0
- data/Rakefile +19 -0
- data/invoicexpress.gemspec +26 -0
- data/lib/faraday/response/parse_xml.rb +23 -0
- data/lib/faraday/response/raise_invoicexpress_errors.rb +20 -0
- data/lib/invoicexpress.rb +26 -0
- data/lib/invoicexpress/authentication.rb +15 -0
- data/lib/invoicexpress/client.rb +56 -0
- data/lib/invoicexpress/client/cash_invoices.rb +110 -0
- data/lib/invoicexpress/client/charts.rb +57 -0
- data/lib/invoicexpress/client/clients.rb +215 -0
- data/lib/invoicexpress/client/credit_notes.rb +128 -0
- data/lib/invoicexpress/client/debit_notes.rb +129 -0
- data/lib/invoicexpress/client/invoices.rb +107 -0
- data/lib/invoicexpress/client/items.rb +82 -0
- data/lib/invoicexpress/client/purchase_orders.rb +126 -0
- data/lib/invoicexpress/client/schedules.rb +110 -0
- data/lib/invoicexpress/client/sequences.rb +71 -0
- data/lib/invoicexpress/client/simplified_invoices.rb +130 -0
- data/lib/invoicexpress/client/taxes.rb +82 -0
- data/lib/invoicexpress/client/users.rb +48 -0
- data/lib/invoicexpress/configuration.rb +51 -0
- data/lib/invoicexpress/connection.rb +40 -0
- data/lib/invoicexpress/error.rb +68 -0
- data/lib/invoicexpress/models.rb +29 -0
- data/lib/invoicexpress/models/chart.rb +41 -0
- data/lib/invoicexpress/models/client.rb +24 -0
- data/lib/invoicexpress/models/filter.rb +60 -0
- data/lib/invoicexpress/models/invoice.rb +235 -0
- data/lib/invoicexpress/models/purchase_order.rb +72 -0
- data/lib/invoicexpress/models/quarterly_result.rb +45 -0
- data/lib/invoicexpress/models/schedule.rb +87 -0
- data/lib/invoicexpress/models/sequence.rb +17 -0
- data/lib/invoicexpress/models/supplier.rb +17 -0
- data/lib/invoicexpress/models/top_client.rb +15 -0
- data/lib/invoicexpress/models/top_debtor.rb +14 -0
- data/lib/invoicexpress/models/user.rb +31 -0
- data/lib/invoicexpress/request.rb +63 -0
- data/lib/invoicexpress/version.rb +3 -0
- data/spec/fixtures/charts.invoicing.xml +21 -0
- data/spec/fixtures/charts.quarterly-results.xml +25 -0
- data/spec/fixtures/charts.top-clients.xml +10 -0
- data/spec/fixtures/charts.top-debtors.xml +10 -0
- data/spec/fixtures/charts.treasury.xml +49 -0
- data/spec/fixtures/clients.create.xml +6 -0
- data/spec/fixtures/clients.get.xml +21 -0
- data/spec/fixtures/clients.invoices.xml +11 -0
- data/spec/fixtures/clients.list.xml +18 -0
- data/spec/fixtures/clients.update.xml +1 -0
- data/spec/fixtures/credit_notes.create.xml +53 -0
- data/spec/fixtures/credit_notes.email_document.xml +9 -0
- data/spec/fixtures/credit_notes.list.xml +114 -0
- data/spec/fixtures/credit_notes.update_state.xml +7 -0
- data/spec/fixtures/invoices.create.xml +37 -0
- data/spec/fixtures/invoices.get.xml +50 -0
- data/spec/fixtures/invoices.list.xml +537 -0
- data/spec/fixtures/invoices.update_state.xml +7 -0
- data/spec/fixtures/ok.xml +0 -0
- data/spec/fixtures/po.create.xml +42 -0
- data/spec/fixtures/po.email_document.xml +0 -0
- data/spec/fixtures/po.get.xml +42 -0
- data/spec/fixtures/po.list.xml +44 -0
- data/spec/fixtures/po.update_state.xml +7 -0
- data/spec/fixtures/schedules.create.xml +48 -0
- data/spec/fixtures/schedules.get.xml +57 -0
- data/spec/fixtures/schedules.list.xml +40 -0
- data/spec/fixtures/sequences.create.xml +9 -0
- data/spec/fixtures/sequences.get.xml +10 -0
- data/spec/fixtures/sequences.list.xml +12 -0
- data/spec/fixtures/sequences.update.xml +10 -0
- data/spec/fixtures/simplified_invoices.create.xml +53 -0
- data/spec/fixtures/simplified_invoices.email_document.xml +9 -0
- data/spec/fixtures/simplified_invoices.get.xml +74 -0
- data/spec/fixtures/simplified_invoices.list.xml +114 -0
- data/spec/fixtures/simplified_invoices.update.xml +0 -0
- data/spec/fixtures/simplified_invoices.update_state.xml +7 -0
- data/spec/fixtures/taxes.create.xml +7 -0
- data/spec/fixtures/taxes.list.xml +18 -0
- data/spec/fixtures/taxes.update.xml +7 -0
- data/spec/fixtures/users.accounts.xml +12 -0
- data/spec/fixtures/users.change-account.xml +0 -0
- data/spec/fixtures/users.login.xml +11 -0
- data/spec/helper.rb +62 -0
- data/spec/invoicexpress/client/charts_spec.rb +69 -0
- data/spec/invoicexpress/client/clients_spec.rb +108 -0
- data/spec/invoicexpress/client/credit_notes_spec.rb +104 -0
- data/spec/invoicexpress/client/invoices_spec.rb +110 -0
- data/spec/invoicexpress/client/purchase_orders_spec.rb +116 -0
- data/spec/invoicexpress/client/schedules_spec.rb +111 -0
- data/spec/invoicexpress/client/sequences_spec.rb +68 -0
- data/spec/invoicexpress/client/simplified_invoices_spec.rb +116 -0
- data/spec/invoicexpress/client/taxes_spec.rb +70 -0
- data/spec/invoicexpress/client/users_spec.rb +40 -0
- data/spec/invoicexpress/client_spec.rb +24 -0
- data/spec/invoicexpress_spec.rb +19 -0
- 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
|