dear-inventory-ruby 0.1.16 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -10
  3. data/README.md +32 -7
  4. data/dear-inventory-ruby.gemspec +1 -1
  5. data/docs/Address.md +10 -12
  6. data/docs/Customer.md +1 -1
  7. data/docs/ExternalHeader.md +19 -0
  8. data/docs/InventoryApi.md +1021 -161
  9. data/docs/Me.md +1 -1
  10. data/docs/SaleAdditionalCharge.md +31 -0
  11. data/docs/SaleInvoice.md +1 -1
  12. data/docs/SaleInvoiceAdditionalCharge.md +3 -3
  13. data/docs/SaleInvoiceDelete.md +19 -0
  14. data/docs/SaleInvoiceLine.md +2 -2
  15. data/docs/SaleInvoicePost.md +41 -0
  16. data/docs/SaleOrder.md +35 -0
  17. data/docs/SaleOrderLine.md +41 -0
  18. data/docs/SalePayment.md +43 -0
  19. data/docs/SaleQuote.md +33 -0
  20. data/docs/SaleQuoteLine.md +37 -0
  21. data/docs/ShippingAddress.md +37 -0
  22. data/docs/SupplierCustomerAddress.md +33 -0
  23. data/docs/Webhook.md +35 -0
  24. data/docs/Webhooks.md +17 -0
  25. data/lib/dear-inventory-ruby/api/inventory_api.rb +988 -119
  26. data/lib/dear-inventory-ruby/models/account.rb +0 -34
  27. data/lib/dear-inventory-ruby/models/address.rb +28 -115
  28. data/lib/dear-inventory-ruby/models/customer.rb +1 -35
  29. data/lib/dear-inventory-ruby/models/external_header.rb +217 -0
  30. data/lib/dear-inventory-ruby/models/me.rb +2 -1
  31. data/lib/dear-inventory-ruby/models/payment_term.rb +0 -34
  32. data/lib/dear-inventory-ruby/models/sale_additional_charge.rb +302 -0
  33. data/lib/dear-inventory-ruby/models/sale_invoice.rb +1 -1
  34. data/lib/dear-inventory-ruby/models/sale_invoice_additional_charge.rb +3 -3
  35. data/lib/dear-inventory-ruby/models/sale_invoice_delete.rb +224 -0
  36. data/lib/dear-inventory-ruby/models/sale_invoice_line.rb +0 -10
  37. data/lib/dear-inventory-ruby/models/sale_invoice_post.rb +361 -0
  38. data/lib/dear-inventory-ruby/models/sale_order.rb +336 -0
  39. data/lib/dear-inventory-ruby/models/sale_order_line.rb +342 -0
  40. data/lib/dear-inventory-ruby/models/sale_payment.rb +337 -0
  41. data/lib/dear-inventory-ruby/models/sale_quote.rb +326 -0
  42. data/lib/dear-inventory-ruby/models/sale_quote_line.rb +322 -0
  43. data/lib/dear-inventory-ruby/models/shipping_address.rb +317 -0
  44. data/lib/dear-inventory-ruby/models/supplier_customer_address.rb +374 -0
  45. data/lib/dear-inventory-ruby/models/webhook.rb +319 -0
  46. data/lib/dear-inventory-ruby/models/webhooks.rb +209 -0
  47. data/lib/dear-inventory-ruby/version.rb +1 -1
  48. data/lib/dear-inventory-ruby.rb +13 -2
  49. data/spec/api/inventory_api_spec.rb +166 -0
  50. data/spec/models/account_spec.rb +0 -4
  51. data/spec/models/address_spec.rb +7 -13
  52. data/spec/models/customer_spec.rb +0 -4
  53. data/spec/models/external_header_spec.rb +47 -0
  54. data/spec/models/payment_term_spec.rb +0 -4
  55. data/spec/models/sale_additional_charge_spec.rb +83 -0
  56. data/spec/models/sale_invoice_delete_spec.rb +47 -0
  57. data/spec/models/sale_invoice_post_spec.rb +113 -0
  58. data/spec/models/sale_order_line_spec.rb +113 -0
  59. data/spec/models/sale_order_spec.rb +95 -0
  60. data/spec/models/sale_payment_spec.rb +119 -0
  61. data/spec/models/sale_quote_line_spec.rb +101 -0
  62. data/spec/models/sale_quote_spec.rb +89 -0
  63. data/spec/models/shipping_address_spec.rb +101 -0
  64. data/spec/models/supplier_customer_address_spec.rb +89 -0
  65. data/spec/models/webhook_spec.rb +95 -0
  66. data/spec/models/{currency_code_spec.rb → webhooks_spec.rb} +12 -6
  67. metadata +63 -14
  68. data/docs/CurrencyCode.md +0 -16
  69. data/docs/DimensionsUnit.md +0 -16
  70. data/lib/dear-inventory-ruby/models/currency_code.rb +0 -196
  71. data/lib/dear-inventory-ruby/models/dimensions_unit.rb +0 -42
  72. data/spec/.DS_Store +0 -0
  73. data/spec/models/dimensions_unit_spec.rb +0 -35
