fastbill 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -105,8 +105,7 @@ class Customer
105
105
  true
106
106
  else
107
107
  false
108
- end
109
-
108
+ end
110
109
  end
111
110
 
112
111
  def hydrate(body)
@@ -2,7 +2,7 @@ class Invoice
2
2
  include HTTParty
3
3
  base_uri 'https://portal.fastbill.com'
4
4
 
5
- attr_accessor :id, :invoice_type, :customer_id, :customer_costcenter_id, :currency_code, :template_id, :intro_text, :invoice_number, :payed_date, :is_canceled, :invoice_date, :due_date, :delivery_date, :sub_total, :vat_total, :total, :vat_items, :invoice_items, :is_new
5
+ attr_accessor :id, :invoice_type, :customer_id, :customer_costcenter_id, :currency_code, :template_id, :intro_text, :invoice_number, :payed_date, :is_canceled, :invoice_date, :due_date, :delivery_date, :sub_total, :vat_total, :total, :vat_items, :invoice_items, :is_new, :eu_delivery
6
6
 
7
7
  def initialize(auth = nil)
8
8
  @auth = auth
@@ -66,6 +66,7 @@ class Invoice
66
66
  @delivery_date = parse_date body["DELIVERY_DATE"]
67
67
  @sub_total = body["SUB_TOTAL"]
68
68
  @vat_total = body["VAT_TOTAL"]
69
+ @eu_delivery = body["EU_DELIVERY"] == "1" ? true : false
69
70
  @vat_items = []
70
71
  @total = body["TOTAL"]
71
72
  for vat_item in body["VAT_ITEMS"].each
@@ -89,24 +90,235 @@ class Invoice
89
90
  end
90
91
  end
91
92
  def to_xml
92
-
93
+ xml = "<INVOICE>"
94
+ unless @id.nil?
95
+ xml = xml + "<INVOICE_ID>#{@id}</INVOICE_ID>"
96
+ end
97
+ unless @invoice_type.nil?
98
+ xml = xml + "<INVOICE_TYPE>#{@invoice_type}</INVOICE_TYPE>"
99
+ end
100
+ unless @customer_id.nil?
101
+ xml = xml + "<CUSTOMER_ID>#{@customer_id}</CUSTOMER_ID>"
102
+ end
103
+ unless @customer_costcenter_id.nil?
104
+ xml = xml + "<CUSTOMER_COSTCENTER_ID>#{@customer_costcenter_id}</CUSTOMER_COSTCENTER_ID>"
105
+ end
106
+ unless @currency_code.nil?
107
+ xml = xml + "<CURRENCY_CODE>#{@currency_code}</CURRENCY_CODE>"
108
+ end
109
+ unless @template_id.nil?
110
+ xml = xml + "<TEMPLATE_ID>#{@template_id}</TEMPLATE_ID>"
111
+ end
112
+ unless @invoice_number.nil?
113
+ xml = xml + "<INVOICE_NUMBER>#{@invoice_number}</INVOICE_NUMBER>"
114
+ end
115
+ unless @introtext.nil?
116
+ xml = xml + "<INTROTEXT>#{@introtext}</INTROTEXT>"
117
+ end
118
+ unless @eu_delivery.nil?
119
+ eu = @eu_delivery ? 1 : 0
120
+ xml = xml + "<EU_DELIVERY>#{eu}</EU_DELIVERY>"
121
+ end
122
+ if @payed_date
123
+ xml = xml + "<PAYED_DATE>#{@payed_date.strftime("%Y-%m-%d")}</PAYED_DATE>"
124
+ end
125
+ unless @is_canceled.nil?
126
+ c = @is_canceled ? 1 : 0
127
+ xml = xml + "<IS_CANCELED>#{c}</IS_CANCELED>"
128
+ end
129
+ if @invoice_date
130
+ xml = xml + "<IVOICE_DATE>#{@invoice_date.strftime("%Y-%m-%d")}</INVOICE_DATE>"
131
+ end
132
+ if @due_date
133
+ xml = xml + "<DUE_DATE>#{@due_date.strftime("%Y-%m-%d")}</DUE_DATE>"
134
+ end
135
+ if @delivery_date
136
+ xml = xml + "<DELIVERY_DATE>#{@delivery_date.strftime("%Y-%m-%d")}</DELIVERY_DATE>"
137
+ end
138
+ if @payed_date
139
+ xml = xml + "<PAYED_DATE>#{@payed_date.strftime("%Y-%m-%d")}</PAYED_DATE>"
140
+ end
141
+ unless @sub_total.nil?
142
+ xml = xml + "<SUB_TOTAL>#{@sub_total}</SUB_TOTAL>"
143
+ end
144
+ unless @vat_total.nil?
145
+ xml = xml + "<VAT_TOTAL>#{@vat_total}</VAT_TOTAL>"
146
+ end
147
+ unless @total.nil?
148
+ xml = xml + "<TOTAL>#{@total}</TOTAL>"
149
+ end
150
+ unless @vat_items.length == 0
151
+ xml = xml + "<VAT_ITEMS>"
152
+ for vat_item in @vat_items.each
153
+ xml = xml + vat_item.to_xml
154
+ end
155
+ xml = xml + "</VAT_ITEMS>"
156
+ end
157
+ unless @invoice_items.length == 0
158
+ xml = xml + "<ITEMS>"
159
+ for item in @invoice_items.each
160
+ xml = xml + item.to_xml
161
+ end
162
+ xml = xml + "</ITEMS>"
163
+ end
164
+ xml + "</INVOICE>"
93
165
  end
