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,18 +1,9 @@
1
- require 'savon'
2
- require 'nokogiri'
3
-
4
- require_relative '../client'
5
- require_relative '../helper'
6
- require_relative '../../correios_exception.rb'
7
-
8
1
  module Correios
9
2
  module Pricefier
10
- class CalculatePriceFAC < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
3
+ class CalculatePriceFAC < Helper
14
4
  def initialize(data = {})
15
5
  @show_request = data[:show_request]
6
+
16
7
  @service_codes = data[:service_codes]
17
8
  @weight = data[:weight]
18
9
  @reference_date = data[:reference_date]
@@ -22,16 +13,15 @@ module Correios
22
13
  def request
23
14
  puts xml if @show_request == true
24
15
  begin
25
- format_response(CLIENT.client.call(:calc_preco_fac,
26
- soap_action: 'http://tempuri.org/CalcPrecoFAC',
27
- xml: xml).to_hash)
16
+ format_response(Pricefier.client.call(
17
+ :calc_preco_fac,
18
+ soap_action: 'http://tempuri.org/CalcPrecoFAC',
19
+ xml: xml
20
+ ).to_hash)
28
21
  rescue Savon::SOAPFault => error
29
- generate_exception(error)
22
+ generate_soap_fault_exception(error)
30
23
  rescue Savon::HTTPError => error
31
- if error.http.code == 401
32
- generate_exception("Unauthorized (#{error.http.code}).")
33
- end
34
- generate_exception("Unknown HTTP error (#{error.http.code}).")
24
+ generate_http_exception(error.http.code)
35
25
  end
36
26
  end
37
27
 
@@ -39,14 +29,12 @@ module Correios
39
29
 
40
30
  def xml
41
31
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
42
- xml['soap'].Envelope(HELPER.namespaces) do
32
+ xml['soap'].Envelope(Pricefier.namespaces) do
43
33
  xml['soap'].Body do
44
34
  xml['ns1'].CalcPrecoFAC do
45
- xml.nCdServico HELPER.format_service_codes(@service_codes)
35
+ xml.nCdServico array_to_string_comma(@service_codes)
46
36
  xml.nVlPeso @weight
47
- xml.strDataCalculo HELPER.convert_date_to_string(
48
- @reference_date
49
- )
37
+ xml.strDataCalculo date_to_string(@reference_date)
50
38
  end
51
39
  end
52
40
  end
@@ -59,14 +47,7 @@ module Correios
59
47
  services = response[:servicos][:c_servico]
60
48
  services = [services] if services.is_a?(Hash)
61
49
 
62
- formatted_services = []
63
- services.each do |service|
64
- formatted_services << format_service(service)
65
- end
66
-
67
- {
68
- services: formatted_services
69
- }
50
+ { services: services.map { |s| format_service(s) } }
70
51
  end
71
52
 
72
53
  def format_service(service)
@@ -75,29 +56,23 @@ module Correios
75
56
  code: service[:codigo],
76
57
  prices: {
77
58
  additional_serivces: {
78
- own_hands: HELPER.convert_string_to_float(
79
- service[:valor_mao_propria]
80
- ),
81
- receipt_notification: HELPER.convert_string_to_float(
59
+ own_hands: string_to_decimal(service[:valor_mao_propria]),
60
+ receipt_notification: string_to_decimal(
82
61
  service[:valor_aviso_recebimento]
83
62
  ),
84
- declared_value: HELPER.convert_string_to_float(
63
+ declared_value: string_to_decimal(
85
64
  service[:valor_valor_declarado]
86
- ),
65
+ )
87
66
  },
88
- only_shipping: HELPER.convert_string_to_float(
89
- service[:valor_sem_adicionais]
90
- ),
91
- total: HELPER.convert_string_to_float(service[:valor])
67
+ only_shipping: string_to_decimal(service[:valor_sem_adicionais]),
68
+ total: string_to_decimal(service[:valor])
92
69
  }
93
70
  }
94
71
  else
95
72
  {
96
73
  code: service[:codigo],
97
- error: {
98
- code: service[:erro],
99
- description: service[:msg_erro]
100
- }
74
+ error: { code: service[:erro],
75
+ description: service[:msg_erro] }
101
76
  }
102
77
  end
103
78
  end
@@ -1,34 +1,26 @@
1
- require 'savon'
2
- require 'nokogiri'
3
-
4
- require_relative '../client'
5
- require_relative '../helper'
6
- require_relative '../../correios_exception.rb'
7
-
8
1
  module Correios
9
2
  module Pricefier
