correios_gem 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/correios_gem.gemspec +29 -0
  3. data/lib/SRO/requests/track_shippings.rb +31 -45
  4. data/lib/{credentials.rb → auxiliars/credentials.rb} +0 -0
  5. data/lib/auxiliars/environments.rb +94 -0
  6. data/lib/auxiliars/exception.rb +5 -0
  7. data/lib/auxiliars/helper.rb +404 -0
  8. data/lib/correios_gem.rb +22 -24
  9. data/lib/pricefier/requests/calculate_deadline.rb +27 -45
  10. data/lib/pricefier/requests/calculate_price.rb +34 -53
  11. data/lib/pricefier/requests/calculate_price_deadline.rb +49 -63
  12. data/lib/pricefier/requests/calculate_price_fac.rb +21 -46
  13. data/lib/pricefier/requests/list_services.rb +26 -42
  14. data/lib/reverse_logistics/requests/calculate_ticket_number_check_digit.rb +10 -21
  15. data/lib/reverse_logistics/requests/cancel_shipping.rb +13 -23
  16. data/lib/reverse_logistics/requests/create_shippings.rb +22 -36
  17. data/lib/reverse_logistics/requests/create_shippings_with_collection.rb +17 -33
  18. data/lib/reverse_logistics/requests/request_ticket_numbers.rb +13 -35
  19. data/lib/reverse_logistics/requests/track_shipping.rb +18 -39
  20. data/lib/reverse_logistics/requests/track_shippings_by_date.rb +19 -45
  21. data/lib/sigep/auxiliars/shipping_xml.rb +100 -0
  22. data/lib/sigep/requests/calculate_label_number_check_digit.rb +13 -27
  23. data/lib/sigep/requests/cancel_shipping.rb +12 -25
  24. data/lib/sigep/requests/check_card_status.rb +11 -27
  25. data/lib/sigep/requests/check_service_availability.rb +12 -39
  26. data/lib/sigep/requests/create_shippings.rb +20 -24
  27. data/lib/sigep/requests/request_label_numbers.rb +11 -17
  28. data/lib/sigep/requests/request_shippings_xml.rb +14 -53
  29. data/lib/sigep/requests/search_available_additional_services.rb +12 -20
  30. data/lib/sigep/requests/search_customer.rb +15 -37
  31. data/lib/sigep/requests/search_zip_code.rb +11 -16
  32. data/lib/sigep/requests/track_shippings.rb +19 -51
  33. metadata +22 -19
  34. data/lib/SRO/client.rb +0 -25
  35. data/lib/SRO/helper.rb +0 -118
  36. data/lib/SRO/requests/track_shippings_list.rb +0 -144
  37. data/lib/correios_exception.rb +0 -11
  38. data/lib/pricefier/client.rb +0 -20
  39. data/lib/pricefier/helper.rb +0 -72
  40. data/lib/pricefier/requests/calculate_deadline_with_date.rb +0 -102
  41. data/lib/pricefier/requests/calculate_deadline_with_restrictions.rb +0 -102
  42. data/lib/pricefier/requests/calculate_price_deadline_with_date.rb +0 -142
  43. data/lib/pricefier/requests/calculate_price_deadline_with_restrictions.rb +0 -142
  44. data/lib/pricefier/requests/calculate_price_with_date.rb +0 -125
  45. data/lib/pricefier/requests/list_services_star.rb +0 -87
  46. data/lib/reverse_logistics/client.rb +0 -34
  47. data/lib/reverse_logistics/helper.rb +0 -95
  48. data/lib/sigep/client.rb +0 -29
  49. data/lib/sigep/helper.rb +0 -234
