xero-ruby 3.6.0 → 3.8.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.
@@ -0,0 +1,254 @@
1
+ =begin
2
+ #Xero Finance API
3
+
4
+ #The Finance API is a collection of endpoints which customers can use in the course of a loan application, which may assist lenders to gain the confidence they need to provide capital.
5
+
6
+ Contact: api@xero.com
7
+ Generated by: https://openapi-generator.tech
8
+ OpenAPI Generator version: 4.3.1
9
+
10
+ =end
11
+
12
+ require 'time'
13
+ require 'date'
14
+
15
+ module XeroRuby::Finance
16
+ require 'bigdecimal'
17
+
18
+ class PrepaymentResponse
19
+ # Xero Identifier of prepayment
20
+ attr_accessor :prepayment_id
21
+
22
+
23
+ attr_accessor :contact
24
+
25
+ # Total of Invoice tax inclusive (i.e. SubTotal + TotalTax); Not included in summary mode
26
+ attr_accessor :total
27
+
28
+ # Not included in summary mode
29
+ attr_accessor :line_items
30
+
31
+ # Attribute mapping from ruby-style variable name to JSON key.
32
+ def self.attribute_map
33
+ {
34
+ :'prepayment_id' => :'prepaymentId',
35
+ :'contact' => :'contact',
36
+ :'total' => :'total',
37
+ :'line_items' => :'lineItems'
38
+ }
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'prepayment_id' => :'String',
45
+ :'contact' => :'ContactResponse',
46
+ :'total' => :'BigDecimal',
47
+ :'line_items' => :'Array<LineItemResponse>'
48
+ }
49
+ end
50
+
51
+ # Initializes the object
52
+ # @param [Hash] attributes Model attributes in the form of hash
53
+ def initialize(attributes = {})
54
+ if (!attributes.is_a?(Hash))
55
+ fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Finance::PrepaymentResponse` initialize method"
56
+ end
57
+
58
+ # check to see if the attribute exists and convert string to symbol for hash key
59
+ attributes = attributes.each_with_object({}) { |(k, v), h|
60
+ if (!self.class.attribute_map.key?(k.to_sym))
61
+ fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Finance::PrepaymentResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
62
+ end
63
+ h[k.to_sym] = v
64
+ }
65
+
66
+ if attributes.key?(:'prepayment_id')
67
+ self.prepayment_id = attributes[:'prepayment_id']
68
+ end
69
+
70
+ if attributes.key?(:'contact')
71
+ self.contact = attributes[:'contact']
72
+ end
73
+
74
+ if attributes.key?(:'total')
75
+ self.total = attributes[:'total']
76
+ end
77
+
78
+ if attributes.key?(:'line_items')
79
+ if (value = attributes[:'line_items']).is_a?(Array)
80
+ self.line_items = value
81
+ end
82
+ end
83
+ end
84
+
85
+ # Show invalid properties with the reasons. Usually used together with valid?
86
+ # @return Array for valid properties with the reasons
87
+ def list_invalid_properties
88
+ invalid_properties = Array.new
89
+ invalid_properties
90
+ end
91
+
92
+ # Check to see if the all the properties in the model are valid
93
+ # @return true if the model is valid
94
+ def valid?
95
+ true
96
+ end
97
+
98
+ # Checks equality by comparing each attribute.
99
+ # @param [Object] Object to be compared
100
+ def ==(o)
101
+ return true if self.equal?(o)
102
+ self.class == o.class &&
103
+ prepayment_id == o.prepayment_id &&
104
+ contact == o.contact &&
105
+ total == o.total &&
106
+ line_items == o.line_items
107
+ end
108
+
109
+ # @see the `==` method
110
+ # @param [Object] Object to be compared
111
+ def eql?(o)
112
+ self == o
113
+ end
114
+
115
+ # Calculates hash code according to all attributes.
116
+ # @return [Integer] Hash code
117
+ def hash
118
+ [prepayment_id, contact, total, line_items].hash
119
+ end
120
+
121
+ # Builds the object from hash
122
+ # @param [Hash] attributes Model attributes in the form of hash
123
+ # @return [Object] Returns the model itself
124
+ def self.build_from_hash(attributes)
125
+ new.build_from_hash(attributes)
126
+ end
127
+
128
+ # Builds the object from hash
129
+ # @param [Hash] attributes Model attributes in the form of hash
130
+ # @return [Object] Returns the model itself
131
+ def build_from_hash(attributes)
132
+ return nil unless attributes.is_a?(Hash)
133
+ self.class.openapi_types.each_pair do |key, type|
134
+ if type =~ /\AArray<(.*)>/i
135
+ # check to ensure the input is an array given that the attribute
136
+ # is documented as an array but the input is not
137
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
138
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
139
+ end
140
+ elsif !attributes[self.class.attribute_map[key]].nil?
141
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
142
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
143
+ end
144
+
145
+ self
146
+ end
147
+
148
+ # Deserializes the data based on type
149
+ # @param string type Data type
150
+ # @param string value Value to be deserialized
151
+ # @return [Object] Deserialized data
152
+ def _deserialize(type, value)
153
+ case type.to_sym
154
+ when :DateTime
155
+ DateTime.parse(parse_date(value))
156
+ when :Date
157
+ Date.parse(parse_date(value))
158
+ when :String
159
+ value.to_s
160
+ when :Integer
161
+ value.to_i
162
+ when :Float
163
+ value.to_f
164
+ when :BigDecimal
165
+ BigDecimal(value.to_s)
166
+ when :Boolean
167
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
168
+ true
169
+ else
170
+ false
171
+ end
172
+ when :Object
173
+ # generic object (usually a Hash), return directly
174
+ value
175
+ when /\AArray<(?<inner_type>.+)>\z/
176
+ inner_type = Regexp.last_match[:inner_type]
177
+ value.map { |v| _deserialize(inner_type, v) }
178
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
179
+ k_type = Regexp.last_match[:k_type]
180
+ v_type = Regexp.last_match[:v_type]
181
+ {}.tap do |hash|
182
+ value.each do |k, v|
183
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
184
+ end
185
+ end
186
+ else # model
187
+ XeroRuby::Finance.const_get(type).build_from_hash(value)
188
+ end
189
+ end
190
+
191
+ # Returns the string representation of the object
192
+ # @return [String] String presentation of the object
193
+ def to_s
194
+ to_hash.to_s
195
+ end
196
+
197
+ # to_body is an alias to to_hash (backward compatibility)
198
+ # @return [Hash] Returns the object in the form of hash
199
+ def to_body
200
+ to_hash
201
+ end
202
+
203
+ # Returns the object in the form of hash
204
+ # @return [Hash] Returns the object in the form of hash
205
+ def to_hash(downcase: false)
206
+ hash = {}
207
+ self.class.attribute_map.each_pair do |attr, param|
208
+ value = self.send(attr)
209
+ next if value.nil?
210
+ key = downcase ? attr : param
211
+ hash[key] = _to_hash(value, downcase: downcase)
212
+ end
213
+ hash
214
+ end
215
+
216
+ # Returns the object in the form of hash with snake_case
217
+ def to_attributes
218
+ to_hash(downcase: true)
219
+ end
220
+
221
+ # Outputs non-array value in the form of hash
222
+ # For object, use to_hash. Otherwise, just return the value
223
+ # @param [Object] value Any valid value
224
+ # @return [Hash] Returns the value in the form of hash
225
+ def _to_hash(value, downcase: false)
226
+ if value.is_a?(Array)
227
+ value.map do |v|
228
+ v.to_hash(downcase: downcase)
229
+ end
230
+ elsif value.is_a?(Hash)
231
+ {}.tap do |hash|
232
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
233
+ end
234
+ elsif value.respond_to? :to_hash
235
+ value.to_hash(downcase: downcase)
236
+ else
237
+ value
238
+ end
239
+ end
240
+
241
+ def parse_date(datestring)
242
+ if datestring.include?('Date')
243
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
244
+ original, date, timezone = *date_pattern.match(datestring)
245
+ date = (date.to_i / 1000)
246
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
247
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
248
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
249
+ else # handle date 'types' for small subset of payroll API's
250
+ Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
251
+ end
252
+ end
253
+ end
254
+ end
@@ -15,10 +15,15 @@ require 'date'
15
15
  module XeroRuby::Finance
16
16
  class ProblemType
17
17
  NOT_SET ||= "NotSet".freeze
18
- INVALID_REQUEST ||= "invalid-request".freeze
18
+ BANK_ACCOUNT_NOT_FOUND ||= "bank-account-not-found".freeze
19
+ INTERNAL_ERROR ||= "internal-error".freeze
19
20
  INVALID_APPLICATION ||= "invalid-application".freeze
21
+ INVALID_REQUEST ||= "invalid-request".freeze
22
+ ORGANISATION_NOT_FOUND ||= "organisation-not-found".freeze
23
+ ORGANISATION_OFFLINE ||= "organisation-offline".freeze
24
+ REQUEST_TIMEOUT ||= "request-timeout".freeze
20
25
  SERVICE_UNAVAILABLE ||= "service-unavailable".freeze
21
- INTERNAL_ERROR ||= "internal-error".freeze
26
+ UNAUTHORIZED ||= "unauthorized".freeze
22
27
 
23
28
  # Builds the enum from string
24
29
  # @param [String] The enum value in the form of the string
@@ -0,0 +1,346 @@
1
+ =begin
2
+ #Xero Finance API
3
+
4
+ #The Finance API is a collection of endpoints which customers can use in the course of a loan application, which may assist lenders to gain the confidence they need to provide capital.
5
+
6
+ Contact: api@xero.com
7
+ Generated by: https://openapi-generator.tech
8
+ OpenAPI Generator version: 4.3.1
9
+
10
+ =end
11
+
12
+ require 'time'
13
+ require 'date'
14
+
15
+ module XeroRuby::Finance
16
+ require 'bigdecimal'
17
+
18
+ class StatementLineResponse
19
+ # Xero Identifier of statement line
20
+ attr_accessor :statement_line_id
21
+
22
+ # Date of when statement line was posted
23
+ attr_accessor :posted_date
24
+
25
+ # Reference description of statement line
26
+ attr_accessor :reference
27
+
28
+ # Notes description of statement line
29
+ attr_accessor :notes
30
+
31
+ # Cheque number of statement line
32
+ attr_accessor :cheque_no
33
+
34
+ # Amount of statement line
35
+ attr_accessor :amount
36
+
37
+ # Transaction date of statement line
38
+ attr_accessor :transaction_date
39
+
40
+ # Type of statement line
41
+ attr_accessor :type
42
+
43
+ # Boolean to show if statement line is reconciled
44
+ attr_accessor :is_reconciled
45
+
46
+ # Boolean to show if statement line is duplicate
47
+ attr_accessor :is_duplicate
48
+
49
+ # Boolean to show if statement line is deleted
50
+ attr_accessor :is_deleted
51
+
52
+ # List of payments associated with reconciled statement lines
53
+ attr_accessor :payments
54
+
55
+ # List of bank transactions associated with reconciled statement lines
56
+ attr_accessor :bank_transactions
57
+
58
+ # Attribute mapping from ruby-style variable name to JSON key.
59
+ def self.attribute_map
60
+ {
61
+ :'statement_line_id' => :'statementLineId',
62
+ :'posted_date' => :'postedDate',
63
+ :'reference' => :'reference',
64
+ :'notes' => :'notes',
65
+ :'cheque_no' => :'chequeNo',
66
+ :'amount' => :'amount',
67
+ :'transaction_date' => :'transactionDate',
68
+ :'type' => :'type',
69
+ :'is_reconciled' => :'isReconciled',
70
+ :'is_duplicate' => :'isDuplicate',
71
+ :'is_deleted' => :'isDeleted',
72
+ :'payments' => :'payments',
73
+ :'bank_transactions' => :'bankTransactions'
74
+ }
75
+ end
76
+
77
+ # Attribute type mapping.
78
+ def self.openapi_types
79
+ {
80
+ :'statement_line_id' => :'String',
81
+ :'posted_date' => :'Date',
82
+ :'reference' => :'String',
83
+ :'notes' => :'String',
84
+ :'cheque_no' => :'String',
85
+ :'amount' => :'BigDecimal',
86
+ :'transaction_date' => :'Date',
87
+ :'type' => :'String',
88
+ :'is_reconciled' => :'Boolean',
89
+ :'is_duplicate' => :'Boolean',
90
+ :'is_deleted' => :'Boolean',
91
+ :'payments' => :'Array<PaymentResponse>',
92
+ :'bank_transactions' => :'Array<BankTransactionResponse>'
93
+ }
94
+ end
95
+
96
+ # Initializes the object
97
+ # @param [Hash] attributes Model attributes in the form of hash
98
+ def initialize(attributes = {})
99
+ if (!attributes.is_a?(Hash))
100
+ fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Finance::StatementLineResponse` initialize method"
101
+ end
102
+
103
+ # check to see if the attribute exists and convert string to symbol for hash key
104
+ attributes = attributes.each_with_object({}) { |(k, v), h|
105
+ if (!self.class.attribute_map.key?(k.to_sym))
106
+ fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Finance::StatementLineResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
107
+ end
108
+ h[k.to_sym] = v
109
+ }
110
+
111
+ if attributes.key?(:'statement_line_id')
112
+ self.statement_line_id = attributes[:'statement_line_id']
113
+ end
114
+
115
+ if attributes.key?(:'posted_date')
116
+ self.posted_date = attributes[:'posted_date']
117
+ end
118
+
119
+ if attributes.key?(:'reference')
120
+ self.reference = attributes[:'reference']
121
+ end
122
+
123
+ if attributes.key?(:'notes')
124
+ self.notes = attributes[:'notes']
125
+ end
126
+
127
+ if attributes.key?(:'cheque_no')
128
+ self.cheque_no = attributes[:'cheque_no']
129
+ end
130
+
131
+ if attributes.key?(:'amount')
132
+ self.amount = attributes[:'amount']
133
+ end
134
+
135
+ if attributes.key?(:'transaction_date')
136
+ self.transaction_date = attributes[:'transaction_date']
137
+ end
138
+
139
+ if attributes.key?(:'type')
140
+ self.type = attributes[:'type']
141
+ end
142
+
143
+ if attributes.key?(:'is_reconciled')
144
+ self.is_reconciled = attributes[:'is_reconciled']
145
+ end
146
+
147
+ if attributes.key?(:'is_duplicate')
148
+ self.is_duplicate = attributes[:'is_duplicate']
149
+ end
150
+
151
+ if attributes.key?(:'is_deleted')
152
+ self.is_deleted = attributes[:'is_deleted']
153
+ end
154
+
155
+ if attributes.key?(:'payments')
156
+ if (value = attributes[:'payments']).is_a?(Array)
157
+ self.payments = value
158
+ end
159
+ end
160
+
161
+ if attributes.key?(:'bank_transactions')
162
+ if (value = attributes[:'bank_transactions']).is_a?(Array)
163
+ self.bank_transactions = value
164
+ end
165
+ end
166
+ end
167
+
168
+ # Show invalid properties with the reasons. Usually used together with valid?
169
+ # @return Array for valid properties with the reasons
170
+ def list_invalid_properties
171
+ invalid_properties = Array.new
172
+ invalid_properties
173
+ end
174
+
175
+ # Check to see if the all the properties in the model are valid
176
+ # @return true if the model is valid
177
+ def valid?
178
+ true
179
+ end
180
+
181
+ # Checks equality by comparing each attribute.
182
+ # @param [Object] Object to be compared
183
+ def ==(o)
184
+ return true if self.equal?(o)
185
+ self.class == o.class &&
186
+ statement_line_id == o.statement_line_id &&
187
+ posted_date == o.posted_date &&
188
+ reference == o.reference &&
189
+ notes == o.notes &&
190
+ cheque_no == o.cheque_no &&
191
+ amount == o.amount &&
192
+ transaction_date == o.transaction_date &&
193
+ type == o.type &&
194
+ is_reconciled == o.is_reconciled &&
195
+ is_duplicate == o.is_duplicate &&
196
+ is_deleted == o.is_deleted &&
197
+ payments == o.payments &&
198
+ bank_transactions == o.bank_transactions
199
+ end
200
+
201
+ # @see the `==` method
202
+ # @param [Object] Object to be compared
203
+ def eql?(o)
204
+ self == o
205
+ end
206
+
207
+ # Calculates hash code according to all attributes.
208
+ # @return [Integer] Hash code
209
+ def hash
210
+ [statement_line_id, posted_date, reference, notes, cheque_no, amount, transaction_date, type, is_reconciled, is_duplicate, is_deleted, payments, bank_transactions].hash
211
+ end
212
+
213
+ # Builds the object from hash
214
+ # @param [Hash] attributes Model attributes in the form of hash
215
+ # @return [Object] Returns the model itself
216
+ def self.build_from_hash(attributes)
217
+ new.build_from_hash(attributes)
218
+ end
219
+
220
+ # Builds the object from hash
221
+ # @param [Hash] attributes Model attributes in the form of hash
222
+ # @return [Object] Returns the model itself
223
+ def build_from_hash(attributes)
224
+ return nil unless attributes.is_a?(Hash)
225
+ self.class.openapi_types.each_pair do |key, type|
226
+ if type =~ /\AArray<(.*)>/i
227
+ # check to ensure the input is an array given that the attribute
228
+ # is documented as an array but the input is not
229
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
230
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
231
+ end
232
+ elsif !attributes[self.class.attribute_map[key]].nil?
233
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
234
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
235
+ end
236
+
237
+ self
238
+ end
239
+
240
+ # Deserializes the data based on type
241
+ # @param string type Data type
242
+ # @param string value Value to be deserialized
243
+ # @return [Object] Deserialized data
244
+ def _deserialize(type, value)
245
+ case type.to_sym
246
+ when :DateTime
247
+ DateTime.parse(parse_date(value))
248
+ when :Date
249
+ Date.parse(parse_date(value))
250
+ when :String
251
+ value.to_s
252
+ when :Integer
253
+ value.to_i
254
+ when :Float
255
+ value.to_f
256
+ when :BigDecimal
257
+ BigDecimal(value.to_s)
258
+ when :Boolean
259
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
260
+ true
261
+ else
262
+ false
263
+ end
264
+ when :Object
265
+ # generic object (usually a Hash), return directly
266
+ value
267
+ when /\AArray<(?<inner_type>.+)>\z/
268
+ inner_type = Regexp.last_match[:inner_type]
269
+ value.map { |v| _deserialize(inner_type, v) }
270
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
271
+ k_type = Regexp.last_match[:k_type]
272
+ v_type = Regexp.last_match[:v_type]
273
+ {}.tap do |hash|
274
+ value.each do |k, v|
275
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
276
+ end
277
+ end
278
+ else # model
279
+ XeroRuby::Finance.const_get(type).build_from_hash(value)
280
+ end
281
+ end
282
+
283
+ # Returns the string representation of the object
284
+ # @return [String] String presentation of the object
285
+ def to_s
286
+ to_hash.to_s
287
+ end
288
+
289
+ # to_body is an alias to to_hash (backward compatibility)
290
+ # @return [Hash] Returns the object in the form of hash
291
+ def to_body
292
+ to_hash
293
+ end
294
+
295
+ # Returns the object in the form of hash
296
+ # @return [Hash] Returns the object in the form of hash
297
+ def to_hash(downcase: false)
298
+ hash = {}
299
+ self.class.attribute_map.each_pair do |attr, param|
300
+ value = self.send(attr)
301
+ next if value.nil?
302
+ key = downcase ? attr : param
303
+ hash[key] = _to_hash(value, downcase: downcase)
304
+ end
305
+ hash
306
+ end
307
+
308
+ # Returns the object in the form of hash with snake_case
309
+ def to_attributes
310
+ to_hash(downcase: true)
311
+ end
312
+
313
+ # Outputs non-array value in the form of hash
314
+ # For object, use to_hash. Otherwise, just return the value
315
+ # @param [Object] value Any valid value
316
+ # @return [Hash] Returns the value in the form of hash
317
+ def _to_hash(value, downcase: false)
318
+ if value.is_a?(Array)
319
+ value.map do |v|
320
+ v.to_hash(downcase: downcase)
321
+ end
322
+ elsif value.is_a?(Hash)
323
+ {}.tap do |hash|
324
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
325
+ end
326
+ elsif value.respond_to? :to_hash
327
+ value.to_hash(downcase: downcase)
328
+ else
329
+ value
330
+ end
331
+ end
332
+
333
+ def parse_date(datestring)
334
+ if datestring.include?('Date')
335
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
336
+ original, date, timezone = *date_pattern.match(datestring)
337
+ date = (date.to_i / 1000)
338
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
339
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
340
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
341
+ else # handle date 'types' for small subset of payroll API's
342
+ Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
343
+ end
344
+ end
345
+ end
346
+ end