tiny_erp_api 1.0.1 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfbcf2efac012916d000a8efb6bdfded99741005d57f0b8228bc0841a7c6ddba
4
- data.tar.gz: bb65436e2819e862cae78e4e8b13dda74fd267b06b7cf62ba476dd8e6042dc90
3
+ metadata.gz: b1aa38b1b932ac49ac8edeca5403ef4cc67d75198d770a461dab5776e9d730bd
4
+ data.tar.gz: 5819c0e66ccf3d38455ab2a7252f75e8c25d8a8669e0af5112efee42acd20a36
5
5
  SHA512:
6
- metadata.gz: cee43ee15dc40e288b11a7f00f9bb04dd07705f5bb772eb6fd1198c860f9c2c069940f7a4518b2584a8198e7d3cb2407f64a6a065af29d77060b7aa41e60d82b
7
- data.tar.gz: 4acb05b24c3af0ce0662dd056d52843561b47d7a5ea5fdfeb5f776d112526f7f6502036eeafa4ad9120a29819718abb2d052f85981756079b79662222cd1ae26
6
+ metadata.gz: 5348c57b25c31b4a8623fef29e06341c7885a3d0445e125b574fa2de1bde288494baa3b046d4c0cd42104446314e3e88697f45ca64cf6e068dc3f858976a0b53
7
+ data.tar.gz: 23c22ac1c35ab92800e921485b02b80ed0facff84c9db06fb4e5429b583b10f73e47e876f6186c6101b22e182b84b0214448d81471589fe76eb99ac11b0a0d07
@@ -0,0 +1,37 @@
1
+ module TinyErpApi
2
+ class Address
3
+
4
+ attr_reader :endereco, :endereco_numero, :complemento, :bairro, :municipio, :cep, :uf, :fone, :nome_destinatario, :cpf_cnpj, :tipo_pessoa, :ie
5
+ def initialize(endereco:, uf:, endereco_numero: nil, complemento: nil, bairro: nil, municipio: nil, cep: nil, fone: nil, nome_destinatario: nil, cpf_cnpj: nil, tipo_pessoa: nil, ie: nil)
6
+ @endereco = endereco
7
+ @endereco_numero = endereco_numero
8
+ @complemento = complemento
9
+ @bairro = bairro
10
+ @municipio = municipio
11
+ @cep = cep
12
+ @uf = uf
13
+ @fone = fone
14
+ @nome_destinatario = nome_destinatario
15
+ @cpf_cnpj = cpf_cnpj
16
+ @tipo_pessoa = tipo_pessoa
17
+ @ie = ie
18
+ end
19
+
20
+ def to_api_hash
21
+ {
22
+ endereco: endereco,
23
+ enderecoNro: endereco_numero,
24
+ complemento: complemento,
25
+ bairro: bairro,
26
+ municipio: municipio,
27
+ cep: cep,
28
+ uf: uf,
29
+ fone: fone,
30
+ nomeDestinatario: nome_destinatario,
31
+ cpfCnpj: cpf_cnpj,
32
+ tipoPessoa: tipo_pessoa,
33
+ ie: ie
34
+ }
35
+ end
36
+ end
37
+ end
@@ -1,78 +1,411 @@
1
1
  module TinyErpApi
2
2
  class Client < Ac::Base
3
- BASE_URL = "https://api.tiny.com.br/api2"
4
- attr_reader :access_token, :query_params
3
+ BASE_URL = "https://api.tiny.com.br/public-api/v3"
4
+ SAVE_RESPONSES = true
5
5
 
