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 +4 -4
- data/lib/tiny_erp_api/address.rb +37 -0
- data/lib/tiny_erp_api/client.rb +375 -42
- data/lib/tiny_erp_api/installment.rb +29 -0
- data/lib/tiny_erp_api/integrated_payment.rb +23 -0
- data/lib/tiny_erp_api/item.rb +25 -0
- data/lib/tiny_erp_api/shipment.rb +29 -0
- data/lib/tiny_erp_api/version.rb +1 -1
- data/lib/tiny_erp_api.rb +9 -4
- metadata +8 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b1aa38b1b932ac49ac8edeca5403ef4cc67d75198d770a461dab5776e9d730bd
|
|
4
|
+
data.tar.gz: 5819c0e66ccf3d38455ab2a7252f75e8c25d8a8669e0af5112efee42acd20a36
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/tiny_erp_api/client.rb
CHANGED
|
@@ -1,78 +1,411 @@
|
|
|
1
1
|
module TinyErpApi
|
|
2
2
|
class Client < Ac::Base
|
|
3
|
-
BASE_URL = "https://api.tiny.com.br/
|
|
4
|
-
|
|
3
|
+
BASE_URL = "https://api.tiny.com.br/public-api/v3"
|
|
4
|
+
SAVE_RESPONSES = true
|
|
5
5
|
|
|
6
|
-
def initialize(access_token
|
|
7
|
-
@
|
|
8
|
-
@
|
|
9
|
-
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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(
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
response = post("/pedido.obter.php?#{params}")
|
|
67
|
-
response.json.dig("retorno", "pedido")
|
|
311
|
+
get("/pedidos/#{order_id}")
|
|
68
312
|
end
|
|
69
313
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
data/lib/tiny_erp_api/version.rb
CHANGED
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:
|
|
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:
|
|
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.
|
|
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.
|