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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/lib/SRO/client.rb +25 -0
  3. data/lib/SRO/helper.rb +118 -0
  4. data/lib/SRO/requests/track_shippings.rb +142 -0
  5. data/lib/SRO/requests/track_shippings_list.rb +144 -0
  6. data/lib/correios_exception.rb +11 -0
  7. data/lib/correios_gem.rb +186 -0
  8. data/lib/credentials.rb +27 -0
  9. data/lib/pricefier/client.rb +20 -0
  10. data/lib/pricefier/helper.rb +72 -0
  11. data/lib/pricefier/requests/calculate_deadline.rb +100 -0
  12. data/lib/pricefier/requests/calculate_deadline_with_date.rb +102 -0
  13. data/lib/pricefier/requests/calculate_deadline_with_restrictions.rb +102 -0
  14. data/lib/pricefier/requests/calculate_price.rb +123 -0
  15. data/lib/pricefier/requests/calculate_price_deadline.rb +138 -0
  16. data/lib/pricefier/requests/calculate_price_deadline_with_date.rb +142 -0
  17. data/lib/pricefier/requests/calculate_price_deadline_with_restrictions.rb +142 -0
  18. data/lib/pricefier/requests/calculate_price_fac.rb +106 -0
  19. data/lib/pricefier/requests/calculate_price_with_date.rb +125 -0
  20. data/lib/pricefier/requests/list_services.rb +87 -0
  21. data/lib/pricefier/requests/list_services_star.rb +87 -0
  22. data/lib/reverse_logistics/client.rb +34 -0
  23. data/lib/reverse_logistics/helper.rb +95 -0
  24. data/lib/reverse_logistics/requests/calculate_ticket_number_check_digit.rb +66 -0
  25. data/lib/reverse_logistics/requests/cancel_shipping.rb +70 -0
  26. data/lib/reverse_logistics/requests/create_shippings.rb +166 -0
  27. data/lib/reverse_logistics/requests/create_shippings_with_collection.rb +152 -0
  28. data/lib/reverse_logistics/requests/request_ticket_numbers.rb +90 -0
  29. data/lib/reverse_logistics/requests/track_shipping.rb +121 -0
  30. data/lib/reverse_logistics/requests/track_shippings_by_date.rb +133 -0
  31. data/lib/sigep/client.rb +29 -0
  32. data/lib/sigep/helper.rb +234 -0
  33. data/lib/sigep/requests/calculate_label_number_check_digit.rb +72 -0
  34. data/lib/sigep/requests/cancel_shipping.rb +72 -0
  35. data/lib/sigep/requests/check_card_status.rb +69 -0
  36. data/lib/sigep/requests/check_service_availability.rb +91 -0
  37. data/lib/sigep/requests/create_shippings.rb +70 -0
  38. data/lib/sigep/requests/request_label_numbers.rb +76 -0
  39. data/lib/sigep/requests/request_shippings_xml.rb +208 -0
  40. data/lib/sigep/requests/search_available_additional_services.rb +62 -0
  41. data/lib/sigep/requests/search_customer.rb +129 -0
  42. data/lib/sigep/requests/search_zip_code.rb +63 -0
  43. data/lib/sigep/requests/track_shippings.rb +145 -0
  44. metadata +145 -0
