correios_gem 1.4.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 +7 -0
- data/lib/SRO/client.rb +25 -0
- data/lib/SRO/helper.rb +118 -0
- data/lib/SRO/requests/track_shippings.rb +142 -0
- data/lib/SRO/requests/track_shippings_list.rb +144 -0
- data/lib/correios_exception.rb +11 -0
- data/lib/correios_gem.rb +186 -0
- data/lib/credentials.rb +27 -0
- data/lib/pricefier/client.rb +20 -0
- data/lib/pricefier/helper.rb +72 -0
- data/lib/pricefier/requests/calculate_deadline.rb +100 -0
- data/lib/pricefier/requests/calculate_deadline_with_date.rb +102 -0
- data/lib/pricefier/requests/calculate_deadline_with_restrictions.rb +102 -0
- data/lib/pricefier/requests/calculate_price.rb +123 -0
- data/lib/pricefier/requests/calculate_price_deadline.rb +138 -0
- data/lib/pricefier/requests/calculate_price_deadline_with_date.rb +142 -0
- data/lib/pricefier/requests/calculate_price_deadline_with_restrictions.rb +142 -0
- data/lib/pricefier/requests/calculate_price_fac.rb +106 -0
- data/lib/pricefier/requests/calculate_price_with_date.rb +125 -0
- data/lib/pricefier/requests/list_services.rb +87 -0
- data/lib/pricefier/requests/list_services_star.rb +87 -0
- data/lib/reverse_logistics/client.rb +34 -0
- data/lib/reverse_logistics/helper.rb +95 -0
- data/lib/reverse_logistics/requests/calculate_ticket_number_check_digit.rb +66 -0
- data/lib/reverse_logistics/requests/cancel_shipping.rb +70 -0
- data/lib/reverse_logistics/requests/create_shippings.rb +166 -0
- data/lib/reverse_logistics/requests/create_shippings_with_collection.rb +152 -0
- data/lib/reverse_logistics/requests/request_ticket_numbers.rb +90 -0
- data/lib/reverse_logistics/requests/track_shipping.rb +121 -0
- data/lib/reverse_logistics/requests/track_shippings_by_date.rb +133 -0
- data/lib/sigep/client.rb +29 -0
- data/lib/sigep/helper.rb +234 -0
- data/lib/sigep/requests/calculate_label_number_check_digit.rb +72 -0
- data/lib/sigep/requests/cancel_shipping.rb +72 -0
- data/lib/sigep/requests/check_card_status.rb +69 -0
- data/lib/sigep/requests/check_service_availability.rb +91 -0
- data/lib/sigep/requests/create_shippings.rb +70 -0
- data/lib/sigep/requests/request_label_numbers.rb +76 -0
- data/lib/sigep/requests/request_shippings_xml.rb +208 -0
- data/lib/sigep/requests/search_available_additional_services.rb +62 -0
- data/lib/sigep/requests/search_customer.rb +129 -0
- data/lib/sigep/requests/search_zip_code.rb +63 -0
- data/lib/sigep/requests/track_shippings.rb +145 -0
- metadata +145 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class CheckServiceAvailability < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@service_code = data[:service_code]
|
19
|
+
@source_zip_code = data[:source_zip_code]
|
20
|
+
@target_zip_code = data[:target_zip_code]
|
21
|
+
super()
|
22
|
+
end
|
23
|
+
|
24
|
+
def request
|
25
|
+
puts xml if @show_request == true
|
26
|
+
begin
|
27
|
+
format_response(CLIENT.client.call(:verifica_disponibilidade_servico,
|
28
|
+
soap_action: '',
|
29
|
+
xml: xml).to_hash)
|
30
|
+
rescue Savon::SOAPFault => error
|
31
|
+
generate_exception(error)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def xml
|
38
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
39
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
40
|
+
xml['soap'].Body do
|
41
|
+
xml['ns1'].verificaDisponibilidadeServico do
|
42
|
+
parent_namespace = xml.parent.namespace
|
43
|
+
xml.parent.namespace = nil
|
44
|
+
|
45
|
+
xml.numeroServico @service_code
|
46
|
+
xml.cepOrigem @source_zip_code
|
47
|
+
xml.cepDestino @target_zip_code
|
48
|
+
xml.codAdministrativo @credentials.administrative_code
|
49
|
+
xml.usuario @credentials.sigep_user
|
50
|
+
xml.senha @credentials.sigep_password
|
51
|
+
|
52
|
+
xml.parent.namespace = parent_namespace
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end.doc.root.to_xml
|
57
|
+
end
|
58
|
+
|
59
|
+
def format_response(response)
|
60
|
+
response = response[:verifica_disponibilidade_servico_response][:return]
|
61
|
+
response = response.split('#')
|
62
|
+
|
63
|
+
{
|
64
|
+
status: convert_availability_to_symbol(response[0]),
|
65
|
+
message: response[1]
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def convert_availability_to_symbol(availability)
|
70
|
+
case availability.to_i
|
71
|
+
when 0, 11
|
72
|
+
:available
|
73
|
+
when -2, -3
|
74
|
+
:invalid_zip_code
|
75
|
+
when -33
|
76
|
+
:system_down
|
77
|
+
when -34, -35, 1
|
78
|
+
:incorrect_data
|
79
|
+
when -36, -37, -38
|
80
|
+
:unauthorized
|
81
|
+
when -888, 6, 7, 8, 9, 12
|
82
|
+
:unavailable
|
83
|
+
when 10
|
84
|
+
:partially_available
|
85
|
+
when 99
|
86
|
+
:error
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class CreateShippings < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@data = data
|
19
|
+
@shippings = data[:shippings]
|
20
|
+
@request_number = data[:request_number]
|
21
|
+
super()
|
22
|
+
end
|
23
|
+
|
24
|
+
def request
|
25
|
+
puts xml if @show_request == true
|
26
|
+
begin
|
27
|
+
format_response(CLIENT.client.call(:fecha_plp_varios_servicos,
|
28
|
+
soap_action: '',
|
29
|
+
xml: xml).to_hash)
|
30
|
+
rescue Savon::SOAPFault => error
|
31
|
+
generate_exception(error)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def format_response(response)
|
38
|
+
response = response[:fecha_plp_varios_servicos_response][:return]
|
39
|
+
|
40
|
+
{ request_id: response }
|
41
|
+
end
|
42
|
+
|
43
|
+
def xml
|
44
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
45
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
46
|
+
xml['soap'].Body do
|
47
|
+
xml['ns1'].fechaPlpVariosServicos do
|
48
|
+
parent_namespace = xml.parent.namespace
|
49
|
+
xml.parent.namespace = nil
|
50
|
+
|
51
|
+
xml.xml HELPER.shippings_xml(@data)
|
52
|
+
xml.idPlpCliente @request_number
|
53
|
+
xml.cartaoPostagem @credentials.card
|
54
|
+
@shippings.each do |shipping|
|
55
|
+
xml.listaEtiquetas HELPER.label_without_digit_checker(
|
56
|
+
shipping[:label_number].dup
|
57
|
+
)
|
58
|
+
end
|
59
|
+
xml.usuario @credentials.sigep_user
|
60
|
+
xml.senha @credentials.sigep_password
|
61
|
+
|
62
|
+
xml.parent.namespace = parent_namespace
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end.doc.root.to_xml
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class RequestLabelNumbers < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@amount = data[:amount]
|
19
|
+
@service_id = data[:service_id]
|
20
|
+
super()
|
21
|
+
end
|
22
|
+
|
23
|
+
def request
|
24
|
+
puts xml if @show_request == true
|
25
|
+
begin
|
26
|
+
format_response(CLIENT.client.call(:solicita_etiquetas,
|
27
|
+
soap_action: '',
|
28
|
+
xml: xml).to_hash)
|
29
|
+
rescue Savon::SOAPFault => error
|
30
|
+
generate_exception(error)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def xml
|
37
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
38
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
39
|
+
xml['soap'].Body do
|
40
|
+
xml['ns1'].solicitaEtiquetas do
|
41
|
+
parent_namespace = xml.parent.namespace
|
42
|
+
xml.parent.namespace = nil
|
43
|
+
|
44
|
+
xml.tipoDestinatario 'C'
|
45
|
+
xml.idServico @service_id
|
46
|
+
xml.qtdEtiquetas @amount
|
47
|
+
xml.identificador @credentials.cnpj
|
48
|
+
xml.usuario @credentials.sigep_user
|
49
|
+
xml.senha @credentials.sigep_password
|
50
|
+
|
51
|
+
xml.parent.namespace = parent_namespace
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end.doc.root.to_xml
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_response(response)
|
59
|
+
response = response[:solicita_etiquetas_response][:return]
|
60
|
+
response = response.split(',')
|
61
|
+
|
62
|
+
initial_number = response[0].dup.delete('^0-9').to_i
|
63
|
+
final_number = response[1].dup.delete('^0-9').to_i
|
64
|
+
|
65
|
+
label_numbers = []
|
66
|
+
while initial_number <= final_number do
|
67
|
+
letters = response[0].dup.delete('0-9')
|
68
|
+
label_numbers << letters.insert(2, "#{initial_number}")
|
69
|
+
initial_number += 1
|
70
|
+
end
|
71
|
+
|
72
|
+
{ label_numbers: label_numbers }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,208 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class RequestShippingsXML < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@request_id = data[:request_id]
|
19
|
+
super()
|
20
|
+
end
|
21
|
+
|
22
|
+
def request
|
23
|
+
puts xml if @show_request == true
|
24
|
+
begin
|
25
|
+
format_response(CLIENT.client.call(:solicita_xml_plp,
|
26
|
+
soap_action: '',
|
27
|
+
xml: xml).to_hash)
|
28
|
+
rescue Savon::SOAPFault => error
|
29
|
+
generate_exception(error)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def xml
|
36
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
37
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
38
|
+
xml['soap'].Body do
|
39
|
+
xml['ns1'].solicitaXmlPlp do
|
40
|
+
parent_namespace = xml.parent.namespace
|
41
|
+
xml.parent.namespace = nil
|
42
|
+
|
43
|
+
xml.idPlpMaster @request_id
|
44
|
+
xml.usuario @credentials.sigep_user
|
45
|
+
xml.senha @credentials.sigep_password
|
46
|
+
|
47
|
+
xml.parent.namespace = parent_namespace
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end.doc.root.to_xml
|
52
|
+
end
|
53
|
+
|
54
|
+
def format_response(response)
|
55
|
+
response = response[:solicita_xml_plp_response][:return]
|
56
|
+
response = Hash.from_xml(response)
|
57
|
+
|
58
|
+
request = response['correioslog']['plp']
|
59
|
+
sender = response['correioslog']['remetente']
|
60
|
+
|
61
|
+
shippings = response['correioslog']['objeto_postal']
|
62
|
+
shippings = [shippings] if shippings.is_a?(Hash)
|
63
|
+
|
64
|
+
formatted_shippings = []
|
65
|
+
shippings.each do |shipping|
|
66
|
+
formatted_shippings << format_shipping(shipping)
|
67
|
+
end
|
68
|
+
|
69
|
+
{
|
70
|
+
request_id: request['id_plp'],
|
71
|
+
card: request['cartao_postagem'],
|
72
|
+
global_value: request['valor_global'].to_f,
|
73
|
+
payment_method: payment_method(
|
74
|
+
response['correioslog']['forma_pagamento']
|
75
|
+
),
|
76
|
+
shipping_site: {
|
77
|
+
name: request['nome_unidade_postagem'],
|
78
|
+
code: request['mcu_unidade_postagem']
|
79
|
+
},
|
80
|
+
sender: format_sender(sender),
|
81
|
+
shippings: formatted_shippings
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def format_sender(sender)
|
86
|
+
{
|
87
|
+
contract: sender['numero_contrato'],
|
88
|
+
board_id: sender['numero_diretoria'],
|
89
|
+
administrative_code: sender['codigo_administrativo'],
|
90
|
+
name: sender['nome_remetente'],
|
91
|
+
phone: sender['telefone_remetente'],
|
92
|
+
fax: sender['fax_remetente'],
|
93
|
+
email: sender['email_remetente'],
|
94
|
+
address: {
|
95
|
+
zip_code: sender['cep_remetente'],
|
96
|
+
state: sender['uf_remetente'],
|
97
|
+
city: sender['cidade_remetente'],
|
98
|
+
neighborhood: sender['bairro_remetente'],
|
99
|
+
street: sender['logradouro_remetente'],
|
100
|
+
number: sender['numero_remetente'],
|
101
|
+
additional: sender['complemento_remetente']
|
102
|
+
}
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
def format_shipping(shipping)
|
107
|
+
additional_services = shipping['servico_adicional']['codigo_servico_adicional']
|
108
|
+
additional_services = [additional_services] if additional_services.is_a?(String)
|
109
|
+
|
110
|
+
{
|
111
|
+
label_number: shipping['numero_etiqueta'],
|
112
|
+
service_code: shipping['codigo_servico_postagem'],
|
113
|
+
cost_center: shipping['nacional']['centro_custo_cliente'],
|
114
|
+
description: shipping['nacional']['descricao_objeto'],
|
115
|
+
declared_value: shipping['servico_adicional']['valor_declarado'],
|
116
|
+
value: shipping['valor_cobrado'].to_f,
|
117
|
+
proof_number: shipping['numero_comprovante_postagem'],
|
118
|
+
cubage: shipping['cubagem'].to_f,
|
119
|
+
additional_value: HELPER.convert_string_to_decimal(
|
120
|
+
shipping['nacional']['valor_a_cobrar']
|
121
|
+
),
|
122
|
+
additional_services: additional_services,
|
123
|
+
notes: format_notes(shipping),
|
124
|
+
receiver: format_receiver(
|
125
|
+
shipping['destinatario'], shipping['nacional']
|
126
|
+
),
|
127
|
+
invoice: format_invoice(shipping['nacional']),
|
128
|
+
object: format_object(
|
129
|
+
shipping['dimensao_objeto'], shipping['peso']
|
130
|
+
)
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
def format_notes(shipping)
|
135
|
+
notes = []
|
136
|
+
notes << shipping['rt1'] if shipping['rt1'].present?
|
137
|
+
notes << shipping['rt2'] if shipping['rt2'].present?
|
138
|
+
notes
|
139
|
+
end
|
140
|
+
|
141
|
+
def format_receiver(receiver, national)
|
142
|
+
{
|
143
|
+
name: receiver['nome_destinatario'],
|
144
|
+
phone: receiver['telefone_destinatario'],
|
145
|
+
cellphone: receiver['celular_destinatario'],
|
146
|
+
email: receiver['email_destinatario'],
|
147
|
+
address: {
|
148
|
+
zip_code: national['cep_destinatario'],
|
149
|
+
state: national['uf_destinatario'],
|
150
|
+
city: national['cidade_destinatario'],
|
151
|
+
neighborhood: national['bairro_destinatario'],
|
152
|
+
street: receiver['logradouro_destinatario'],
|
153
|
+
number: receiver['numero_end_destinatario'],
|
154
|
+
additional: receiver['complemento_destinatario']
|
155
|
+
}
|
156
|
+
}
|
157
|
+
end
|
158
|
+
|
159
|
+
def format_invoice(national)
|
160
|
+
{
|
161
|
+
number: national['numero_nota_fiscal'],
|
162
|
+
serie: national['serie_nota_fiscal'],
|
163
|
+
kind: national['natureza_nota_fiscal'],
|
164
|
+
value: national['valor_nota_fiscal']
|
165
|
+
}
|
166
|
+
end
|
167
|
+
|
168
|
+
def format_object(object, weight)
|
169
|
+
{
|
170
|
+
type: object_type(object['tipo_objeto']),
|
171
|
+
height: object['dimensao_altura'].to_f,
|
172
|
+
width: object['dimensao_largura'].to_f,
|
173
|
+
length: object['dimensao_comprimento'].to_f,
|
174
|
+
diameter: object['dimensao_diametro'].to_f,
|
175
|
+
weight: weight.to_f
|
176
|
+
}
|
177
|
+
end
|
178
|
+
|
179
|
+
def payment_method(method)
|
180
|
+
case method
|
181
|
+
when '1'
|
182
|
+
:postal_vouncher
|
183
|
+
when '2'
|
184
|
+
:postal_refound
|
185
|
+
when '3'
|
186
|
+
:exchange_contract
|
187
|
+
when '4'
|
188
|
+
:credit_card
|
189
|
+
when '5'
|
190
|
+
:other
|
191
|
+
when nil
|
192
|
+
:to_bill
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def object_type(type)
|
197
|
+
case type
|
198
|
+
when '1'
|
199
|
+
:letter_envelope
|
200
|
+
when '2'
|
201
|
+
:box_prism
|
202
|
+
when '3'
|
203
|
+
:cylinder
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|