6
- def initialize(access_token = nil)
7
- @access_token = access_token || TinyErpApi.configuration.access_token
8
- @query_params = "token=#{@access_token}&formato=JSON"
9
- super()
6
+ def initialize(client_id:, client_secret:, refresh: nil, access_token: nil, token_expires_at: nil)
7
+ @client_id = client_id
8
+ @client_secret = client_secret
9
+ @refresh = refresh
10
+ @access_token = access_token
11
+ @token_expires_at = token_expires_at
12
+ end
13
+
14
+ def refresh_token
15
+ body = {
16
+ grant_type: "refresh_token",
17
+ client_id: @client_id,
18
+ client_secret: @client_secret,
19
+ refresh_token: @refresh
20
+ }
21
+ headers = {
22
+ "Accept" => "application/json",
23
+ "Content-Type" => "application/x-www-form-urlencoded"
24
+ }
25
+ response = post("https://accounts.tiny.com.br/realms/tiny/protocol/openid-connect/token", body:, headers:, skip_authentication: true)
26
+ @access_token = response.access_token
27
+ @refresh = response.refresh_token
28
+ @token_expires_at = Time.now + response.expires_in
29
+ end
30
+
31
+ def authorize(code:, redirect_url:)
32
+ body = {
33
+ grant_type: 'authorization_code',
34
+ client_id: @client_id,
35
+ client_secret: @client_secret,
36
+ redirect_uri: redirect_url,
37
+ code: code
38
+ }
39
+ headers = {
40
+ "Accept" => "application/json",
41
+ "Content-Type" => "application/x-www-form-urlencoded"
42
+ }
43
+ response = post("https://accounts.tiny.com.br/realms/tiny/protocol/openid-connect/token", body:, headers:, skip_authentication: true)
44
+ @access_token = response.access_token
45
+ @refresh = response.refresh_token
46
+ @token_expires_at = Time.now + response.expires_in
47
+ end
48
+
49
+ def default_options
50
+ {
51
+ headers: {
52
+ "Accept" => "application/json",
53
+ "Content-Type" => "application/json"
54
+ }
55
+ }
56
+ end
57
+
58
+ def get_refresh_token
59
+ @refresh
10
60
  end
11
61
 
12
62
  # Contacts
13
- def get_contact_by_document(document_number)
14
- params = "#{@query_params}&cnpj_cpf=#{document_number}"
15
- response = get("/contatos.pesquisa.php?#{params}")
16
- response.json.dig("retorno","contatos",0,"contato")
63
+ def find_contact_by_document(document_number)
64
+ get("/contatos?cpfCnpj=#{document_number}")
65
+ end
66
+
67
+ def get_contact(id)
68
+ get("/contatos/#{id}") { _1.id }
17
69
  end
18
70
 
19
- def get_contact_by_id(contact_id)
20
- params = "#{@query_params}&id=#{contact_id}"
21
- response = get("/contato.obter.php?#{params}")
22
- response.json.dig("retorno","contato")
71
+ def create_contact(
72
+ nome:,
73
+ tipo_pessoa:,
74
+ codigo: nil,
75
+ fantasia: nil,
76
+ cpf_cnpj: nil,
77
+ inscricao_estadual: nil,
78
+ rg: nil,
79
+ telefone: nil,
80
+ celular: nil,
81
+ email: nil,
82
+ endereco: nil,
83
+ endereco_numero: nil,
84
+ endereco_complemento: nil,
85
+ endereco_bairro: nil,
86
+ endereco_municipio: nil,
87
+ endereco_cep: nil,
88
+ endereco_uf: nil,
89
+ endereco_pais: nil,
90
+ endereco_cobranca: nil,
91
+ endereco_cobranca_numero: nil,
92
+ endereco_cobranca_complemento: nil,
93
+ endereco_cobranca_bairro: nil,
94
+ endereco_cobranca_municipio: nil,
95
+ endereco_cobranca_cep: nil,
96
+ endereco_cobranca_uf: nil,
97
+ endereco_cobranca_pais: nil,
98
+ inscricao_municipal: nil,
99
+ telefone_adicional: nil,
100
+ email_nfe: nil,
101
+ site: nil,
102
+ regime_tributario: nil,
103
+ estado_civil: nil,
104
+ profissao: nil,
105
+ sexo: nil,
106
+ data_nascimento: nil,
107
+ naturalidade: nil,
108
+ nome_pai: nil,
109
+ nome_mae: nil,
110
+ cpf_pai: nil,
111
+ cpf_mae: nil,
112
+ limite_credito: nil,
113
+ situacao: nil,
114
+ observacoes: nil,
115
+ vendedor_id: nil,
116
+ tipos: nil,
117
+ contatos: nil
118
+ )
119
+ body = {
120
+ nome: nome,
121
+ codigo: codigo,
122
+ fantasia: fantasia,
123
+ tipoPessoa: tipo_pessoa,
124
+ cpfCnpj: cpf_cnpj,
125
+ inscricaoEstadual: inscricao_estadual,
126
+ rg: rg,
127
+ telefone: telefone,
128
+ celular: celular,
129
+ email: email,
130
+ endereco: {
131
+ endereco: endereco,
132
+ numero: endereco_numero,
133
+ complemento: endereco_complemento,
134
+ bairro: endereco_bairro,
135
+ municipio: endereco_municipio,
136
+ cep: endereco_cep,
137
+ uf: endereco_uf,
138
+ pais: endereco_pais
139
+ },
140
+ enderecoCobranca: {
141
+ endereco: endereco_cobranca,
142
+ numero: endereco_cobranca_numero,
143
+ complemento: endereco_cobranca_complemento,
144
+ bairro: endereco_cobranca_bairro,
145
+ municipio: endereco_cobranca_municipio,
146
+ cep: endereco_cobranca_cep,
147
+ uf: endereco_cobranca_uf,
148
+ pais: endereco_cobranca_pais
149
+ },
150
+ inscricaoMunicipal: inscricao_municipal,
151
+ telefoneAdicional: telefone_adicional,
152
+ emailNfe: email_nfe,
153
+ site: site,
154
+ regimeTributario: regime_tributario,
155
+ estadoCivil: estado_civil,
156
+ profissao: profissao,
157
+ sexo: sexo,
158
+ dataNascimento: data_nascimento,
159
+ naturalidade: naturalidade,
160
+ nomePai: nome_pai,
161
+ nomeMae: nome_mae,
162
+ cpfPai: cpf_pai,
163
+ cpfMae: cpf_mae,
164
+ limiteCredito: limite_credito,
165
+ situacao: situacao,
166
+ observacoes: observacoes,
167
+ vendedor: vendedor_id.present? ? { id: vendedor_id } : nil,
168
+ tipos: tipos,
169
+ contatos: contatos
170
+ }.compact
171
+ post("/contatos", body:)
23
172
  end