@@ -1,87 +0,0 @@
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 Pricefier
10
- class ListServicesSTAR < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
14
- def initialize(data = {})
15
- @show_request = data[:show_request]
16
- super()
17
- end
18
-
19
- def request
20
- puts xml if @show_request == true
21
- begin
22
- format_response(CLIENT.client.call(:calc_preco,
23
- soap_action: 'http://tempuri.org/ListaServicosSTAR',
24
- xml: xml).to_hash)
25
- rescue Savon::SOAPFault => error
26
- generate_exception(error)
27
- rescue Savon::HTTPError => error
28
- if error.http.code == 401
29
- generate_exception("Unauthorized (#{error.http.code}).")
30
- end
31
- generate_exception("Unknown HTTP error (#{error.http.code}).")
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'].ListaServicosSTAR
42
- end
43
- end
44
- end.doc.root.to_xml
45
- end
46
-
47
- def format_response(response)
48
- response = response[:lista_servicos_star_response][:lista_servicos_star_result]
49
-
50
- services = response[:servicos_calculo][:c_servicos_calculo]
51
- services = [services] if services.is_a?(Hash)
52
-
53
- formatted_services = []
54
- services.each do |service|
55
- formatted_services << format_service(service)
56
- end
57
-
58
- {
59
- services: formatted_services
60
- }
61
- end
62
-
63
- def format_service(service)
64
- if service[:erro].to_i == 0
65
- {
66
- code: service[:codigo],
67
- description: service[:descricao].strip,
68
- calculate_price: HELPER.convert_string_to_bool(
69
- service[:calcula_preco]
70
- ),
71
- calculate_deadline: HELPER.convert_string_to_bool(
72
- service[:calcula_prazo]
73
- )
74
- }
75
- else
76
- {
77
- code: service[:codigo],
78
- error: {
79
- code: service[:erro],
80
- description: service[:msg_erro]
81
- }
82
- }
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,34 +0,0 @@
1
- require 'savon'
2
-
3
- module Correios
4
- module ReverseLogistics
5
- class Client
6
- def client
7
- credentials = Correios.credentials
8
-
9
- Savon.client(
10
- wsdl: wsdl,
11
- basic_auth: [
12
- credentials.reverse_logistics_user,
13
- credentials.reverse_logistics_password
14
- ]
15
- )
16
- end
17
-
18
- private
19
-
20
- def wsdl
21
- if test_env?
22
- 'https://apphom.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
23
- else
24
- 'https://cws.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
25
- end
26
- end
27
-
28
- def test_env?
29
- (defined?(Rails) && ENV['RAILS_ENV'].in?(%w[test development]) ||
30
- ENV['GEM_ENV'].in?(%w[test development]))
31
- end
32
- end
33
- end
34
- end
@@ -1,95 +0,0 @@
1
- require 'date'
2
-
3
- module Correios
4
- module ReverseLogistics
5
- class Helper
6
- def namespaces
7
- {
8
- 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
9
- 'xmlns:ns1' => 'http://service.logisticareversa.correios.com.br/'
10
- }
11
- end
12
-
13
- def bool_to_string(bool)
14
- 'S' if bool
15
- 'N'
16
- end
17
-
18
- def bool_to_int(bool)
19
- 1 if bool
20
- 0
21
- end
22
-
23
- def deadline(value, type)
24
- if type == :authorization
25
- return value if value.is_a?(Numeric)
26
-
27
- Date.today - value
28
- else
29
- return (Date.today + value).strftime('%d/%m/%Y') if value.is_a?(Numeric)
30
-
31
- value.strftime('%d/%m/%Y')
32
- end
33
- end
34
-
35
- def shipping_type(type)
36
- case type
37
- when :authorization
38
- 'A'
39
- when :pickup
40
- 'C'
41
- end
42
- end
43
-
44
- def shipping_type_inverse(type)
45
- case type
46
- when 'A'
47
- :authorization
48
- when 'C'
49
- :pickup
50
- end
51
- end
52
-
53
- def ticket_type(type)
54
- case type
55
- when :authorization
56
- 'AP'
57
- when :pickup
58
- 'LR'
59
- end
60
- end
61
-
62
- def additional_services(services)
63
- nil if services.nil?
64
-
65
- services_string = ''
66
- services.each do |service|
67
- services_string += "#{service},"
68
- end
69
- services_string
70
- end
71
-
72
- def convert_string_to_date(date)
73
- Date.strptime(date, '%d/%m/%Y')
74
- end
75
-
76
- def tracking_result_type(result_type)
77
- case result_type
78
- when :last_event
79
- 'U'
80
- when :all_events
81
- 'H'
82
- end
83
- end
84
-
85
- def convert_string_to_date_time(date, time)
86
- time = time.strftime('%H:%M:%S')
87
- Time.strptime("#{date} #{time}", '%d-%m-%Y %H:%M:%S')
88
- end
89
-
90
- def convert_date_to_string(date)
91
- date.strftime('%d/%m/%Y')
92
- end
93
- end
94
- end
95
- end
@@ -1,29 +0,0 @@
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
@@ -1,234 +0,0 @@
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