94
166
  def complete
95
-
167
+ options = {
168
+ :basic_auth => @auth,
169
+ :headers => {
170
+ "Content-Type" => "application/xml"
171
+ },
172
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.complete</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA></FBAPI>'
173
+ }
174
+ r = self.class.post('/api/0.1/api.php', options)
175
+ body = Crack::XML.parse r.body
176
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
177
+ true
178
+ else
179
+ false
180
+ end
96
181
  end
97
182
  def sign!
98
-
183
+ options = {
184
+ :basic_auth => @auth,
185
+ :headers => {
186
+ "Content-Type" => "application/xml"
187
+ },
188
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.sign</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA></FBAPI>'
189
+ }
190
+ r = self.class.post('/api/0.1/api.php', options)
191
+ body = Crack::XML.parse r.body
192
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
193
+ true
194
+ else
195
+ false
196
+ end
99
197
  end
100
- def send_by_email
101
-
198
+ def send_by_email(from = nil, to = nil, cc = nil, subject = nil, message = nil, confirmation = false)
199
+ unless to.nil? && cc.nil?
200
+ xml = "<INVOICE_ID>#{@id}</INVOICE_ID>"
201
+ xml = xml + "<RECIPIENT>"
202
+ unless to.nil?
203
+ xml = xml + "<TO>#{to}</TO>"
204
+ end
205
+ unless cc.nil?
206
+ xml = xml + "<CC>#{cc}</CC>"
207
+ end
208
+ xml = xml + "</RECIPIENT>"
209
+ unless subject.nil?
210
+ xml = xml + "<SUBJECT>#{subject}</SUBJECT>"
211
+ end
212
+ unless message.nil?
213
+ xml = xml + "<MESSAGE>#{message}</MESSAGE>"
214
+ end
215
+ c = confirmation ? 1 : 0
216
+ xml = xml + "<CONFIRMATION>#{c}</CONFIRMATION>"
217
+ options = {
218
+ :basic_auth => @auth,
219
+ :headers => {
220
+ "Content-Type" => "application/xml"
221
+ },
222
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.sendbyemail</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA>'+ xml +'</FBAPI>'
223
+ }
224
+ r = self.class.post('/api/0.1/api.php', options)
225
+ body = Crack::XML.parse r.body
226
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
227
+ true
228
+ else
229
+ false
230
+ end
231
+ end
102
232
  end
