clearbooks 0.16.3
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.
- checksums.yaml +7 -0
- data/AUTHORS.md +31 -0
- data/CHANGELOG.md +0 -0
- data/COPYING.md +12 -0
- data/FAQ.md +8 -0
- data/Gemfile +105 -0
- data/LICENSE.md +14 -0
- data/MAINTAINERS.md +40 -0
- data/README.md +549 -0
- data/Rakefile +94 -0
- data/Thorfile +80 -0
- data/bin/clearbooks +28 -0
- data/clearbooks.gemspec +119 -0
- data/examples/demo.rb +8 -0
- data/lib/clearbooks.rb +92 -0
- data/lib/clearbooks/core_ext.rb +8 -0
- data/lib/clearbooks/core_ext/array.rb +51 -0
- data/lib/clearbooks/core_ext/hash.rb +47 -0
- data/lib/clearbooks/core_ext/io_binary_read.rb +20 -0
- data/lib/clearbooks/core_ext/string.rb +21 -0
- data/lib/clearbooks/error.rb +8 -0
- data/lib/clearbooks/error/errors.rb +228 -0
- data/lib/clearbooks/interface/rake/cucumber.rb +36 -0
- data/lib/clearbooks/interface/rake/default.rb +28 -0
- data/lib/clearbooks/interface/rake/documentation.rb +45 -0
- data/lib/clearbooks/interface/rake/guard.rb +13 -0
- data/lib/clearbooks/interface/rake/helpers.rb +27 -0
- data/lib/clearbooks/interface/rake/library.rb +126 -0
- data/lib/clearbooks/interface/rake/metric.rb +15 -0
- data/lib/clearbooks/interface/rake/rspec.rb +31 -0
- data/lib/clearbooks/interface/thor/info.thor +292 -0
- data/lib/clearbooks/interface/thor/mixin/config_choice.rb +27 -0
- data/lib/clearbooks/interface/thor/mixin/configuration.rb +28 -0
- data/lib/clearbooks/interface/thor/mixin/default.rb +30 -0
- data/lib/clearbooks/interface/thor/mixin/default_config.rb +31 -0
- data/lib/clearbooks/interface/thor/mixin/guess.rb +57 -0
- data/lib/clearbooks/interface/thor/mixin/shell.rb +225 -0
- data/lib/clearbooks/interface/thor/version.thor +34 -0
- data/lib/clearbooks/library/client.rb +257 -0
- data/lib/clearbooks/library/configuration.rb +34 -0
- data/lib/clearbooks/model/account_code.rb +65 -0
- data/lib/clearbooks/model/base.rb +67 -0
- data/lib/clearbooks/model/entity.rb +225 -0
- data/lib/clearbooks/model/invoice.rb +163 -0
- data/lib/clearbooks/model/item.rb +78 -0
- data/lib/clearbooks/model/journal.rb +74 -0
- data/lib/clearbooks/model/ledger.rb +52 -0
- data/lib/clearbooks/model/payment.rb +113 -0
- data/lib/clearbooks/model/project.rb +58 -0
- data/lib/clearbooks/version.rb +12 -0
- data/spec/clearbooks/clearbooks_spec.rb +27 -0
- data/spec/clearbooks/model/account_code_spec.rb +52 -0
- data/spec/clearbooks/model/entity_spec.rb +107 -0
- data/spec/clearbooks/model/invoice_spec.rb +109 -0
- data/spec/clearbooks/model/journal_spec.rb +77 -0
- data/spec/clearbooks/model/payment_spec.rb +103 -0
- data/spec/clearbooks/model/project_spec.rb +72 -0
- data/spec/fixtures/response/allocate_payment.xml +12 -0
- data/spec/fixtures/response/create_entity.xml +12 -0
- data/spec/fixtures/response/create_invoice.xml +11 -0
- data/spec/fixtures/response/create_journal.xml +12 -0
- data/spec/fixtures/response/create_payment.xml +12 -0
- data/spec/fixtures/response/create_project.xml +12 -0
- data/spec/fixtures/response/delete_entity.xml +12 -0
- data/spec/fixtures/response/delete_journal.xml +12 -0
- data/spec/fixtures/response/list_account_codes.xml +168 -0
- data/spec/fixtures/response/list_entities.xml +45 -0
- data/spec/fixtures/response/list_invoices.xml +56 -0
- data/spec/fixtures/response/list_projects.xml +16 -0
- data/spec/fixtures/response/no_api_key_fault.xml +8 -0
- data/spec/fixtures/response/well_formed_request.xml +10 -0
- data/spec/fixtures/response/wrong_api_key_fault.xml +8 -0
- data/spec/spec_helper.rb +26 -0
- metadata +212 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# System include
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
|
7
|
+
# @module Clearbooks
|
8
|
+
# @brief Handles Ruby idomatic expression of Clear Books SOAP API
|
9
|
+
module Clearbooks
|
10
|
+
|
11
|
+
# @class Configuration
|
12
|
+
# @brief Handles configurations of clearbooks gem such as api keys
|
13
|
+
class Configuration
|
14
|
+
|
15
|
+
attr_accessor :api_key, :wsdl, :log, :logger
|
16
|
+
|
17
|
+
# @fn def initialize
|
18
|
+
# @brief Constructor for Clearbooks::Configuration class objects
|
19
|
+
def initialize
|
20
|
+
defaults = YAML.load_file(DEFAULT_CONFIG) rescue nil
|
21
|
+
defaults ||= YAML.load_file(File.expand_path("~/#{DEFAULT_CONFIG}")) rescue Hash.new
|
22
|
+
|
23
|
+
@api_key = ENV['CLEARBOOKS_API_KEY'] || defaults['api_key']
|
24
|
+
@wsdl = defaults['wsdl'] || 'https://secure.clearbooks.co.uk/api/wsdl/'
|
25
|
+
@logger = Logger.new(STDOUT) if @log = defaults['log']
|
26
|
+
|
27
|
+
self
|
28
|
+
end # }}}
|
29
|
+
|
30
|
+
end # of module Configuration
|
31
|
+
|
32
|
+
end # of module Clearbooks
|
33
|
+
|
34
|
+
# vim:ts=2:tw=100:wm=100:syntax=ruby
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
|
4
|
+
# @module Clearbooks
|
5
|
+
# @brief Handles Ruby idomatic expression of Clear Books SOAP API
|
6
|
+
module Clearbooks
|
7
|
+
|
8
|
+
# @class Clearbooks AccountCode model
|
9
|
+
# @brief Used to get list of available account codes.
|
10
|
+
#
|
11
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
12
|
+
class AccountCode < Base
|
13
|
+
|
14
|
+
attr_reader :id, :account_name, :group_name, :default_vat_rate, :show_sales, :show_purchases
|
15
|
+
|
16
|
+
# @!attribute [r] id
|
17
|
+
# Optional. The internal id of the account code.
|
18
|
+
# @return [Fixnum]
|
19
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
20
|
+
|
21
|
+
# @!attribute [r] account_name
|
22
|
+
# Optional.
|
23
|
+
# @return [String]
|
24
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
25
|
+
|
26
|
+
# @!attribute [r] group_name
|
27
|
+
# Optional. The name of the group the account code is assigned to.
|
28
|
+
# @return [String]
|
29
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
30
|
+
|
31
|
+
# @!attribute [r] default_vat_rate
|
32
|
+
# Optional.
|
33
|
+
# @return [String]
|
34
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
35
|
+
|
36
|
+
# @!attribute [r] show_sales
|
37
|
+
# Optional. Boolean value of whether the account code shows in the sales invoice form.
|
38
|
+
# @return [Boolean]
|
39
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
40
|
+
|
41
|
+
# @!attribute [r] show_purchases
|
42
|
+
# Optional. Boolean value of whether the account code shows in the purchase invoice form.
|
43
|
+
# @return [Boolean]
|
44
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
45
|
+
|
46
|
+
# @fn def initialize data {{{
|
47
|
+
# @brief Constructor for AccountCode model
|
48
|
+
#
|
49
|
+
# @param [Hash] data Account code attributes. See https://www.clearbooks.co.uk/support/api/docs/soap/listaccountcodes/
|
50
|
+
def initialize data
|
51
|
+
@id = data.savon(:id).to_i
|
52
|
+
@account_name = data.savon :account_name
|
53
|
+
@group_name = data.savon :group_name
|
54
|
+
|
55
|
+
@default_vat_rate = data.savon :default_vat_rate
|
56
|
+
|
57
|
+
@show_sales = data.savon(:show_sales).to_b
|
58
|
+
@show_purchases = data.savon(:show_purchases).to_b
|
59
|
+
end # }}}
|
60
|
+
|
61
|
+
end # of class AccountCode
|
62
|
+
|
63
|
+
end # of module Clearbooks
|
64
|
+
|
65
|
+
# vim:ts=2:tw=100:wm=100:syntax=ruby
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
|
4
|
+
# @module Clearbooks
|
5
|
+
# @brief Handles Ruby idomatic expression of Clear Books SOAP API
|
6
|
+
module Clearbooks
|
7
|
+
|
8
|
+
# @class Base class for Clearbooks API models
|
9
|
+
# @brief Implements common operations related to Savon and SOAP
|
10
|
+
class Base
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
# @fn def build {{{
|
15
|
+
# @brief Builds an array of items from a hash returned by Savon
|
16
|
+
#
|
17
|
+
# @param [Array] data An array of hashes representing collection or a hash representing a single item
|
18
|
+
#
|
19
|
+
# @return [Array] List of items that represent collection from hash returned by Savon
|
20
|
+
#
|
21
|
+
# @note Still returns an array when called with a hash representing a single item.
|
22
|
+
def build data
|
23
|
+
unless data.is_a? Array
|
24
|
+
[ create(data) ]
|
25
|
+
else
|
26
|
+
return data.map { |d| create(d) }
|
27
|
+
end
|
28
|
+
end # }}}
|
29
|
+
|
30
|
+
# @fn def create {{{
|
31
|
+
# @brief Creates an item from a hash returned by Savon
|
32
|
+
#
|
33
|
+
# @param [Hash] data Hash representing a single object returned by Savon
|
34
|
+
#
|
35
|
+
# @return [Object] An item instantiated from a hash returned by Savon
|
36
|
+
def create data
|
37
|
+
if data.is_a? Hash
|
38
|
+
new data
|
39
|
+
else
|
40
|
+
data
|
41
|
+
end
|
42
|
+
end # }}}
|
43
|
+
|
44
|
+
end # of class << self
|
45
|
+
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
# @fn def parse_date date {{{
|
50
|
+
# @brief Parses a given date in expected form from upstream API
|
51
|
+
#
|
52
|
+
# @param [String] date Date string to parse
|
53
|
+
#
|
54
|
+
# @return [Date] Returns Date or DateTime from string parsing result
|
55
|
+
def parse_date date
|
56
|
+
if date.nil? || date.is_a?(Date)
|
57
|
+
date
|
58
|
+
else
|
59
|
+
DateTime.strptime date, '%Y-%m-%d %H:%M:%S'
|
60
|
+
end
|
61
|
+
end # }}}
|
62
|
+
|
63
|
+
end # of class Base
|
64
|
+
|
65
|
+
end # of module Clearbooks
|
66
|
+
|
67
|
+
# vim:ts=2:tw=100:wm=100:syntax=ruby
|
@@ -0,0 +1,225 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @module Clearbooks
|
4
|
+
# @brief Handles Ruby idomatic expression of Clear Books SOAP API
|
5
|
+
module Clearbooks
|
6
|
+
|
7
|
+
# @class Clearbooks Entity model
|
8
|
+
# @brief Used to list existing entities or create new.
|
9
|
+
#
|
10
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
11
|
+
class Entity < Base
|
12
|
+
|
13
|
+
attr_reader :id,
|
14
|
+
:company_name, # string required
|
15
|
+
:contact_name, # string optional
|
16
|
+
:building, # string optional
|
17
|
+
:address1, # string optional
|
18
|
+
:address2, # string optional
|
19
|
+
:town, # string optional
|
20
|
+
:county, # string optional
|
21
|
+
:country, # string optional
|
22
|
+
# country codes http://www.iso.org/iso/support/country_codes/iso_3166_code_lists/iso-3166-1_decoding_table.htm
|
23
|
+
:postcode, # string optional
|
24
|
+
:email, # string optional
|
25
|
+
:phone1, # string optional
|
26
|
+
:phone2, # string optional
|
27
|
+
:fax, # string optional
|
28
|
+
:website, # string optional
|
29
|
+
:external_id, # integer optional
|
30
|
+
:statement_url,
|
31
|
+
:supplier,
|
32
|
+
# default_account_code string optional
|
33
|
+
# default_vat_rate string optional
|
34
|
+
# default_credit_terms integer optional
|
35
|
+
:customer
|
36
|
+
# default_account_code string optional
|
37
|
+
# default_vat_rate string optional
|
38
|
+
# default_credit_terms integer optional
|
39
|
+
|
40
|
+
# @!attribute [r] id
|
41
|
+
# @return [Fixnum] Entity Id.
|
42
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
43
|
+
|
44
|
+
# @!attribute [r] statement_url
|
45
|
+
# @return [String] The URL the customer/supplier can access to view statements.
|
46
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
47
|
+
|
48
|
+
# @!attribute [r] company_name
|
49
|
+
# Optional.
|
50
|
+
# @return [String]
|
51
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
52
|
+
|
53
|
+
# @!attribute [r] contact_name
|
54
|
+
# Optional.
|
55
|
+
# @return [String]
|
56
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
57
|
+
|
58
|
+
# @!attribute [r] building
|
59
|
+
# Optional.
|
60
|
+
# @return [String]
|
61
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
62
|
+
|
63
|
+
# @!attribute [r] address1
|
64
|
+
# Optional.
|
65
|
+
# @return [String]
|
66
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
67
|
+
|
68
|
+
# @!attribute [r] address2
|
69
|
+
# Optional.
|
70
|
+
# @return [String]
|
71
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
72
|
+
|
73
|
+
# @!attribute [r] town
|
74
|
+
# Optional.
|
75
|
+
# @return [String]
|
76
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
77
|
+
|
78
|
+
# @!attribute [r] county
|
79
|
+
# Optional.
|
80
|
+
# @return [String]
|
81
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
82
|
+
|
83
|
+
# @!attribute [r] country
|
84
|
+
# Optional. Country code.
|
85
|
+
# @return [String]
|
86
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
87
|
+
|
88
|
+
# @!attribute [r] postcode
|
89
|
+
# Optional.
|
90
|
+
# @return [String]
|
91
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
92
|
+
|
93
|
+
# @!attribute [r] email
|
94
|
+
# Optional.
|
95
|
+
# @return [String]
|
96
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
97
|
+
|
98
|
+
# @!attribute [r] phone1
|
99
|
+
# Optional.
|
100
|
+
# @return [String]
|
101
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
102
|
+
|
103
|
+
# @!attribute [r] phone2
|
104
|
+
# Optional.
|
105
|
+
# @return [String]
|
106
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
107
|
+
|
108
|
+
# @!attribute [r] fax
|
109
|
+
# Optional.
|
110
|
+
# @return [String]
|
111
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
112
|
+
|
113
|
+
# @!attribute [r] website
|
114
|
+
# Optional.
|
115
|
+
# @return [String]
|
116
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
117
|
+
|
118
|
+
# @!attribute [r] external_id
|
119
|
+
# Optional.
|
120
|
+
# @return [Fixnum]
|
121
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
122
|
+
|
123
|
+
# @!attribute [r] supplier
|
124
|
+
# Optional. [:default_account_code, :default_vat_rate, :default_credit_terms]
|
125
|
+
# @return [Hash]
|
126
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
127
|
+
|
128
|
+
# @!attribute [r] customer
|
129
|
+
# Optional. [:default_account_code, :default_vat_rate, :default_credit_terms]
|
130
|
+
# @return [Hash]
|
131
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
132
|
+
|
133
|
+
|
134
|
+
# @fn def initialize data {{{
|
135
|
+
# @brief Constructor of Entity class handling entity ie. personal data
|
136
|
+
#
|
137
|
+
# @param [Hash] data Entity attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createentity/
|
138
|
+
#
|
139
|
+
def initialize data
|
140
|
+
@id = data.savon(:id).to_i
|
141
|
+
@company_name = data.savon :company_name
|
142
|
+
@contact_name = data.savon :contact_name
|
143
|
+
|
144
|
+
@building = data.savon :building
|
145
|
+
@address1 = data.savon :address1
|
146
|
+
@address2 = data.savon :address2
|
147
|
+
@town = data.savon :town
|
148
|
+
@county = data.savon :county
|
149
|
+
@country = data.savon :country
|
150
|
+
@postcode = data.savon :postcode
|
151
|
+
|
152
|
+
@email = data.savon :email
|
153
|
+
@phone1 = data.savon :phone1
|
154
|
+
@phone2 = data.savon :phone2
|
155
|
+
@fax = data.savon :fax
|
156
|
+
@website = data.savon :website
|
157
|
+
|
158
|
+
@statement_url = data.savon :statement_url
|
159
|
+
@external_id = data.savon(:external_id).to_i
|
160
|
+
|
161
|
+
@supplier = entity_extra data.savon :supplier
|
162
|
+
@supplier = @supplier.from_savon if @supplier
|
163
|
+
|
164
|
+
@customer = entity_extra data.savon :customer
|
165
|
+
@customer = @customer.from_savon if @customer
|
166
|
+
|
167
|
+
end # }}}
|
168
|
+
|
169
|
+
# @fn def to_savon {{{
|
170
|
+
# @brief Converts given Entity (self) to savon readable format
|
171
|
+
#
|
172
|
+
# @return [Hash] Returns self as Savon readable Hash
|
173
|
+
def to_savon
|
174
|
+
{
|
175
|
+
entity: {
|
176
|
+
:@company_name => @company_name,
|
177
|
+
:@contact_name => @contact_name,
|
178
|
+
|
179
|
+
:@building => @building,
|
180
|
+
:@address1 => @address1,
|
181
|
+
:@address2 => @address2,
|
182
|
+
:@town => @town,
|
183
|
+
:@county => @county,
|
184
|
+
:@country => @country,
|
185
|
+
:@postcode => @postcode,
|
186
|
+
|
187
|
+
:@email => @email,
|
188
|
+
:@phone1 => @phone1,
|
189
|
+
:@phone2 => @phone2,
|
190
|
+
:@fax => @fax,
|
191
|
+
:@website => @website,
|
192
|
+
|
193
|
+
:@external_id => @external_id,
|
194
|
+
:supplier => entity_extra(@supplier),
|
195
|
+
:customer => entity_extra(@customer)
|
196
|
+
}.compact
|
197
|
+
}
|
198
|
+
end # }}}
|
199
|
+
|
200
|
+
|
201
|
+
private
|
202
|
+
|
203
|
+
# @fn def entity_extra extra {{{
|
204
|
+
# @brief Convert supplier/customer attributes to Savon readable format.
|
205
|
+
#
|
206
|
+
# @param [Hash] extra Supplier or customer attributes.
|
207
|
+
#
|
208
|
+
# @return [Hash] Supplier/customer attributes in Savon readable format
|
209
|
+
def entity_extra extra
|
210
|
+
if extra
|
211
|
+
{
|
212
|
+
:@default_account_code => extra[:default_account_code],
|
213
|
+
:@default_vat_rate => extra[:default_vat_rate],
|
214
|
+
:@default_credit_terms => extra[:default_credit_terms].to_i,
|
215
|
+
}.compact
|
216
|
+
end
|
217
|
+
end # }}}
|
218
|
+
|
219
|
+
|
220
|
+
end # of class Entity
|
221
|
+
|
222
|
+
end # of module Clearbooks
|
223
|
+
|
224
|
+
|
225
|
+
# vim:ts=2:tw=100:wm=100:syntax=ruby
|
@@ -0,0 +1,163 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
|
4
|
+
# @module Clearbooks
|
5
|
+
# @brief Handles Ruby idomatic expression of Clear Books SOAP API
|
6
|
+
module Clearbooks
|
7
|
+
|
8
|
+
# @class Clearbooks Invoice model
|
9
|
+
# @brief Used to list existing invoices or create new.
|
10
|
+
#
|
11
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
12
|
+
class Invoice < Base
|
13
|
+
|
14
|
+
attr_reader :invoice_id, :date_created, :date_due, :date_accrual, :credit_terms, :description,
|
15
|
+
:entity_id, :reference, :project, :status, :invoice_prefix,
|
16
|
+
:invoice_number, :external_id, :statement_page, :date_modified, :items, :type, :bank_payment_id
|
17
|
+
|
18
|
+
# @!attribute [r] invoice_id
|
19
|
+
# @return [Fixnum] Invoice Id.
|
20
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
21
|
+
|
22
|
+
# @!attribute [r] date_created
|
23
|
+
# Required. The tax point of the invoice.
|
24
|
+
# @return [DateTime]
|
25
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
26
|
+
|
27
|
+
# @!attribute [r] date_due
|
28
|
+
# Required. The date the invoice is due.
|
29
|
+
# Use either this field or creditTerms.
|
30
|
+
# @return [DateTime]
|
31
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
32
|
+
|
33
|
+
# @!attribute [r] date_accrual
|
34
|
+
# Optional. The invoice accrual date.
|
35
|
+
# @return [DateTime]
|
36
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
37
|
+
|
38
|
+
# @!attribute [r] credit_terms
|
39
|
+
# Required. The number of days after the tax point that the invoice is due.
|
40
|
+
# @return [Fixnum]
|
41
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
42
|
+
|
43
|
+
# @!attribute [r] description
|
44
|
+
# Optional.
|
45
|
+
# @return [String]
|
46
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
47
|
+
|
48
|
+
# @!attribute [r] entity_id
|
49
|
+
# Required. The customer or supplier id.
|
50
|
+
# @return [Fixnum]
|
51
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
52
|
+
|
53
|
+
# @!attribute [r] reference
|
54
|
+
# Optional. A reference string for the invoice.
|
55
|
+
# @return [String]
|
56
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
57
|
+
|
58
|
+
# @!attribute [r] project
|
59
|
+
# Optional. The id of the project to assign the invoice to.
|
60
|
+
# @return [Fixnum]
|
61
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
62
|
+
|
63
|
+
# @!attribute [r] type
|
64
|
+
# Optional. A string identifying the type of the invoice.
|
65
|
+
# Value one of: purchases, sales, cn-sales, cn-purchases.
|
66
|
+
# @return [String]
|
67
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
68
|
+
|
69
|
+
# @!attribute [r] bank_payment_id
|
70
|
+
# Optional. The bank account code.
|
71
|
+
# @return [Fixnum]
|
72
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
73
|
+
|
74
|
+
# @!attribute [r] date_modified
|
75
|
+
# @return [DateTime] Date this invoice was last modified.
|
76
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
77
|
+
|
78
|
+
# @!attribute [r] external_id
|
79
|
+
# @return [Fixnum] Id used to link imported invoices.
|
80
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
81
|
+
|
82
|
+
# @!attribute [r] invoice_number
|
83
|
+
# @return [String] Invoice number.
|
84
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
85
|
+
|
86
|
+
# @!attribute [r] items
|
87
|
+
# Required.
|
88
|
+
# @return [Item] A list of item elements identifying the line items.
|
89
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
90
|
+
|
91
|
+
# @!attribute [r] statement_page
|
92
|
+
# @return [String] A link to a printable invoice page with a link to download as a PDF (top right corner).
|
93
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
94
|
+
|
95
|
+
# @!attribute [r] status
|
96
|
+
# @return [String] Invoice status: paid, unpaid.
|
97
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
98
|
+
|
99
|
+
# @!attribute [r] invoice_prefix
|
100
|
+
# @return [String] Invoice prefix.
|
101
|
+
# @see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
102
|
+
|
103
|
+
|
104
|
+
# @fn def initialize data {{{
|
105
|
+
# @brief Constructor for Invoice model
|
106
|
+
#
|
107
|
+
# @param [Hash] data Invoice attributes. For the list of available options see https://www.clearbooks.co.uk/support/api/docs/soap/createinvoice/
|
108
|
+
def initialize data
|
109
|
+
@invoice_id = data.savon(:invoice_id).to_i
|
110
|
+
|
111
|
+
@date_created = parse_date data.savon(:date_created)
|
112
|
+
@date_due = parse_date data.savon(:date_due)
|
113
|
+
|
114
|
+
@credit_terms = data.savon(:credit_terms).to_i
|
115
|
+
@description = data.savon :description
|
116
|
+
|
117
|
+
@entity_id = data.savon(:entity_id).to_i
|
118
|
+
@reference = data.savon :reference
|
119
|
+
@project = data.savon(:project).to_i
|
120
|
+
@status = data.savon :status
|
121
|
+
|
122
|
+
@invoice_prefix = data.savon :invoice_prefix
|
123
|
+
@invoice_number = data.savon :invoice_number
|
124
|
+
@external_id = data.savon(:external_id).to_i
|
125
|
+
@statement_page = data.savon :statement_page
|
126
|
+
|
127
|
+
@date_modified = parse_date data.savon(:date_modified)
|
128
|
+
@date_accrual = parse_date data.savon(:date_accrual)
|
129
|
+
|
130
|
+
@type = data.savon(:type)
|
131
|
+
@bank_payment_id = data.savon(:bank_payment_id).to_i
|
132
|
+
|
133
|
+
@items = Item.build( data[:items].is_a?(Array) ? data[:items] : data[:items][:item] )
|
134
|
+
end # }}}
|
135
|
+
|
136
|
+
# @fn def to_savon {{{
|
137
|
+
# @brief Converts given Invoice (self) to savon readable format
|
138
|
+
#
|
139
|
+
# @return [Hash] Returns self as Savon readable Hash
|
140
|
+
def to_savon
|
141
|
+
{
|
142
|
+
invoice: {
|
143
|
+
:@dateCreated => @date_created,
|
144
|
+
:@entityId => @entity_id,
|
145
|
+
:@type => @type,
|
146
|
+
:@dateDue => @date_due,
|
147
|
+
:@dateAccural => @date_accural,
|
148
|
+
:@creditTerms => @credit_terms,
|
149
|
+
:@reference => @reference,
|
150
|
+
:@project => @project,
|
151
|
+
|
152
|
+
description: @description,
|
153
|
+
items: { item: items.map(&:to_savon) }
|
154
|
+
}
|
155
|
+
}
|
156
|
+
end # }}}
|
157
|
+
|
158
|
+
|
159
|
+
end # of class Invoice
|
160
|
+
|
161
|
+
end # of module Clearbooks
|
162
|
+
|
163
|
+
# vim:ts=2:tw=100:wm=100:syntax=ruby
|