fastbill 0.0.6 → 0.0.7

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.
@@ -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