correios_api 0.1.0 → 0.3.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: d43b602df7c491dc86c8d97c8cd1d3d79301b3387ac7213448202d94e28117ce
4
- data.tar.gz: 72816d1bf92cc2cc03aaf2598e313a4f3bc78fd744ef0dbcf4fe0f0fe9b13326
3
+ metadata.gz: dcc4ca0305423aba4587a2cc331db7764a1f3847762a08efecb5690d8d53f959
4
+ data.tar.gz: a1944f100d9652beb0eae95cad0b4aa55e6ad02dacafad3566c7e4909072b7df
5
5
  SHA512:
6
- metadata.gz: c480fc1288acfb2e6d60928c6861c919aa993c7270c5ab8b6966729ff6317ad439dadf6976a61b3ab35cc9e5fb5bb5f020de403fc84f77956f220624f4690ff7
7
- data.tar.gz: 11b7ef53df6aaef295c61872756ef63ace7d37229cf8b5710cdb3dacfbe4aa7adcdd6f9ebfc274df4461e40f205e2fa2271ab520d161225300200e23c83dcf30
6
+ metadata.gz: e7557ba5531342f6a782183318409a3fe77d6574731324a8369899ec7b7dbdb0d1f5a8e1913eb29cc4e60afd69cb584f00e5da47db592cb5c52ee8b5e8f2cca6
7
+ data.tar.gz: 99b84e4160ea1730c74cbe2d6d035a4334cfa008fa12a7cdf3a17682f700d5cfe1de5e632a143f3a071a54e994bef68297569c8855611f919a4c5a59cf4d45ff
@@ -51,46 +51,51 @@ module CorreiosApi
51
51
  @expires_in = Time.new(response.json.dig("expiraEm"))
52
52
  end
53
53
 
54
- def create_pre_shipping nome_remet:, cpf_cnpj_remet:, cep_remet:, rua_remet:, numero_remet:, bairro_remet:, cidade_remet:, uf_remet:, nome_dest:, cpf_cnpj_dest:, cep_dest:, rua_dest:, numero_dest:, bairro_dest:, cidade_dest:, uf_dest:, codigo_servico:, preco_pre_postagem:, itens:, peso_gramas:, altura_cm: 15, largura_cm: 15, comprimento_cm: 15
54
+ def tracking_package tracking_code, result_type = "T"
55
+ response = get("/srorastro/v1/objetos/#{tracking_code}?resultado=#{result_type}")
56
+ Tracking.new(response.json)
57
+ end
58
+
59
+ def create_pre_shipping shipper_name:, shipper_tax_id:, shipper_zipcode:, shipper_street:, shipper_address_number:, shipper_district:, shipper_city:, shipper_state_code:, receiver_name:, receiver_tax_id:, receiver_zipcode:, receiver_street:, receiver_address_number:, receiver_district:, receiver_city:, receiver_state_code:, service_code:, price:, items:, weight_g:, height_cm: 15, width_cm: 15, length_cm: 15
55
60
  body = {
56
61
  idCorreios: @username,
57
62
  remetente: {
58
- nome: nome_remet,
59
- cpfCnpj: cpf_cnpj_remet,
63
+ nome: shipper_name,
64
+ cpfCnpj: shipper_tax_id,
60
65
  endereco: {
61
- cep: cep_remet,
62
- logradouro: rua_remet,
63
- numero: numero_remet,
64
- bairro: bairro_remet,
65
- cidade: cidade_remet,
66
- uf: uf_remet
66
+ cep: shipper_zipcode,
67
+ logradouro: shipper_street,
68
+ numero: shipper_address_number,
69
+ bairro: shipper_district,
70
+ cidade: shipper_city,
71
+ uf: shipper_state_code
67
72
  }
68
73
  },
69
74
  destinatario: {
70
- nome: nome_dest,
71
- cpfCnpj: cpf_cnpj_dest,
75
+ nome: receiver_name,
76
+ cpfCnpj: receiver_tax_id,
72
77
  endereco: {
73
- cep: cep_dest,
74
- logradouro: rua_dest,
75
- numero: numero_dest,
76
- bairro: bairro_dest,
77
- cidade: cidade_dest,
78
- uf: uf_dest
78
+ cep: receiver_zipcode,
79
+ logradouro: receiver_street,
80
+ numero: receiver_address_number,
81
+ bairro: receiver_district,
82
+ cidade: receiver_city,
83
+ uf: receiver_state_code
79
84
  }
80
85
  },
81
- codigoServico: codigo_servico,
82
- precoPrePostagem: preco_pre_postagem,
86
+ codigoServico: service_code,
87
+ precoPrePostagem: price,
83
88
  numeroCartaoPostagem: @post_card,
84
- itensDeclaracaoConteudo: itens, # conteudo, quantidade, valor
85
- pesoInformado: peso_gramas,
89
+ itensDeclaracaoConteudo: items, # conteudo, quantidade, valor
90
+ pesoInformado: weight_g,
86
91
  codigoFormatoObjetoInformado: "2",
87
- alturaInformada: altura_cm,
88
- larguraInformada: largura_cm,
89
- comprimentoInformado: comprimento_cm,
92
+ alturaInformada: height_cm,
93
+ larguraInformada: width_cm,
94
+ comprimentoInformado: length_cm,
90
95
  cienteObjetoNaoProibido: "1",
91
- modalidadePagamento: "2" # 1-à vista, 2-à faturar, 3- à avista e à afaturar e 4- Prestação de contas recebimento ou pagamento
96
+ modalidadePagamento: "2", # 1-à vista, 2-à faturar, 3- à avista e à afaturar e 4- Prestação de contas recebimento ou pagamento
92
97
  # solicitarColeta: "N",
93
- # dataPrevistaPostagem: "20/09/2024"
98
+ # dataPrevistaPostagem: "29/09/2024"
94
99
  }