24
173
 
25
- def create_contact(contact)
26
- params = "#{@query_params}&contato=#{URI.encode_www_form_component(contact.to_json)}"
27
- response = post("/contato.incluir.php?#{params}")
28
- response.json.dig("retorno","registros",0,"registro")
174
+ def update_contact(
175
+ id:,
176
+ nome: nil,
177
+ codigo: nil,
178
+ fantasia: nil,
179
+ tipo_pessoa: nil,
180
+ cpf_cnpj: nil,
181
+ inscricao_estadual: nil,
182
+ rg: nil,
183
+ telefone: nil,
184
+ celular: nil,
185
+ email: nil,
186
+ endereco: nil,
187
+ endereco_numero: nil,
188
+ endereco_complemento: nil,
189
+ endereco_bairro: nil,
190
+ endereco_municipio: nil,
191
+ endereco_cep: nil,
192
+ endereco_uf: nil,
193
+ endereco_pais: nil,
194
+ endereco_cobranca: nil,
195
+ endereco_cobranca_numero: nil,
196
+ endereco_cobranca_complemento: nil,
197
+ endereco_cobranca_bairro: nil,
198
+ endereco_cobranca_municipio: nil,
199
+ endereco_cobranca_cep: nil,
200
+ endereco_cobranca_uf: nil,
201
+ endereco_cobranca_pais: nil,
202
+ inscricao_municipal: nil,
203
+ telefone_adicional: nil,
204
+ email_nfe: nil,
205
+ site: nil,
206
+ regime_tributario: nil,
207
+ estado_civil: nil,
208
+ profissao: nil,
209
+ sexo: nil,
210
+ data_nascimento: nil,
211
+ naturalidade: nil,
212
+ nome_pai: nil,
213
+ nome_mae: nil,
214
+ cpf_pai: nil,
215
+ cpf_mae: nil,
216
+ limite_credito: nil,
217
+ situacao: nil,
218
+ observacoes: nil,
219
+ vendedor_id: nil,
220
+ tipos: nil,
221
+ contatos: nil
222
+ )
223
+ contact = get_contact(id)
224
+ body = {
225
+ nome: nome || contact.nome,
226
+ codigo: codigo || contact.codigo,
227
+ fantasia: fantasia || contact.fantasia,
228
+ tipoPessoa: tipo_pessoa || contact.tipoPessoa,
229
+ cpfCnpj: cpf_cnpj || contact.cpfCnpj,
230
+ inscricaoEstadual: inscricao_estadual || contact.inscricaoEstadual,
231
+ rg: rg || contact.rg,
232
+ telefone: telefone || contact.telefone,
233
+ celular: celular || contact.celular,
234
+ email: email || contact.email,
235
+ endereco: {
236
+ endereco: endereco || contact.endereco&.endereco,
237
+ numero: endereco_numero || contact.endereco&.numero,
238
+ complemento: endereco_complemento || contact.endereco&.complemento,
239
+ bairro: endereco_bairro || contact.endereco&.bairro,
240
+ municipio: endereco_municipio || contact.endereco&.municipio,
241
+ cep: endereco_cep || contact.endereco&.cep,
242
+ uf: endereco_uf || contact.endereco&.uf,
243
+ pais: endereco_pais || contact.endereco&.pais
244
+ },
245
+ enderecoCobranca: {
246
+ endereco: endereco_cobranca || contact.enderecoCobranca&.endereco,
247
+ numero: endereco_cobranca_numero || contact.enderecoCobranca&.numero,
248
+ complemento: endereco_cobranca_complemento || contact.enderecoCobranca&.complemento,
249
+ bairro: endereco_cobranca_bairro || contact.enderecoCobranca&.bairro,
250
+ municipio: endereco_cobranca_municipio || contact.enderecoCobranca&.municipio,
251
+ cep: endereco_cobranca_cep || contact.enderecoCobranca&.cep,
252
+ uf: endereco_cobranca_uf || contact.enderecoCobranca&.uf,
253
+ pais: endereco_cobranca_pais || contact.enderecoCobranca&.pais
254
+ },
255
+ inscricaoMunicipal: inscricao_municipal || contact.inscricaoMunicipal,
256
+ telefoneAdicional: telefone_adicional || contact.telefoneAdicional,
257
+ emailNfe: email_nfe || contact.emailNfe,
258
+ site: site || contact.site,
259
+ regimeTributario: regime_tributario || contact.regimeTributario.zero? ? nil : contact.regimeTributario,
260
+ estadoCivil: estado_civil || contact.estadoCivil,
261
+ profissao: profissao || contact.profissao,
262
+ sexo: sexo || contact.sexo.empty? ? nil : contact.sexo,
263
+ dataNascimento: data_nascimento || contact.dataNascimento,
264
+ naturalidade: naturalidade || contact.naturalidade,
265
+ nomePai: nome_pai || contact.nomePai,
266
+ nomeMae: nome_mae || contact.nomeMae,
267
+ cpfPai: cpf_pai || contact.cpfPai,
268
+ cpfMae: cpf_mae || contact.cpfMae,
269
+ limiteCredito: limite_credito || contact.limiteCredito.zero? ? nil : contact.limiteCredito,
270
+ situacao: situacao || contact.situacao,
271
+ observacoes: observacoes || contact.observacoes,
272
+ vendedor: (vendedor_id.present? ? { id: vendedor_id } : nil) || contact.vendedor,
273
+ tipos: tipos || contact.tipos.map(&:id),
274
+ contatos: contatos || contact.contatos
275
+ }
276
+ put("/contatos/#{id}", body:)
29
277
  end