10
- class ListServices < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
3
+ class ListServices < Helper
14
4
  def initialize(data = {})
15
5
  @show_request = data[:show_request]
16
6
  super()
17
7
  end
18
8
 
19
- def request
9
+ def request(method)
10
+ @method = method
11
+ @method_snake = method.underscore
12
+
20
13
  puts xml if @show_request == true
21
14
  begin
22
- format_response(CLIENT.client.call(:calc_preco,
23
- soap_action: 'http://tempuri.org/ListaServicos',
24
- xml: xml).to_hash)
15
+ format_response(Pricefier.client.call(
16
+ @method_snake.to_sym,
17
+ soap_action: "http://tempuri.org/#{@method}",
18
+ xml: xml
19
+ ).to_hash)
25
20
  rescue Savon::SOAPFault => error
26
- generate_exception(error)
21
+ generate_soap_fault_exception(error)
27
22
  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}).")
23
+ generate_http_exception(error.http.code)
32
24
  end
33
25
  end
34
26
 
@@ -36,49 +28,41 @@ module Correios
36
28
 
37
29
  def xml
38
30
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
39
- xml['soap'].Envelope(HELPER.namespaces) do
31
+ xml['soap'].Envelope(Pricefier.namespaces) do
40
32
  xml['soap'].Body do
41
- xml['ns1'].ListaServicos
33
+ xml['ns1'].send(@method)
42
34
  end
43
35
  end
44
36
  end.doc.root.to_xml
45
37
  end
46
38
 
47
39
  def format_response(response)
48
- response = response[:lista_servicos_response][:lista_servicos_result]
40
+ response = response["#{@method_snake}_response".to_sym]["#{@method_snake}_result".to_sym]
49
41
 
50
42
  services = response[:servicos_calculo][:c_servicos_calculo]
51
43
  services = [services] if services.is_a?(Hash)
52
44
 
53
- formatted_services = []
54
- services.each do |service|
55
- formatted_services << format_service(service)
56
- end
57
-
58
- {
59
- services: formatted_services
60
- }
45
+ { services: services.map { |s| format_service(s) } }
61
46
  end
62
47
 
63
48
  def format_service(service)
64
- if service[:erro].to_i == 0
49
+ if service[:erro].to_i.zero?
65
50
  {
66
51
  code: service[:codigo],
67
52
  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
- )
53
+ calculate_price: string_to_bool(service[:calcula_preco]),
54
+ calculate_deadline:
55
+ if service[:calcula_prazo].present?
56
+ string_to_bool(service[:calcula_prazo])
57
+ else
58
+ false
59
+ end
74
60
  }
75
61
  else
76
62
  {
77
63
  code: service[:codigo],
78
- error: {
79
- code: service[:erro],
80
- description: service[:msg_erro]
81
- }
64
+ error: { code: service[:erro],
65
+ description: service[:msg_erro] }
82
66
  }
83
67
  end
84
68
  end
@@ -1,16 +1,6 @@
1
- require 'savon'
2
- require 'nokogiri'
3
-
4
- require_relative '../client'
5
- require_relative '../helper'
6
- require_relative '../../correios_exception.rb'
7
-
8
1
  module Correios
9
2
  module ReverseLogistics
10
- class CalculateTicketNumberCheckDigit < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
3
+ class CalculateTicketNumberCheckDigit < Helper
14
4
  def initialize(data = {})
15
5
  @show_request = data[:show_request]
16
6
  @ticket_number = data[:ticket_number]
@@ -20,16 +10,15 @@ module Correios
20
10
  def request
21
11
  puts xml if @show_request == true
22
12
  begin
23
- format_response(CLIENT.client.call(:calcular_digito_verificador,
24
- soap_action: '',
25
- xml: xml).to_hash)
13
+ format_response(ReverseLogistics.client.call(
14
+ :calcular_digito_verificador,
15
+ soap_action: '',
16
+ xml: xml
17
+ ).to_hash)
26
18
  rescue Savon::SOAPFault => error
27
- generate_exception(error)
19
+ generate_soap_fault_exception(error)
28
20
  rescue Savon::HTTPError => error
29
- if error.http.code == 401
30
- generate_exception("Unauthorized (#{error.http.code}).")
31
- end
32
- generate_exception("Unknown HTTP error (#{error.http.code}).")
21
+ generate_http_exception(error.http.code)
33
22
  end
34
23
  end
35
24
 
@@ -37,7 +26,7 @@ module Correios
37
26
 
38
27
  def xml