103
233
  def send_by_ground_mail
104
-
234
+ options = {
235
+ :basic_auth => @auth,
236
+ :headers => {
237
+ "Content-Type" => "application/xml"
238
+ },
239
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.sendbypost</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA></FBAPI>'
240
+ }
241
+ r = self.class.post('/api/0.1/api.php', options)
242
+ body = Crack::XML.parse r.body
243
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
244
+ true
245
+ else
246
+ false
247
+ end
105
248
  end
106
- def set_paid
107
-
249
+ def set_paid!
250
+ options = {
251
+ :basic_auth => @auth,
252
+ :headers => {
253
+ "Content-Type" => "application/xml"
254
+ },
255
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.setpaid</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA></FBAPI>'
256
+ }
257
+ r = self.class.post('/api/0.1/api.php', options)
258
+ body = Crack::XML.parse r.body
259
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
260
+ true
261
+ else
262
+ false
263
+ end
108
264
  end
109
- def items
110
-
265
+ def safe
266
+ if @is_new
267
+ #create
268
+ options = {
269
+ :basic_auth => @auth,
270
+ :headers => {
271
+ "Content-Type" => "application/xml"
272
+ },
273
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.create</SERVICE><DATA>' + self.to_xml + '</DATA></FBAPI>'
274
+ }
275
+ r = self.class.post('/api/0.1/api.php', options)
276
+ body = Crack::XML.parse r.body
277
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
278
+ unless body['FBAPI']["RESPONSE"]["STATUS"]["INVOICE_ID"].nil?
279
+ @id = body['FBAPI']["RESPONSE"]["STATUS"]["INVOICE_ID"]
280
+ end
281
+ @is_new = false
282
+ self
283
+ else
284
+ false
285
+ end
286
+ else
287
+ #update
288
+ options = {
289
+ :basic_auth => @auth,
290
+ :headers => {
291
+ "Content-Type" => "application/xml"
292
+ },
293
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.update</SERVICE><DATA>' + self.to_xml + '</DATA></FBAPI>'
294
+ }
295
+ r = self.class.post('/api/0.1/api.php', options)
296
+ body = Crack::XML.parse r.body
297
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
298
+ unless body['FBAPI']["RESPONSE"]["STATUS"]["INVOICE_ID"].nil?
299
+ @id = body['FBAPI']["RESPONSE"]["STATUS"]["INVOICE_ID"]
300
+ end
301
+ @is_new = false
302
+ self
303
+ else
304
+ false
305
+ end
306
+ end
307
+ end
308
+ def delete!
309
+ options = {
310
+ :basic_auth => @auth,
311
+ :headers => {
312
+ "Content-Type" => "application/xml"
313
+ },
314
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>invoice.delete</SERVICE><DATA><INVOICE_ID>' + @id + '</INVOICE_ID></DATA></FBAPI>'
315
+ }
316
+ r = self.class.post('/api/0.1/api.php', options)
317
+ body = Crack::XML.parse r.body
318
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
319
+ true
320
+ else
321
+ false
322
+ end
111
323
  end
112
324
  end
@@ -6,12 +6,22 @@ class InvoiceItem
6
6
 
7
7
  def initialize(auth = nil)
8
8
  @auth = auth
9
- end
10
- def get(invoice_id)
11
-
12
9
  end
13
10
  def delete!
14
-
11
+ options = {
12
+ :basic_auth => @auth,
13
+ :headers => {
14
+ "Content-Type" => "application/xml"
15
+ },
16
+ :body => '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>item.delete</SERVICE><DATA><INVOICE_ITEM_ID>' + @id + '</INVOICE_ITEM_ID></DATA></FBAPI>'
17
+ }
18
+ r = self.class.post('/api/0.1/api.php', options)
19
+ body = Crack::XML.parse r.body
20
+ if !body['FBAPI']["RESPONSE"]["STATUS"].nil? && body['FBAPI']["RESPONSE"]["STATUS"] == "success"
21
+ true
22
+ else
23
+ false
24
+ end
15
25
  end