30
278
 
31
- def update_contact(contact_id)
32
- params = "#{@query_params}&contato=#{contact_id}"
33
- response = post("/contato.alterar.php?#{params}")
34
- response.json.dig("retorno","registros",0,"registro")
279
+ def get_contact_types
280
+ get("/contatos/tipos")
281
+ end
282
+
283
+ def contact_types_to_integer(types)
284
+ contact_types = get_contact_types.itens.index_by(&:id)
285
+ tipos = types.map do |type|
286
+ contact_types[type.id].perfilContato.to_i
287
+ end
288
+ tipos
35
289
  end
36
290
 
37
291
  # Sellers
38
- def get_sellers(page = 1)
39
- params = "#{@query_params}&pagina=#{page}pesquisa="
40
- response = post("/vendedores.pesquisa.php?#{params}")
41
- response.json.dig("retorno")
292
+ def get_sellers(limit = 100, offset = 0)
293
+ get("/vendedores?limit=#{limit}&offset=#{offset}")
42
294
  end
43
295
 
44
296
  def get_seller_by_name(seller_name)
45
- params = "#{@query_params}&pesquisa=#{URI.encode_www_form_component(seller_name)}"
46
- response = post("/vendedores.pesquisa.php?#{params}")
47
- response.json.dig("retorno","vendedores",0,"vendedor")
297
+ get("/vendedores?nome=#{URI.encode_www_form_component(seller_name)}")
48
298
  end