@@ -0,0 +1,342 @@
1
+ =begin
2
+ #DEAR Inventory API
3
+
4
+ #This specifing endpoints for DEAR Inventory API
5
+
6
+ The version of the OpenAPI document: 2.0.0
7
+ Contact: nnhansg@gmail.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module DearInventoryRuby
16
+ class SaleOrderLine
17
+ # Product identifier referenced by this Line. Required If CombineAdditionalCharges param exist for this endpoint and it have values = false
18
+ attr_accessor :product_id
19
+
20
+ # Product SKU referenced by this Line. Required If CombineAdditionalCharges param exist for this endpoint and it have values = false
21
+ attr_accessor :sku
22
+
23
+ # Product Name referenced by this Line
24
+ attr_accessor :name
25
+
26
+ # Product or service quantity. Minimal value is 1.
27
+ attr_accessor :quantity
28
+
29
+ # Price per unit in Customer currency
30
+ attr_accessor :price
31
+
32
+ # Discount. Value between 0 and 100. For free items discount is 100. Default value is 0
33
+ attr_accessor :discount
34
+
35
+ # Tax
36
+ attr_accessor :tax
37
+
38
+ # Average product cost
39
+ attr_accessor :average_cost
40
+
41
+ # Line Tax Rule name.
42
+ attr_accessor :tax_rule
43
+
44
+ # Comment for this line
45
+ attr_accessor :comment
46
+
47
+ # Required if product is not a service with “Optional Drop Ship” mode. Otherwise it ignored.
48
+ attr_accessor :drop_ship
49
+
50
+ # Quantity of the ordered product on backorder. Read Only for POST
51
+ attr_accessor :backorder_quantity
52
+
53
+ # Line Total. For validation
54
+ attr_accessor :total
55
+
56
+ # Attribute mapping from ruby-style variable name to JSON key.
57
+ def self.attribute_map
58
+ {
59
+ :'product_id' => :'ProductID',
60
+ :'sku' => :'SKU',
61
+ :'name' => :'Name',
62
+ :'quantity' => :'Quantity',
63
+ :'price' => :'Price',
64
+ :'discount' => :'Discount',
65
+ :'tax' => :'Tax',
66
+ :'average_cost' => :'AverageCost',
67
+ :'tax_rule' => :'TaxRule',
68
+ :'comment' => :'Comment',
69
+ :'drop_ship' => :'DropShip',
70
+ :'backorder_quantity' => :'BackorderQuantity',
71
+ :'total' => :'Total'
72
+ }
73
+ end
74
+
75
+ # Attribute type mapping.
76
+ def self.openapi_types
77
+ {
78
+ :'product_id' => :'String',
79
+ :'sku' => :'String',
80
+ :'name' => :'String',
81
+ :'quantity' => :'Float',
82
+ :'price' => :'Float',
83
+ :'discount' => :'Float',
84
+ :'tax' => :'Float',
85
+ :'average_cost' => :'Float',
86
+ :'tax_rule' => :'String',
87
+ :'comment' => :'String',
88
+ :'drop_ship' => :'Boolean',
89
+ :'backorder_quantity' => :'Float',
90
+ :'total' => :'Float'
91
+ }
92
+ end
93
+
94
+ # List of attributes with nullable: true
95
+ def self.openapi_nullable
96
+ Set.new([
97
+ ])
98
+ end
99
+
100
+ # Initializes the object
101
+ # @param [Hash] attributes Model attributes in the form of hash
102
+ def initialize(attributes = {})
103
+ if (!attributes.is_a?(Hash))
104
+ fail ArgumentError, "The input argument (attributes) must be a hash in `DearInventoryRuby::SaleOrderLine` initialize method"
105
+ end
106
+
107
+ # check to see if the attribute exists and convert string to symbol for hash key
108
+ attributes = attributes.each_with_object({}) { |(k, v), h|
109
+ if (!self.class.attribute_map.key?(k.to_sym))
110
+ fail ArgumentError, "`#{k}` is not a valid attribute in `DearInventoryRuby::SaleOrderLine`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
111
+ end
112
+ h[k.to_sym] = v
113
+ }
114
+
115
+ if attributes.key?(:'product_id')
116
+ self.product_id = attributes[:'product_id']
117
+ end
118
+
119
+ if attributes.key?(:'sku')
120
+ self.sku = attributes[:'sku']
121
+ end
122
+
123
+ if attributes.key?(:'name')
124
+ self.name = attributes[:'name']
125
+ end
126
+
127
+ if attributes.key?(:'quantity')
128
+ self.quantity = attributes[:'quantity']
129
+ end
130
+
131
+ if attributes.key?(:'price')
132
+ self.price = attributes[:'price']
133
+ end
134
+
135
+ if attributes.key?(:'discount')
136
+ self.discount = attributes[:'discount']
137
+ end
138
+
139
+ if attributes.key?(:'tax')
140
+ self.tax = attributes[:'tax']
141
+ end
142
+
143
+ if attributes.key?(:'average_cost')
144
+ self.average_cost = attributes[:'average_cost']
145
+ end
146
+
147
+ if attributes.key?(:'tax_rule')
148
+ self.tax_rule = attributes[:'tax_rule']
149
+ end
150
+
151
+ if attributes.key?(:'comment')
152
+ self.comment = attributes[:'comment']
153
+ end
154
+
155
+ if attributes.key?(:'drop_ship')
156
+ self.drop_ship = attributes[:'drop_ship']
157
+ end
158
+
159
+ if attributes.key?(:'backorder_quantity')
160
+ self.backorder_quantity = attributes[:'backorder_quantity']
161
+ end
162
+
163
+ if attributes.key?(:'total')
164
+ self.total = attributes[:'total']
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
+ if @name.nil?
173
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
174
+ end
175
+
176
+ if @quantity.nil?
177
+ invalid_properties.push('invalid value for "quantity", quantity cannot be nil.')
178
+ end
179
+
180
+ if @price.nil?
181
+ invalid_properties.push('invalid value for "price", price cannot be nil.')
182
+ end
183
+
184
+ invalid_properties
185
+ end
186
+
187
+ # Check to see if the all the properties in the model are valid
188
+ # @return true if the model is valid
189
+ def valid?
190
+ return false if @name.nil?
191
+ return false if @quantity.nil?
192
+ return false if @price.nil?
193
+ true
194
+ end
195
+
196
+ # Checks equality by comparing each attribute.
197
+ # @param [Object] Object to be compared
198
+ def ==(o)
199
+ return true if self.equal?(o)
200
+ self.class == o.class &&
201
+ product_id == o.product_id &&
202
+ sku == o.sku &&
203
+ name == o.name &&
204
+ quantity == o.quantity &&
205
+ price == o.price &&
206
+ discount == o.discount &&
207
+ tax == o.tax &&
208
+ average_cost == o.average_cost &&
209
+ tax_rule == o.tax_rule &&
210
+ comment == o.comment &&
211
+ drop_ship == o.drop_ship &&
212
+ backorder_quantity == o.backorder_quantity &&
213
+ total == o.total
214
+ end
215
+
216
+ # @see the `==` method
217
+ # @param [Object] Object to be compared
218
+ def eql?(o)
219
+ self == o
220
+ end
221
+
222
+ # Calculates hash code according to all attributes.
223
+ # @return [Integer] Hash code
224
+ def hash
225
+ [product_id, sku, name, quantity, price, discount, tax, average_cost, tax_rule, comment, drop_ship, backorder_quantity, total].hash
226
+ end
227
+
228
+ # Builds the object from hash
229
+ # @param [Hash] attributes Model attributes in the form of hash
230
+ # @return [Object] Returns the model itself
231
+ def self.build_from_hash(attributes)
232
+ new.build_from_hash(attributes)
233
+ end
234
+
235
+ # Builds the object from hash
236
+ # @param [Hash] attributes Model attributes in the form of hash
237
+ # @return [Object] Returns the model itself
238
+ def build_from_hash(attributes)
239
+ return nil unless attributes.is_a?(Hash)
240
+ self.class.openapi_types.each_pair do |key, type|
241
+ if type =~ /\AArray<(.*)>/i
242
+ # check to ensure the input is an array given that the attribute
243
+ # is documented as an array but the input is not
244
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
245
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
246
+ end
247
+ elsif !attributes[self.class.attribute_map[key]].nil?
248
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
249
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
250
+ end
251
+
252
+ self
253
+ end
254
+
255
+ # Deserializes the data based on type
256
+ # @param string type Data type
257
+ # @param string value Value to be deserialized
258
+ # @return [Object] Deserialized data
259
+ def _deserialize(type, value)
260
+ case type.to_sym
261
+ when :DateTime
262
+ DateTime.parse(value)
263
+ when :Date
264
+ Date.parse(value)
265
+ when :String
266
+ value.to_s
267
+ when :Integer
268
+ value.to_i
269
+ when :Float
270
+ value.to_f
271
+ when :Boolean
272
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
273
+ true
274
+ else
275
+ false
276
+ end
277
+ when :Object
278
+ # generic object (usually a Hash), return directly
279
+ value
280
+ when /\AArray<(?<inner_type>.+)>\z/
281
+ inner_type = Regexp.last_match[:inner_type]
282
+ value.map { |v| _deserialize(inner_type, v) }
283
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
284
+ k_type = Regexp.last_match[:k_type]
285
+ v_type = Regexp.last_match[:v_type]
286
+ {}.tap do |hash|
287
+ value.each do |k, v|
288
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
289
+ end
290
+ end
291
+ else # model
292
+ DearInventoryRuby.const_get(type).build_from_hash(value)
293
+ end
294
+ end
295
+
296
+ # Returns the string representation of the object
297
+ # @return [String] String presentation of the object
298
+ def to_s
299
+ to_hash.to_s
300
+ end
301
+
302
+ # to_body is an alias to to_hash (backward compatibility)
303
+ # @return [Hash] Returns the object in the form of hash
304
+ def to_body
305
+ to_hash
306
+ end
307
+
308
+ # Returns the object in the form of hash
309
+ # @return [Hash] Returns the object in the form of hash
310
+ def to_hash
311
+ hash = {}
312
+ self.class.attribute_map.each_pair do |attr, param|
313
+ value = self.send(attr)
314
+ if value.nil?
315
+ is_nullable = self.class.openapi_nullable.include?(attr)
316
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
317
+ end
318
+
319
+ hash[param] = _to_hash(value)
320
+ end
321
+ hash
322
+ end
323
+
324
+ # Outputs non-array value in the form of hash
325
+ # For object, use to_hash. Otherwise, just return the value
326
+ # @param [Object] value Any valid value
327
+ # @return [Hash] Returns the value in the form of hash
328
+ def _to_hash(value)
329
+ if value.is_a?(Array)
330
+ value.compact.map { |v| _to_hash(v) }
331
+ elsif value.is_a?(Hash)
332
+ {}.tap do |hash|
333
+ value.each { |k, v| hash[k] = _to_hash(v) }
334
+ end
335
+ elsif value.respond_to? :to_hash
336
+ value.to_hash
337
+ else
338
+ value
339
+ end
340
+ end
341
+ end
342
+ end
@@ -0,0 +1,337 @@
1
+ =begin
2
+ #DEAR Inventory API
3
+
4
+ #This specifing endpoints for DEAR Inventory API
5
+
6
+ The version of the OpenAPI document: 2.0.0
7
+ Contact: nnhansg@gmail.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module DearInventoryRuby
16
+ class SalePayment
17
+ # Unique DEAR Sale ID
18
+ attr_accessor :sale_id
19
+
20
+ # Unique DEAR Sale Task ID. Available for POST
21
+ attr_accessor :task_id
22
+
23
+ # Identifier of payment. Available for PUT
24
+ attr_accessor :id
25
+
26
+ # Sale Order Number
27
+ attr_accessor :sale_order_number
28
+
29
+ # Sale Task Invoice Number
30
+ attr_accessor :invoice_number
31
+
32
+ # Sale Task Credit Note Number
33
+ attr_accessor :credit_note_number
34
+
35
+ # Available values are PREPAYMENT,PAYMENT,REFUND. Available for POST
36
+ attr_accessor :type
37
+
38
+ # Payment reference number. Available for POST/PUT
39
+ attr_accessor :reference
40
+
41
+ # Payment amount in customer currency. Available for POST/PUT
42
+ attr_accessor :amount
43
+
44
+ # Date when payment has been made. Available for POST/PUT
45
+ attr_accessor :date_paid
46
+
47
+ # Account Code of the bank/payment account from Chart of accounts. Available for POST/PUT
48
+ attr_accessor :account
49
+
50
+ # Currency Conversion rate expressed as number of Base currency units for one Customer currency unit. Available for POST/PUT
51
+ attr_accessor :currency_rate
52
+
53
+ # Date of creation payment record.
54
+ attr_accessor :date_created
55
+
56
+ # Id for Sale Credit entry
57
+ attr_accessor :credit_id
58
+
59
+ # Attribute mapping from ruby-style variable name to JSON key.
60
+ def self.attribute_map
61
+ {
62
+ :'sale_id' => :'SaleID',
63
+ :'task_id' => :'TaskID',
64
+ :'id' => :'ID',
65
+ :'sale_order_number' => :'SaleOrderNumber',
66
+ :'invoice_number' => :'InvoiceNumber',
67
+ :'credit_note_number' => :'CreditNoteNumber',
68
+ :'type' => :'Type',
69
+ :'reference' => :'Reference',
70
+ :'amount' => :'Amount',
71
+ :'date_paid' => :'DatePaid',
72
+ :'account' => :'Account',
73
+ :'currency_rate' => :'CurrencyRate',
74
+ :'date_created' => :'DateCreated',
75
+ :'credit_id' => :'CreditID'
76
+ }
77
+ end
78
+
79
+ # Attribute type mapping.
80
+ def self.openapi_types
81
+ {
82
+ :'sale_id' => :'String',
83
+ :'task_id' => :'String',
84
+ :'id' => :'String',
85
+ :'sale_order_number' => :'String',
86
+ :'invoice_number' => :'String',
87
+ :'credit_note_number' => :'String',
88
+ :'type' => :'String',
89
+ :'reference' => :'String',
90
+ :'amount' => :'Float',
91
+ :'date_paid' => :'Date',
92
+ :'account' => :'String',
93
+ :'currency_rate' => :'Float',
94
+ :'date_created' => :'Date',
95
+ :'credit_id' => :'String'
96
+ }
97
+ end
98
+
99
+ # List of attributes with nullable: true
100
+ def self.openapi_nullable
101
+ Set.new([
102
+ ])
103
+ end
104
+
105
+ # Initializes the object
106
+ # @param [Hash] attributes Model attributes in the form of hash
107
+ def initialize(attributes = {})
108
+ if (!attributes.is_a?(Hash))
109
+ fail ArgumentError, "The input argument (attributes) must be a hash in `DearInventoryRuby::SalePayment` initialize method"
110
+ end
111
+
112
+ # check to see if the attribute exists and convert string to symbol for hash key
113
+ attributes = attributes.each_with_object({}) { |(k, v), h|
114
+ if (!self.class.attribute_map.key?(k.to_sym))
115
+ fail ArgumentError, "`#{k}` is not a valid attribute in `DearInventoryRuby::SalePayment`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
116
+ end
117
+ h[k.to_sym] = v
118
+ }
119
+
120
+ if attributes.key?(:'sale_id')
121
+ self.sale_id = attributes[:'sale_id']
122
+ end
123
+
124
+ if attributes.key?(:'task_id')
125
+ self.task_id = attributes[:'task_id']
126
+ end
127
+
128
+ if attributes.key?(:'id')
129
+ self.id = attributes[:'id']
130
+ end
131
+
132
+ if attributes.key?(:'sale_order_number')
133
+ self.sale_order_number = attributes[:'sale_order_number']
134
+ end
135
+
136
+ if attributes.key?(:'invoice_number')
137
+ self.invoice_number = attributes[:'invoice_number']
138
+ end
139
+
140
+ if attributes.key?(:'credit_note_number')
141
+ self.credit_note_number = attributes[:'credit_note_number']
142
+ end
143
+
144
+ if attributes.key?(:'type')
145
+ self.type = attributes[:'type']
146
+ end
147
+
148
+ if attributes.key?(:'reference')
149
+ self.reference = attributes[:'reference']
150
+ end
151
+
152
+ if attributes.key?(:'amount')
153
+ self.amount = attributes[:'amount']
154
+ end
155
+
156
+ if attributes.key?(:'date_paid')
157
+ self.date_paid = attributes[:'date_paid']
158
+ end
159
+
160
+ if attributes.key?(:'account')
161
+ self.account = attributes[:'account']
162
+ end
163
+
164
+ if attributes.key?(:'currency_rate')
165
+ self.currency_rate = attributes[:'currency_rate']
166
+ end
167
+
168
+ if attributes.key?(:'date_created')
169
+ self.date_created = attributes[:'date_created']
170
+ end
171
+
172
+ if attributes.key?(:'credit_id')
173
+ self.credit_id = attributes[:'credit_id']
174
+ end
175
+ end
176
+
177
+ # Show invalid properties with the reasons. Usually used together with valid?
178
+ # @return Array for valid properties with the reasons
179
+ def list_invalid_properties
180
+ invalid_properties = Array.new
181
+ invalid_properties
182
+ end
183
+
184
+ # Check to see if the all the properties in the model are valid
185
+ # @return true if the model is valid
186
+ def valid?
187
+ true
188
+ end
189
+
190
+ # Checks equality by comparing each attribute.
191
+ # @param [Object] Object to be compared
192
+ def ==(o)
193
+ return true if self.equal?(o)
194
+ self.class == o.class &&
195
+ sale_id == o.sale_id &&
196
+ task_id == o.task_id &&
197
+ id == o.id &&
198
+ sale_order_number == o.sale_order_number &&
199
+ invoice_number == o.invoice_number &&
200
+ credit_note_number == o.credit_note_number &&
201
+ type == o.type &&
202
+ reference == o.reference &&
203
+ amount == o.amount &&
204
+ date_paid == o.date_paid &&
205
+ account == o.account &&
206
+ currency_rate == o.currency_rate &&
207
+ date_created == o.date_created &&
208
+ credit_id == o.credit_id
209
+ end
210
+
211
+ # @see the `==` method
212
+ # @param [Object] Object to be compared
213
+ def eql?(o)
214
+ self == o
215
+ end
216
+
217
+ # Calculates hash code according to all attributes.
218
+ # @return [Integer] Hash code
219
+ def hash
220
+ [sale_id, task_id, id, sale_order_number, invoice_number, credit_note_number, type, reference, amount, date_paid, account, currency_rate, date_created, credit_id].hash
221
+ end
222
+
223
+ # Builds the object from hash
224
+ # @param [Hash] attributes Model attributes in the form of hash
225
+ # @return [Object] Returns the model itself
226
+ def self.build_from_hash(attributes)
227
+ new.build_from_hash(attributes)
228
+ end
229
+
230
+ # Builds the object from hash
231
+ # @param [Hash] attributes Model attributes in the form of hash
232
+ # @return [Object] Returns the model itself
233
+ def build_from_hash(attributes)
234
+ return nil unless attributes.is_a?(Hash)
235
+ self.class.openapi_types.each_pair do |key, type|
236
+ if type =~ /\AArray<(.*)>/i
237
+ # check to ensure the input is an array given that the attribute
238
+ # is documented as an array but the input is not
239
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
240
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
241
+ end
242
+ elsif !attributes[self.class.attribute_map[key]].nil?
243
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
244
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
245
+ end
246
+
247
+ self
248
+ end
249
+
250
+ # Deserializes the data based on type
251
+ # @param string type Data type
252
+ # @param string value Value to be deserialized
253
+ # @return [Object] Deserialized data
254
+ def _deserialize(type, value)
255
+ case type.to_sym
256
+ when :DateTime
257
+ DateTime.parse(value)
258
+ when :Date
259
+ Date.parse(value)
260
+ when :String
261
+ value.to_s
262
+ when :Integer
263
+ value.to_i
264
+ when :Float
265
+ value.to_f
266
+ when :Boolean
267
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
268
+ true
269
+ else
270
+ false
271
+ end
272
+ when :Object
273
+ # generic object (usually a Hash), return directly
274
+ value
275
+ when /\AArray<(?<inner_type>.+)>\z/
276
+ inner_type = Regexp.last_match[:inner_type]
277
+ value.map { |v| _deserialize(inner_type, v) }
278
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
279
+ k_type = Regexp.last_match[:k_type]
280
+ v_type = Regexp.last_match[:v_type]
281
+ {}.tap do |hash|
282
+ value.each do |k, v|
283
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
284
+ end
285
+ end
286
+ else # model
287
+ DearInventoryRuby.const_get(type).build_from_hash(value)
288
+ end
289
+ end
290
+
291
+ # Returns the string representation of the object
292
+ # @return [String] String presentation of the object
293
+ def to_s
294
+ to_hash.to_s
295
+ end
296
+
297
+ # to_body is an alias to to_hash (backward compatibility)
298
+ # @return [Hash] Returns the object in the form of hash
299
+ def to_body
300
+ to_hash
301
+ end
302
+
303
+ # Returns the object in the form of hash
304
+ # @return [Hash] Returns the object in the form of hash
305
+ def to_hash
306
+ hash = {}
307
+ self.class.attribute_map.each_pair do |attr, param|
308
+ value = self.send(attr)
309
+ if value.nil?
310
+ is_nullable = self.class.openapi_nullable.include?(attr)
311
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
312
+ end
313
+
314
+ hash[param] = _to_hash(value)
315
+ end
316
+ hash
317
+ end
318
+
319
+ # Outputs non-array value in the form of hash
320
+ # For object, use to_hash. Otherwise, just return the value
321
+ # @param [Object] value Any valid value
322
+ # @return [Hash] Returns the value in the form of hash
323
+ def _to_hash(value)
324
+ if value.is_a?(Array)
325
+ value.compact.map { |v| _to_hash(v) }
326
+ elsif value.is_a?(Hash)
327
+ {}.tap do |hash|
328
+ value.each { |k, v| hash[k] = _to_hash(v) }
329
+ end
330
+ elsif value.respond_to? :to_hash
331
+ value.to_hash
332
+ else
333
+ value
334
+ end
335
+ end
336
+ end
337
+ end