39
28
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
40
- xml['soap'].Envelope(HELPER.namespaces) do
29
+ xml['soap'].Envelope(ReverseLogistics.namespaces) do
41
30
  xml['soap'].Body do
42
31
  xml['ns1'].calcularDigitoVerificador do
43
32
  parent_namespace = xml.parent.namespace
@@ -54,7 +43,7 @@ module Correios
54
43
 
55
44
  def format_response(response)
56
45
  response = response[:calcular_digito_verificador_response][:calcular_digito_verificador]
57
- generate_exception(response[:msg_erro]) if response[:cod_erro] != '0'
46
+ generate_revese_logistics_exception(response)
58
47
 
59
48
  {
60
49
  digit_checker: response[:digito],
@@ -1,37 +1,27 @@
1
- require 'savon'
2
- require 'nokogiri'
3
-
4
- require_relative '../client'
5
- require_relative '../helper'
6
- require_relative '../../correios_exception.rb'
7
-
8
1
  module Correios
9
2
  module ReverseLogistics
10
- class CancelShipping < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
3
+ class CancelShipping < Helper
14
4
  def initialize(data = {})
15
5
  @credentials = Correios.credentials
6
+ @show_request = data[:show_request]
16
7
 
17
8
  @ticket_number = data[:ticket_number]
18
- @type = data[:type]
9
+ @ticket_type = data[:ticket_type]
19
10
  super()
20
11
  end
21
12
 
22
13
  def request
23
14
  puts xml if @show_request == true
24
15
  begin
25
- format_response(CLIENT.client.call(:cancelar_pedido,
26
- soap_action: '',
27
- xml: xml).to_hash)
16
+ format_response(ReverseLogistics.client.call(
17
+ :cancelar_pedido,
18
+ soap_action: '',
19
+ xml: xml
20
+ ).to_hash)
28
21
  rescue Savon::SOAPFault => error
29
- generate_exception(error)
22
+ generate_soap_fault_exception(error)
30
23
  rescue Savon::HTTPError => error
31
- if error.http.code == 401
32
- generate_exception("Unauthorized (#{error.http.code}).")
33
- end
34
- generate_exception("Unknown HTTP error (#{error.http.code}).")
24
+ generate_http_exception(error.http.code)
35
25
  end
36
26
  end
37
27
 
@@ -39,7 +29,7 @@ module Correios
39
29
 
40
30
  def xml
41
31
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
42
- xml['soap'].Envelope(HELPER.namespaces) do
32
+ xml['soap'].Envelope(ReverseLogistics.namespaces) do
43
33
  xml['soap'].Body do
44
34
  xml['ns1'].cancelarPedido do
45
35
  parent_namespace = xml.parent.namespace
@@ -47,7 +37,7 @@ module Correios
47
37
 
48
38
  xml.codAdministrativo @credentials.administrative_code
49
39
  xml.numeroPedido @ticket_number
50
- xml.tipo HELPER.shipping_type(@type)
40
+ xml.tipo reverse_shipping_type(@ticket_type)
51
41
 
52
42
  xml.parent.namespace = parent_namespace
53
43
  end
@@ -58,7 +48,7 @@ module Correios
58
48
 
59
49
  def format_response(response)
60
50
  response = response[:cancelar_pedido_response][:cancelar_pedido]
61
- generate_exception(response[:msg_erro]) if response[:cod_erro].to_i != 0
51
+ generate_revese_logistics_exception(response)
62
52
 
63
53
  {
64
54
  ticket_number: response[:objeto_postal][:numero_pedido],
@@ -1,20 +1,10 @@
1
- require 'savon'
2
- require 'nokogiri'
3
-
4
- require_relative '../client'
5
- require_relative '../helper'
6
- require_relative '../../correios_exception.rb'
7
-
8
1
  module Correios
9
2
  module ReverseLogistics
10
- class CreateShippings < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
3
+ class CreateShippings < Helper
14
4
  def initialize(data = {})
15
5
  @credentials = Correios.credentials
16
-
17
6
  @show_request = data[:show_request]
7
+
18
8
  @receiver = data[:receiver]
19
9
  @service_code = data[:service_code]
20
10
  @shippings = data[:shippings]
@@ -24,16 +14,15 @@ module Correios
24
14
  def request
25
15
  puts xml if @show_request == true
26
16
  begin
27
- format_response(CLIENT.client.call(:solicitar_postagem_reversa,
28
- soap_action: '',
29
- xml: xml).to_hash)
17
+ format_response(ReverseLogistics.client.call(
18
+ :solicitar_postagem_reversa,
19
+ soap_action: '',
20
+ xml: xml
21
+ ).to_hash)
30
22
  rescue Savon::SOAPFault => error
31
- generate_exception(error)
23
+ generate_soap_fault_exception(error)
32
24
  rescue Savon::HTTPError => error
33
- if error.http.code == 401
34
- generate_exception("Unauthorized (#{error.http.code}).")
35
- end
36
- generate_exception("Unknown HTTP error (#{error.http.code}).")
25
+ generate_http_exception(error.http.code)
37
26
  end
38
27
  end
39
28
 
@@ -41,7 +30,7 @@ module Correios
41
30
 
42
31
  def xml
43
32
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
44
- xml['soap'].Envelope(HELPER.namespaces) do
33
+ xml['soap'].Envelope(ReverseLogistics.namespaces) do
45
34
  xml['soap'].Body do
46
35
  xml['ns1'].solicitarPostagemReversa do
47
36
  parent_namespace = xml.parent.namespace
@@ -69,17 +58,19 @@ module Correios
69
58
  goods = shipping[:goods] || []
70
59
  objects = shipping[:objects] || [{}]
71
60
  xml.coletas_solicitadas do
72
- xml.tipo HELPER.shipping_type(shipping[:type])
61
+ xml.tipo reverse_shipping_type(shipping[:type])
73
62
  xml.numero shipping[:ticket_number]
74
63
  xml.id_cliente shipping[:code]
75
- xml.ag HELPER.deadline(shipping[:deadline], shipping[:type])
64
+ xml.ag calculate_reverse_shipping_deadline(
65
+ shipping[:deadline], shipping[:type]
66
+ )
76
67
  xml.cartao @credentials.card
77
68
  xml.valor_declarado shipping[:_value]
78
- xml.servico_adicional HELPER.additional_services(
69
+ xml.servico_adicional array_to_string_comma(
79
70
  shipping[:additional_services]
80
71
  )
81
72
  xml.descricao shipping[:description]
82
- xml.ar HELPER.bool_to_int(shipping[:receipt_notification])
73
+ xml.ar bool_to_int(shipping[:receipt_notification])
83
74
  xml.cklist shipping[:check_list]
84
75
  xml.documento shipping[:document]
85
76
  xml.remetente do
@@ -91,7 +82,7 @@ module Correios
91
82
  xml.ddd_celular sender[:cellphone][0, 2]
92
83
  xml.celular sender[:cellphone][2, sender[:phone].length - 1]
93
84
  xml.email sender[:email]
94
- xml.sms HELPER.bool_to_string(sender[:send_sms])
85
+ xml.sms bool_to_string(sender[:send_sms])
95
86
  xml.identificacao sender[:document]
96
87
  xml.logradouro sender_address[:street]
97
88
  xml.numero sender_address[:number]
@@ -130,32 +121,27 @@ module Correios
130
121
 
131
122
  def format_response(response)
132
123
  response = response[:solicitar_postagem_reversa_response][:solicitar_postagem_reversa]
133
- generate_exception(response[:msg_erro]) if response[:cod_erro].to_i != 0
124
+ generate_revese_logistics_exception(response)
134
125
 
135
126
  shippings = response[:resultado_solicitacao]
136
127
  shippings = [shippings] if shippings.is_a?(Hash)
137
128
 
138
- formatted_shippings = []
139
- shippings.each do |shipping|
140
- formatted_shippings << format_shipping(shipping)
141
- end
142
-
143
- { shippings: formatted_shippings }
129
+ { shippings: shippings.map {|s| format_shipping(s)} }
144
130
  end
145
131
 
146
132
  def format_shipping(shipping)
147
133
  if shipping[:codigo_erro].to_i.zero?
148
134
  {
149
- type: HELPER.shipping_type_inverse(shipping[:tipo]),
135
+ type: inverse_reverse_shipping_type(shipping[:tipo]),
150
136
  code: shipping[:id_cliente],
151
137
  ticket_number: shipping[:numero_coleta],
152
138
  label_number: shipping[:numero_etiqueta],
153
139
  object_id: shipping[:id_obj],
154
- deadline: HELPER.convert_string_to_date(shipping[:prazo])
140
+ deadline: string_to_date(shipping[:prazo])
155
141
  }
156
142
  else
157
143
  {
158
- type: HELPER.shipping_type_inverse(shipping[:tipo]),
144
+ type: inverse_reverse_shipping_type(shipping[:tipo]),
159
145
  code: shipping[:id_cliente],
160
146
  error: shipping[:descricao_erro]
161
147
  }