49
299
 
50
300
  # Products
51
301
  def get_product_by_sku(sku)
52
- params = "#{@query_params}&pesquisa=#{URI.encode_www_form_component(sku)}"
53
- response = post("/produtos.pesquisa.php?#{params}")
54
- response.json.dig("retorno","produtos",0, "produto")
302
+ get("/produtos?codigo=#{URI.encode_www_form_component(sku)}")
55
303
  end
56
304
 
57
305
  def get_product_by_id(product_id)
58
- params = "#{@query_params}&id=#{product_id}"
59
- response = post("/produto.obter.php?#{params}")
60
- response.json.dig("retorno", "produto")
306
+ get("/produtos/#{product_id}")
61
307
  end
62
308
 
63
309
  # Orders
64
310
  def get_order_by_id(order_id)
65
- params = "#{@query_params}&id=#{order_id}"
66
- response = post("/pedido.obter.php?#{params}")
67
- response.json.dig("retorno", "pedido")
311
+ get("/pedidos/#{order_id}")
68
312
  end
69
313
 
70
- def create_order(order)
71
- params = "#{@query_params}&pedido=#{URI.encode_www_form_component(JSON.dump(order))}"
72
- response = post("/pedido.incluir.php?#{params}")
73
- response.json.dig("retorno", "registros", "registro")
314
+ # @param itens [Array<TinyErpApi::Item>] Array de objetos Item
315
+ # @param endereco_entrega [<TinyErpApi::Address>] Objeto Address
316
+ # @param transportador [<TinyErpApi::Shipment>] Objeto Shipment
317
+ # @param parcelas [<TinyErpApi::Installment>] Array de objetos Installment
318
+ # @param pagamentos_integrados [<TinyErpApi::IntegratedPayment>] Array de objetos IntegratedPayment
319
+ def create_order(
320
+ data:,
321
+ id_contato:,
322
+ itens:,
323
+ data_prevista: nil,
324
+ data_envio: nil,
325
+ observacoes: nil,
326
+ observacoes_internas: nil,
327
+ situacao: nil,
328
+ data_entrega: nil,
329
+ numero_ordem_compra: nil,
330
+ valor_desconto: nil,
331
+ valor_frete: nil,
332
+ valor_outras_despesas: nil,
333
+ id_lista_preco: nil,
334
+ id_natureza_operacao: nil,
335
+ id_vendedor: nil,
336
+ endereco_entrega: nil,
337
+ cpfCnpj_consumidor_final: nil,
338
+ cliente_consumidor_final: nil,
339
+ id_ecommerce: nil,
340
+ numero_pedido_ecommerce: nil,
341
+ transportador: nil,
342
+ id_intermediador: nil,
343
+ id_deposito: nil,
344
+ pagamento_forma_recebimento: nil,
345
+ pagamento_meio_pagamento: nil,
346
+ parcelas: [],
347
+ pagamentos_integrados: []
348
+ )
349
+ body = {
350
+ data: data,
351
+ idContato: id_contato,
352
+ itens: itens.map(&:to_api_hash),
353
+ dataPrevista: data_prevista,
354
+ dataEnvio: data_envio,
355
+ observacoes: observacoes,
356
+ observacoesInternas: observacoes_internas,
357
+ situacao: situacao,
358
+ dataEntrega: data_entrega,
359
+ numeroOrdemCompra: numero_ordem_compra,
360
+ valorDesconto: valor_desconto,
361
+ valorFrete: valor_frete,
362
+ valorOutrasDespesas: valor_outras_despesas,
363
+ listaPreco: {
364
+ id: id_lista_preco
365
+ },
366
+ naturezaOperacao: {
367
+ id: id_natureza_operacao
368
+ },
369
+ vendedor: {
370
+ id: id_vendedor
371
+ },
372
+ enderecoEntrega: endereco_entrega&.to_api_hash,
373
+ consumidorFinal: {
374
+ cpfCnpj: cpfCnpj_consumidor_final,
375
+ clienteConsumidorFinal: cliente_consumidor_final
376
+ },
377
+ ecommerce: {
378
+ id: id_ecommerce,
379
+ numeroPedidoEcommerce: numero_pedido_ecommerce
380
+ },
381
+ transportador: transportador&.to_api_hash,
382
+ intermediador: {
383
+ id: id_intermediador
384
+ },
385
+ deposito: {
386
+ id: id_deposito
387
+ },
388
+ pagamento: {
389
+ formaRecebimento: {
390
+ id: pagamento_forma_recebimento
391
+ },
392
+ meioPagamento: {
393
+ id: pagamento_meio_pagamento
394
+ },
395
+ parcelas: parcelas.map(&:to_api_hash)
396
+ },
397
+ pagamentosIntegrados: pagamentos_integrados.map(&:to_api_hash),
398
+ }
399
+ post("/pedidos", body: deep_compact(body))
74
400
  end