16
26
  def hydrate(body)
17
27
  @id = body["INVOICE_ITEM_ID"]
@@ -27,9 +37,36 @@ class InvoiceItem
27
37
  end
28
38
  def to_xml
29
39
  xml = "<ITEM>"
30
- unless @id.nil
40
+ unless @id.nil?
31
41
  xml = xml + "<INVOICE_ITEM_ID>#{@id}</INVOICE_ITEM_ID>"
32
42
  end
43
+ unless @article_number.nil?
44
+ xml = xml + "<ARTICLE_NUMBER>#{@article_number}</ARTICLE_NUMBER>"
45
+ end
46
+ unless @description.nil?
47
+ xml = xml + "<DESCRIPTION>#{@description}</DESCRIPTION>"
48
+ end
49
+ unless @quantity.nil?
50
+ xml = xml + "<QUANTITY>#{@quantity}</QUANTITY>"
51
+ end
52
+ unless @unit_price.nil?
53
+ xml = xml + "<UNIT_PRICE>#{@unit_price}</UNIT_PRICE>"
54
+ end
55
+ unless @vat_percent.nil?
56
+ xml = xml + "<VAT_PERCENT>#{@vat_percent}</VAT_PERCENT>"
57
+ end
58
+ unless @vat_value.nil?
59
+ xml = xml + "<VAT_VALUE>#{@vat_value}</VAT_VALUE>"
60
+ end
61
+ unless @complete_net.nil?
62
+ xml = xml + "<COMPLETE_NET>#{@complete_net}</COMPLETE_NET>"
63
+ end
64
+ unless @complete_gross.nil?
65
+ xml = xml + "<COMPLETE_GROSS>#{@complete_gross}</COMPLETE_GROSS>"
66
+ end
67
+ unless @sort_order.nil?
68
+ xml = xml + "<SORT_ORDER>#{@sort_order}</SORT_ORDER>"
69
+ end
33
70
  xml = xml + "</ITEM>"
34
71
  end
35
72
  end
@@ -7,6 +7,13 @@ class InvoiceVatItem
7
7
  self
8
8
  end
9
9
  def to_xml
10
-
10
+ xml = "<VAT_ITEM>"
11
+ unless @vat_percent.nil?
12
+ xml = "<VAT_PERCENT>#{@vat_percent}</VAT_PERCENT>"
13
+ end
14
+ unless @vat_value.nil?
15
+ xml = "<VAT_VALUE>#{@vat_value}</VAT_VALUE>"
16
+ end
17
+ xml + "</VAT_ITEM>"
11
18
  end
12
19
  end
@@ -1,3 +1,3 @@
1
1
  module Fastbill
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastbill
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70108860467460 !ruby/object:Gem::Requirement
16
+ requirement: &70281048401180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70108860467460
24
+ version_requirements: *70281048401180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &70108860536240 !ruby/object:Gem::Requirement
27
+ requirement: &70281048490340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70108860536240
35
+ version_requirements: *70281048490340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: crack
38
- requirement: &70108860610780 !ruby/object:Gem::Requirement
38
+ requirement: &70281048784640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70108860610780
46
+ version_requirements: *70281048784640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: httparty
49
- requirement: &70108860726580 !ruby/object:Gem::Requirement
49
+ requirement: &70281049042620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70108860726580
57
+ version_requirements: *70281049042620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: crack
60
- requirement: &70108860872240 !ruby/object:Gem::Requirement
60
+ requirement: &70281049179100 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70108860872240
68
+ version_requirements: *70281049179100
69
69
  description: a basic ruby wrapper for the methods provided by the fastbill API
70
70
  email:
71
71
  - kai@4ware.net