95
100
 
96
101
  response = post(
@@ -104,7 +109,7 @@ module CorreiosApi
104
109
  def create_label pre_shipping
105
110
  body = {
106
111
  codigosObjeto: [
107
- pre_shipping.codigo_objeto
112
+ pre_shipping.tracking_code
108
113
  ],
109
114
  idCorreios: @username,
110
115
  numeroCartaoPostagem: @post_card,
@@ -131,11 +136,11 @@ module CorreiosApi
131
136
  Label.new(response.json)
132
137
  end
133
138
 
134
- def create_rates cep_origem:, cep_destino:, weight_g: 1000, height_cm: 15, width_cm: 15, length_cm: 15
135
- services_with_time = delivery_time(cep_origem, cep_destino)
136
- services_with_cost = delivery_cost(cep_origem, cep_destino, weight_g, height_cm, width_cm, length_cm)
139
+ def create_rates zipcode_from:, zipcode_to:, weight_g: 1000, height_cm: 15, width_cm: 15, length_cm: 15
140
+ services_with_time = delivery_time(zipcode_from, zipcode_to)
141
+ services_with_cost = delivery_cost(zipcode_from, zipcode_to, weight_g, height_cm, width_cm, length_cm)
137
142
 
138
- services_with_time.map do |service_time|
143
+ rates = services_with_time.map do |service_time|
139
144
  service_cost = services_with_cost.find { |service| service["coProduto"] == service_time["coProduto"] }
140
145
  Rate.new(
141
146
  service_name: SERVICE_NAMES[service_time["coProduto"]],
@@ -150,12 +155,13 @@ module CorreiosApi
150
155
  ].compact
151
156
  )
152
157
  end
158
+ ShippingQuotes.new(rates)
153
159
  end
154
160
 
155
- def delivery_time cep_origem, cep_destino
161
+ def delivery_time zipcode_from, zipcode_to
156
162
  body = {
157
163
  idLote: "1",
158
- parametrosPrazo: SERVICES.map { |service| { coProduto: service[:code], nuRequisicao: 1, cepOrigem: cep_origem, cepDestino: cep_destino } }
164
+ parametrosPrazo: SERVICES.map { |service| { coProduto: service[:code], nuRequisicao: 1, cepOrigem: zipcode_from, cepDestino: zipcode_to } }
159
165
  }
160
166
  response = post(
161
167
  "/prazo/v1/nacional",
@@ -165,13 +171,13 @@ module CorreiosApi
165
171
  response.json
166
172
  end
167
173
 
168
- def delivery_cost cep_origem, cep_destino, weight_g, height_cm, width_cm, length_cm
174
+ def delivery_cost zipcode_from, zipcode_to, weight_g, height_cm, width_cm, length_cm
169
175
  params_produto = SERVICES.map do |service|
170
176
  {
171
177
  coProduto: service[:code],
172
178
  nuRequisicao: "1",
173
- cepOrigem: cep_origem,
174
- cepDestino: cep_destino,
179
+ cepOrigem: zipcode_from,
180
+ cepDestino: zipcode_to,
175
181
  psObjeto: weight_g,
176
182
  altura: height_cm,
177
183
  largura: width_cm,
@@ -1,21 +1,21 @@
1
1
  module CorreiosApi
2
2
  class PreShipping
3
3
 
4
- attr_reader :response, :external_id, :codigo_objeto, :codigo_servico, :modalidade_pagamento, :preco_pre_postagem, :itens_declarados, :data_prevista_postagem, :prazo_postagem, :status, :desc_status, :tipo_rotulo, :tipo_objeto
4
+ attr_reader :response, :external_id, :tracking_code, :service_code, :payment_method_id, :price, :items, :post_prevision, :posting_deadline, :status, :status_detail, :label_type, :package_type
5
5
  def initialize response
6
6
  @response = response
7
7
  @external_id = response.dig("id")
8
- @codigo_objeto = response.dig("codigoObjeto")
9
- @codigo_servico = response.dig("codigoServico")
10
- @modalidade_pagamento = response.dig("modalidadePagamento")
11
- @preco_pre_postagem = response.dig("precoPrePostagem")
12
- @itens_declarados = response.dig("itensDeclaracaoConteudo")
13
- @data_prevista_postagem = response.dig("dataPrevistaPostagem")
14
- @prazo_postagem = response.dig("prazoPostagem")
8
+ @tracking_code = response.dig("codigoObjeto")
9
+ @service_code = response.dig("codigoServico")
10
+ @payment_method_id = response.dig("modalidadePagamento")
11
+ @price = response.dig("precoPrePostagem")
12
+ @items = response.dig("itensDeclaracaoConteudo")
13
+ @post_prevision = response.dig("dataPrevistaPostagem")
14
+ @posting_deadline = response.dig("prazoPostagem")
15
15
  @status = response.dig("statusAtual")
16
- @desc_status = response.dig("descStatusAtual")
17
- @tipo_rotulo = response.dig("tipoRotulo")
18
- @tipo_objeto = response.dig("tipoObjeto")
16
+ @status_detail = response.dig("descStatusAtual")
17
+ @label_type = response.dig("tipoRotulo")
18
+ @package_type = response.dig("tipoObjeto")
19
19
  end
20
20
  end
21
21
  end
@@ -1,7 +1,7 @@
1
1
  module CorreiosApi
2
2
  class Rate
3
3
  attr_reader :service_name, :service_code, :price, :delivery_time_in_days, :max_delivery_time, :message, :errors
4
- def initialize service_name:, service_code:, price:, delivery_time_in_days:, max_delivery_time:, message: nil, errors: nil
4
+ def initialize service_name:, service_code:, price:, delivery_time_in_days:, max_delivery_time:, message: nil, errors: []
5
5
  @service_name = service_name
6
6
  @service_code = service_code
7
7
  @price = transform_price(price)
@@ -14,7 +14,7 @@ module CorreiosApi
14
14
  private
15
15
 
16
16
  def transform_price price
17
- return nil unless price
17
+ return 0.0 unless price
18
18
  price.gsub(",", ".").to_f
19
19
  end
20
20
 
@@ -0,0 +1,21 @@
1
+ module CorreiosApi
2
+ class ShippingQuotes
3
+
4
+ attr_reader :rates
5
+ def initialize rates
6
+ @rates = rates
7
+ end
8
+
9
+ def cheaper_rate
10
+ valid_rates.sort_by(&:price).first
11
+ end
12
+
13
+ def faster_rate
14
+ valid_rates.sort_by(&:delivery_time_in_days).first
15
+ end
16
+
17
+ def valid_rates
18
+ @rates.select { |rate| rate.price > 0 && rate.errors.empty? }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module CorreiosApi
2
+ class Tracking
3
+
4
+ attr_reader :response, :tracking_code, :sigla, :descricao, :categoria, :data_prevista, :weight_g, :height_cm, :width_cm, :length_cm, :formato, :modalidade, :eventos
5
+ def initialize response
6
+ @tracking_code = response.dig("objetos", 0, "codObjeto")
7
+ @sigla = response.dig("objetos", 0, "tipoPostal", "sigla")
8
+ @descricao = response.dig("objetos", 0, "tipoPostal", "descricao")
9
+ @categoria = response.dig("objetos", 0, "tipoPostal", "categoria")
10
+ @data_prevista = response.dig("objetos", 0, "dtPrevista")
11
+ @weight_g = response.dig("objetos", 0, "peso") * 1000
12
+ @height_cm = response.dig("objetos", 0, "altura")
13
+ @width_cm = response.dig("objetos", 0, "largura")
14
+ @length_cm = response.dig("objetos", 0, "comprimento")
15
+ @formato = response.dig("objetos", 0, "formato")
16
+ @modalidade = response.dig("objetos", 0, "modalidade")
17
+ @eventos = response.dig("objetos", 0, "eventos")
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CorreiosApi
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/correios_api.rb CHANGED
@@ -7,6 +7,8 @@ require "correios_api/client"
7
7
  require "correios_api/rate"
8
8
  require "correios_api/pre_shipping"
9
9
  require "correios_api/label"
10
+ require "correios_api/shipping_quotes"
11
+ require "correios_api/tracking"
10
12
 
11
13
  module CorreiosApi
12
14
  class Error < StandardError; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correios_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todas Essas Coisas
@@ -56,6 +56,8 @@ files:
56
56
  - lib/correios_api/label.rb
57
57
  - lib/correios_api/pre_shipping.rb
58
58
  - lib/correios_api/rate.rb
59
+ - lib/correios_api/shipping_quotes.rb
60
+ - lib/correios_api/tracking.rb
59
61
  - lib/correios_api/version.rb
60
62
  - sig/correios_api.rbs
61
63
  homepage: https://github.com/todasessascoisas/correios_api