75
401
 
402
+ # A API não aceita campos nulos, então precisamos remover recursivamente os campos que são nil ou hashes vazias
403
+ def deep_compact(hash)
404
+ hash.each_with_object({}) do |(k, v), new_hash|
405
+ v = deep_compact(v) if v.is_a?(Hash)
76
406
 
407
+ new_hash[k] = v unless v.nil? || (v.is_a?(Hash) && v.empty?)
408
+ end
409
+ end
77
410
  end
78
411
  end
@@ -0,0 +1,29 @@
1
+ module TinyErpApi
2
+ class Installment
3
+
4
+ attr_reader :dias, :data, :valor, :observacoes, :id_forma_recebimento, :id_meio_pagamento
5
+ def initialize(dias: nil, data: nil, valor: nil, observacoes: nil, id_forma_recebimento: nil, id_meio_pagamento: nil)
6
+ @dias = dias
7
+ @data = data
8
+ @valor = valor
9
+ @observacoes = observacoes
10
+ @id_forma_recebimento = id_forma_recebimento
11
+ @id_meio_pagamento = id_meio_pagamento
12
+ end
13
+
14
+ def to_api_hash
15
+ {
16
+ dias: dias,
17
+ data: data,
18
+ valor: valor,
19
+ observacoes: observacoes,
20
+ formaRecebimento: {
21
+ id: id_forma_recebimento
22
+ },
23
+ meioPagamento: {
24
+ id: id_meio_pagamento
25
+ }
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ module TinyErpApi
2
+ class IntegratedPayment
3
+
4
+ attr_reader :valor, :tipoPagamento, :cnpjIntermediador, :codigoAutorizacao, :codigoBandeira
5
+ def initialize(valor: nil, tipoPagamento: nil, cnpjIntermediador: nil, codigoAutorizacao: nil, codigoBandeira: nil)
6
+ @valor = valor
7
+ @tipoPagamento = tipoPagamento
8
+ @cnpjIntermediador = cnpjIntermediador
9
+ @codigoAutorizacao = codigoAutorizacao
10
+ @codigoBandeira = codigoBandeira
11
+ end
12
+
13
+ def to_api_hash
14
+ {
15
+ valor: valor,
16
+ tipoPagamento: tipoPagamento,
17
+ cnpjIntermediador: cnpjIntermediador,
18
+ codigoAutorizacao: codigoAutorizacao,
19
+ codigoBandeira: codigoBandeira
20
+ }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module TinyErpApi
2
+ class Item
3
+
4
+ attr_reader :id_produto, :tipo, :quantidade, :valor_unitario, :info_adicional
5
+ def initialize(id_produto:, tipo:, quantidade:, valor_unitario:, info_adicional: nil)
6
+ @id_produto = id_produto
7
+ @tipo = tipo
8
+ @quantidade = quantidade
9
+ @valor_unitario = valor_unitario
10
+ @info_adicional = info_adicional
11
+ end
12
+
13
+ def to_api_hash
14
+ {
15
+ produto: {
16
+ id: id_produto,
17
+ tipo: tipo, # "P" para produto, "S" para serviço
18
+ },
19
+ quantidade: quantidade,
20
+ valorUnitario: valor_unitario,
21
+ infoAdicional: info_adicional
22
+ }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ module TinyErpApi
2
+ class Shipment
3
+
4
+ attr_reader :id_transportador, :frete_por_conta, :id_forma_envio, :id_forma_frete, :codigo_rastreamento, :url_rastreamento
5
+ def initialize(id_transportador: nil, frete_por_conta: nil, id_forma_envio: nil, id_forma_frete: nil, codigo_rastreamento: nil, url_rastreamento: nil)
6
+ @id_transportador = id_transportador
7
+ @frete_por_conta = frete_por_conta
8
+ @id_forma_envio = id_forma_envio
9
+ @id_forma_frete = id_forma_frete
10
+ @codigo_rastreamento = codigo_rastreamento
11
+ @url_rastreamento = url_rastreamento
12
+ end
13
+
14
+ def to_api_hash
15
+ {
16
+ id: id_transportador,
17
+ fretePorConta: frete_por_conta,
18
+ formaEnvio: {
19
+ id: id_forma_envio
20
+ },
21
+ formaFrete: {
22
+ id: id_forma_frete
23
+ },
24
+ codigoRastreamento: codigo_rastreamento,
25
+ urlRastreamento: url_rastreamento
26
+ }
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TinyErpApi
4
- VERSION = "1.0.1"
4
+ VERSION = "2.0.0"
5
5
  end
data/lib/tiny_erp_api.rb CHANGED
@@ -3,10 +3,15 @@
3
3
  require "ac"
4
4
  require_relative "tiny_erp_api/version"
5
5
  require_relative "tiny_erp_api/client"
6
- require_relative "tiny_erp_api/customer"
7
- require_relative "tiny_erp_api/order"
8
- require_relative "tiny_erp_api/product"
9
- require_relative "tiny_erp_api/seller"
6
+ # require_relative "tiny_erp_api/customer" # Deixamos de usar
7
+ # require_relative "tiny_erp_api/order" # Deixamos de usar
8
+ # require_relative "tiny_erp_api/product" # Deixamos de usar
9
+ # require_relative "tiny_erp_api/seller" # Deixamos de usar
10
+ require_relative "tiny_erp_api/item"
11
+ require_relative "tiny_erp_api/address"
12
+ require_relative "tiny_erp_api/shipment"
13
+ require_relative "tiny_erp_api/installment"
14
+ require_relative "tiny_erp_api/integrated_payment"
10
15
 
11
16
  module TinyErpApi
12
17
  class Error < StandardError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_erp_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todas Essas Coisas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-11 00:00:00.000000000 Z
11
+ date: 2026-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ac
@@ -39,11 +39,16 @@ files:
39
39
  - generators/tiny_erp_api/install/install_generator.rb
40
40
  - generators/tiny_erp_api/install/templates/initalizer.rb
41
41
  - lib/tiny_erp_api.rb
42
+ - lib/tiny_erp_api/address.rb
42
43
  - lib/tiny_erp_api/client.rb
43
44
  - lib/tiny_erp_api/customer.rb
45
+ - lib/tiny_erp_api/installment.rb
46
+ - lib/tiny_erp_api/integrated_payment.rb
47
+ - lib/tiny_erp_api/item.rb
44
48
  - lib/tiny_erp_api/order.rb
45
49
  - lib/tiny_erp_api/product.rb
46
50
  - lib/tiny_erp_api/seller.rb
51
+ - lib/tiny_erp_api/shipment.rb
47
52
  - lib/tiny_erp_api/version.rb
48
53
  - sig/tiny_erp_api.rbs
49
54
  homepage: https://github.com/todasessascoisas/tiny_erp_api
@@ -67,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
72
  - !ruby/object:Gem::Version
68
73
  version: '0'
69
74
  requirements: []
70
- rubygems_version: 3.5.9
75
+ rubygems_version: 3.5.3
71
76
  signing_key:
72
77
  specification_version: 4
73
78
  summary: Gem to interact with Tiny ERP API.