@@ -0,0 +1,29 @@
1
+ require 'savon'
2
+
3
+ module Correios
4
+ module Sigep
5
+ class Client
6
+ def client
7
+ Savon.client(
8
+ wsdl: wsdl,
9
+ ssl_verify_mode: :none
10
+ )
11
+ end
12
+
13
+ private
14
+
15
+ def wsdl
16
+ if test_env?
17
+ 'https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
18
+ else
19
+ 'https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
20
+ end
21
+ end
22
+
23
+ def test_env?
24
+ (defined?(Rails) && ENV['RAILS_ENV'].in?(%w[test development]) ||
25
+ ENV['GEM_ENV'].in?(%w[test development]))
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,234 @@
1
+ require 'date'
2
+
3
+ module Correios
4
+ module Sigep
5
+ class Helper
6
+ def namespaces
7
+ {
8
+ 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
9
+ 'xmlns:ns1' => 'http://cliente.bean.master.sigep.bsb.correios.com.br/'
10
+ }
11
+ end
12
+
13
+ def shippings_xml(data)
14
+ credentials = Correios.credentials
15
+ sender = data[:sender]
16
+ sender_address = sender[:address]
17
+ shippings = data[:shippings]
18
+
19
+ Nokogiri::XML::Builder.new(encoding: 'ISO-8859-1') do |xml|
20
+ xml.correioslog do
21
+ xml.tipo_arquivo 'Postagem'
22
+ xml.versao_arquivo '2.3'
23
+ xml.plp do
24
+ xml.id_plp
25
+ xml.valor_global
26
+ xml.mcu_unidade_postagem
27
+ xml.nome_unidade_postagem
28
+ xml.cartao_postagem credentials.card
29
+ end
30
+ xml.remetente do
31
+ xml.numero_contrato credentials.contract
32
+ xml.numero_diretoria sender[:board_id]
33
+ xml.codigo_administrativo credentials.administrative_code
34
+ xml.nome_remetente sender[:name]
35
+ xml.logradouro_remetente sender_address[:street]
36
+ xml.numero_remetente sender_address[:number]
37
+ xml.complemento_remetente sender_address[:additional]
38
+ xml.bairro_remetente sender_address[:neighborhood]
39
+ xml.cep_remetente sender_address[:zip_code]
40
+ xml.cidade_remetente sender_address[:city]
41
+ xml.uf_remetente sender_address[:state]
42
+ xml.telefone_remetente sender[:phone]
43
+ xml.fax_remetente sender[:fax]
44
+ xml.email_remetente sender[:email]
45
+ end
46
+ xml.forma_pagamento payment_method(data[:payment_method])
47
+ shippings.each do |shipping|
48
+ receiver = shipping[:receiver]
49
+ receiver_address = receiver[:address]
50
+ object = shipping[:object]
51
+ invoice = shipping[:invoice] || {}
52
+ additional_services = shipping[:additional_services] || []
53
+ notes = shipping[:notes] || []
54
+
55
+ xml.objeto_postal do
56
+ xml.numero_etiqueta shipping[:label_number]
57
+ xml.codigo_objeto_cliente shipping[:code]
58
+ xml.codigo_servico_postagem shipping[:service_code]
59
+ xml.cubagem 0
60
+ xml.peso object[:weight]
61
+ xml.rt1 notes[0]
62
+ xml.rt2 notes[1]
63
+ xml.destinatario do
64
+ xml.nome_destinatario receiver[:name]
65
+ xml.telefone_destinatario receiver[:phone]
66
+ xml.celular_destinatario receiver[:cellphone]
67
+ xml.email_destinatario receiver[:email]
68
+ xml.logradouro_destinatario receiver_address[:street]
69
+ xml.complemento_destinatario receiver_address[:additional]
70
+ xml.numero_end_destinatario receiver_address[:number]
71
+ end
72
+ xml.nacional do
73
+ xml.bairro_destinatario receiver_address[:neighborhood]
74
+ xml.cidade_destinatario receiver_address[:city]
75
+ xml.uf_destinatario receiver_address[:state]
76
+ xml.cep_destinatario receiver_address[:zip_code]
77
+ xml.codigo_usuario_postal
78
+ xml.centro_custo_cliente shipping[:cost_center]
79
+ xml.numero_nota_fiscal invoice[:number]
80
+ xml.serie_nota_fiscal invoice[:serie]
81
+ xml.valor_nota_fiscal invoice[:value]
82
+ xml.natureza_nota_fiscal invoice[:kind]
83
+ xml.descricao_objeto shipping[:description]
84
+ xml.valor_a_cobrar shipping[:additional_value]
85
+ end
86
+ xml.servico_adicional do
87
+ additional_services.each do |additional_service|
88
+ xml.codigo_servico_adicional additional_service
89
+ end
90
+ xml.valor_declarado shipping[:declared_value]
91
+ end
92
+ xml.dimensao_objeto do
93
+ xml.tipo_objeto object_type(object[:type])
94
+ xml.dimensao_altura object[:height] || 0
95
+ xml.dimensao_largura object[:width] || 0
96
+ xml.dimensao_comprimento object[:length] || 0
97
+ xml.dimensao_diametro object[:diameter] || 0
98
+ end
99
+ xml.data_postagem_sara
100
+ xml.status_processamento 0
101
+ xml.numero_comprovante_postagem
102
+ xml.valor_cobrado
103
+ end
104
+ end
105
+ end
106
+ end.to_xml.encode(Encoding::UTF_8)
107
+ end
108
+
109
+ def label_without_digit_checker(label_number)
110
+ label_number.slice!(10)
111
+ label_number
112
+ end
113
+
114
+ def convert_string_to_bool(string)
115
+ string.strip == 'S'
116
+ end
117
+
118
+ def convert_string_to_date(date, time)
119
+ DateTime.strptime("#{date} #{time}", '%d/%m/%Y %H:%M')
120
+ end
121
+
122
+ def convert_string_to_decimal(string)
123
+ return nil if string.nil?
124
+
125
+ string.tr(',', '.').to_f
126
+ end
127
+
128
+ def tracking_event_status(event)
129
+ type = event['tipo']
130
+ status = event['status'].to_i
131
+
132
+ case type
133
+ when 'BDE', 'BDI', 'BDR'
134
+ case status
135
+ when 0, 1
136
+ return :delivered
137
+ when 2
138
+ return :not_delivered
139
+ when 4, 5, 6, 8, 10, 21, 22, 26, 33, 36, 40, 42, 48, 49, 56
140
+ return :returning
141
+ when 7, 19, 25, 32, 38, 41, 45, 46, 47, 53, 57, 66, 69
142
+ return :in_transit
143
+ when 9, 50, 51, 52
144
+ return :stolen_lost
145
+ when 3, 12, 24
146
+ return :awaiting_pick_up
147
+ when 20, 34, 35
148
+ return :not_delivered
149
+ when 23
150
+ return :returned
151
+ when 28, 37
152
+ return :damaged
153
+ when 43
154
+ return :arrested
155
+ when 54, 55, 58, 59
156
+ return :taxing
157
+ end
158
+ when 'BLQ', 'PMT', 'CD', 'CMT', 'TRI', 'CUN', 'RO', 'DO', 'EST', 'PAR'
159
+ case status
160
+ when 0, 1, 2, 3, 4, 5, 6, 9, 15, 16, 17, 18
161
+ return :in_transit
162
+ end
163
+ when 'FC'
164
+ case status
165
+ when 1
166
+ return :returning
167
+ when 2, 3, 5, 7
168
+ return :in_transit
169
+ when 4
170
+ return :not_delivered
171
+ end
172
+ when 'IDC'
173
+ case status
174
+ when 1, 2, 3, 4, 5, 6, 7
175
+ return :stolen_lost
176
+ end
177
+ when 'LDI'
178
+ case status
179
+ when 0, 1, 2, 3, 14
180
+ return :awaiting_pick_up
181
+ end
182
+ when 'OEC', 'LDE'
183
+ case status
184
+ when 0, 1, 9
185
+ return :delivering
186
+ end
187
+ when 'PO', 'CO'
188
+ case status
189
+ when 0, 1, 9
190
+ return :posted
191
+ end
192
+ end
193
+ end
194
+
195
+ private
196
+
197
+ def convert_decimal_to_string(decimal)
198
+ return nil if decimal.nil?
199
+
200
+ decimal.to_s.tr('.', ',')
201
+ end
202
+
203
+ def object_type(type)
204
+ case type
205
+ when :letter_envelope
206
+ '001'
207
+ when :box
208
+ '002'
209
+ when :prism
210
+ '002'
211
+ when :cylinder
212
+ '003'
213
+ end
214
+ end
215
+
216
+ def payment_method(method)
217
+ case method
218
+ when :postal_vouncher
219
+ 1
220
+ when :postal_refound
221
+ 2
222
+ when :exchange_contract
223
+ 3
224
+ when :credit_card
225
+ 4
226
+ when :other
227
+ 5
228
+ when :to_bill
229
+ nil
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,72 @@
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 CalculateLabelNumberCheckDigit < 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
+ @label_numbers = data[:label_numbers]
19
+ super()
20
+ end
21
+
22
+ def request
23
+ puts xml if @show_request == true
24
+ begin
25
+ format_response(CLIENT.client.call(:gera_digito_verificador_etiquetas,
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'].geraDigitoVerificadorEtiquetas do
40
+ parent_namespace = xml.parent.namespace
41
+ xml.parent.namespace = nil
42
+
43
+ @label_numbers.each do |label_number|
44
+ xml.etiquetas label_number
45
+ end
46
+ xml.usuario @credentials.sigep_user
47
+ xml.senha @credentials.sigep_password
48
+
49
+ xml.parent.namespace = parent_namespace
50
+ end
51
+ end
52
+ end
53
+ end.doc.root.to_xml
54
+ end
55
+
56
+ def format_response(response)
57
+ response = response[:gera_digito_verificador_etiquetas_response][:return]
58
+ response = [response] if response.is_a?(Hash)
59
+
60
+ { digit_checkers: format_digit_checkers(response) }
61
+ end
62
+
63
+ def format_digit_checkers(digit_checkers)
64
+ formatted_digit_checkers = []
65
+ digit_checkers.each do |digit_check|
66
+ formatted_digit_checkers << digit_check.to_i
67
+ end
68
+ formatted_digit_checkers
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,72 @@
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 CancelShipping < 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
+ @label_number = data[:label_number]
19
+ @request_id = data[:request_id]
20
+ super()
21
+ end
22
+
23
+ def request
24
+ puts xml if @show_request == true
25
+ begin
26
+ format_response(CLIENT.client.call(:bloquear_objeto,
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'].bloquearObjeto do
41
+ parent_namespace = xml.parent.namespace
42
+ xml.parent.namespace = nil
43
+
44
+ xml.numeroEtiqueta @label_number
45
+ xml.idPlp @request_id
46
+ xml.tipoBloqueio 'FRAUDE_BLOQUEIO'
47
+ xml.acao 'DEVOLVIDO_AO_REMETENTE'
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[:bloquear_objeto_response][:return]
60
+
61
+ { status: convert_status_to_symbol(response) }
62
+ end
63
+
64
+ def convert_status_to_symbol(status)
65
+ case status
66
+ when 'Registro gravado'
67
+ :ok
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,69 @@
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 CheckCardStatus < 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
+ super()
19
+ end
20
+
21
+ def request
22
+ puts xml if @show_request == true
23
+ begin
24
+ format_response(CLIENT.client.call(:get_status_cartao_postagem,
25
+ soap_action: '',
26
+ xml: xml).to_hash)
27
+ rescue Savon::SOAPFault => error
28
+ generate_exception(error)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def xml
35
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
36
+ xml['soap'].Envelope(HELPER.namespaces) do
37
+ xml['soap'].Body do
38
+ xml['ns1'].getStatusCartaoPostagem do
39
+ parent_namespace = xml.parent.namespace
40
+ xml.parent.namespace = nil
41
+
42
+ xml.numeroCartaoPostagem @credentials.card
43
+ xml.usuario @credentials.sigep_user
44
+ xml.senha @credentials.sigep_password
45
+
46
+ xml.parent.namespace = parent_namespace
47
+ end
48
+ end
49
+ end
50
+ end.doc.root.to_xml
51
+ end
52
+
53
+ def format_response(response)
54
+ response = response[:get_status_cartao_postagem_response][:return]
55
+
56
+ { status: convert_status_to_symbol(response) }
57
+ end
58
+
59
+ def convert_status_to_symbol(status)
60
+ case status
61
+ when 'Normal'
62
+ :ok
63
+ when 'Cancelado'
64
+ :canceled
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end