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,25 +0,0 @@
1
- require 'savon'
2
-
3
- module Correios
4
- module SRO
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
- 'https://webservice.correios.com.br/service/rastro/Rastro.wsdl'
17
- end
18
-
19
- def test_env?
20
- (defined?(Rails) && ENV['RAILS_ENV'].in?(%w[test development]) ||
21
- ENV['GEM_ENV'].in?(%w[test development]))
22
- end
23
- end
24
- end
25
- end
@@ -1,118 +0,0 @@
1
- module Correios
2
- module SRO
3
- class Helper
4
- def namespaces
5
- {
6
- 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
7
- 'xmlns:ns1' => 'http://resource.webservice.correios.com.br/'
8
- }
9
- end
10
-
11
- def tracking_event_status(event)
12
- type = event[:tipo]
13
- status = event[:status].to_i
14
-
15
- case type
16
- when 'BDE', 'BDI', 'BDR'
17
- case status
18
- when 0, 1
19
- return :delivered
20
- when 2
21
- return :not_delivered
22
- when 4, 5, 6, 8, 10, 21, 22, 26, 33, 36, 40, 42, 48, 49, 56
23
- return :returning
24
- when 7, 19, 25, 32, 38, 41, 45, 46, 47, 53, 57, 66, 69
25
- return :in_transit
26
- when 9, 50, 51, 52
27
- return :stolen_lost
28
- when 3, 12, 24
29
- return :awaiting_pickup
30
- when 20, 34, 35
31
- return :not_delivered
32
- when 23
33
- return :returned
34
- when 28, 37
35
- return :damaged
36
- when 43
37
- return :arrested
38
- when 54, 55, 58, 59
39
- return :taxing
40
- end
41
- when 'BLQ', 'PMT', 'CD', 'CMT', 'TRI', 'CUN', 'RO', 'DO', 'EST', 'PAR'
42
- case status
43
- when 0, 1, 2, 3, 4, 5, 6, 9, 15, 16, 17, 18
44
- return :in_transit
45
- end
46
- when 'FC'
47
- case status
48
- when 1
49
- return :returning
50
- when 2, 3, 5, 7
51
- return :in_transit
52
- when 4
53
- return :not_delivered
54
- end
55
- when 'IDC'
56
- case status
57
- when 1, 2, 3, 4, 5, 6, 7
58
- return :stolen_lost
59
- end
60
- when 'LDI'
61
- case status
62
- when 0, 1, 2, 3, 14
63
- return :awaiting_pickup
64
- end
65
- when 'OEC', 'LDE'
66
- case status
67
- when 0, 1, 9
68
- return :delivering
69
- end
70
- when 'PO', 'CO'
71
- case status
72
- when 0, 1, 9
73
- return :posted
74
- end
75
- end
76
- end
77
-
78
- def query_type(type)
79
- case type
80
- when :list
81
- 'L'
82
- when :range
83
- 'F'
84
- end
85
- end
86
-
87
- def result_type(type)
88
- case type
89
- when :last_event
90
- 'U'
91
- when :all_events
92
- 'T'
93
- end
94
- end
95
-
96
- def language(type)
97
- case type
98
- when :portuguese
99
- '101'
100
- when :english
101
- '102'
102
- end
103
- end
104
-
105
- def format_label_numbers(label_numbers)
106
- label_numbers_string = ''
107
- label_numbers.each do |label_number|
108
- label_numbers_string += label_number
109
- end
110
- label_numbers_string
111
- end
112
-
113
- def convert_string_to_date(date, time)
114
- Time.strptime("#{date} #{time}", '%d/%m/%Y %H:%M')
115
- end
116
- end
117
- end
118
- end
@@ -1,144 +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 SRO
10
- class TrackShippingsList < 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
- @query_type = data[:query_type]
20
- @result_type = data[:result_type]
21
- @language = data[:language]
22
- super()
23
- end
24
-
25
- def request
26
- puts xml if @show_request == true
27
- begin
28
- format_response(CLIENT.client.call(:busca_eventos_lista,
29
- soap_action: '',
30
- xml: xml).to_hash)
31
- rescue Savon::SOAPFault => error
32
- generate_exception(error)
33
- rescue Savon::HTTPError => error
34
- if error.http.code == 401
35
- generate_exception("Unauthorized (#{error.http.code}).")
36
- end
37
- generate_exception("Unknown HTTP error (#{error.http.code}).")
38
- end
39
- end
40
-
41
- private
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'].buscaEventosLista do
48
- parent_namespace = xml.parent.namespace
49
- xml.parent.namespace = nil
50
-
51
- @label_numbers.each do |label_number|
52
- xml.objetos label_number
53
- end
54
- xml.tipo HELPER.query_type(@query_type)
55
- xml.resultado HELPER.result_type(@result_type)
56
- xml.lingua HELPER.language(@language)
57
- xml.usuario @credentials.sro_user
58
- xml.senha @credentials.sro_password
59
-
60
- xml.parent.namespace = parent_namespace
61
- end
62
- end
63
- end
64
- end.doc.root.to_xml
65
- end
66
-
67
- def format_response(response)
68
- response = response[:busca_eventos_lista_response][:return]
69
-
70
- objects = response[:objeto]
71
- objects = [objects] if objects.is_a?(Hash)
72
-
73
- generate_exception(objects.first[:erro]) if objects.first[:numero] == 'Erro'
74
-
75
- formatted_objects = []
76
- objects.each do |object|
77
- formatted_objects << format_object(object)
78
- end
79
-
80
- { tracking: formatted_objects }
81
- end
82
-
83
- def format_object(object)
84
- if object[:erro].present?
85
- return {
86
- label: {
87
- number: object[:numero]
88
- },
89
- error: object[:erro]
90
- }
91
- end
92
-
93
- events = object[:evento]
94
- events = [events] if events.is_a?(Hash)
95
-
96
- formatted_events = []
97
- events.each do |event|
98
- formatted_events << format_event(event)
99
- end
100
-
101
- {
102
- label: {
103
- number: object[:numero],
104
- initials: object[:sigla],
105
- name: object[:nome],
106
- category: object[:categoria]
107
- },
108
- events: formatted_events
109
- }
110
- end
111
-
112
- def format_event(event)
113
- {
114
- movement: HELPER.tracking_event_status(event),
115
- type: event[:tipo],
116
- status: event[:status],
117
- time: HELPER.convert_string_to_date(event[:data], event[:hora]),
118
- description: event[:descricao],
119
- detail: event[:detalhe],
120
- city: event[:cidade],
121
- state: event[:uf],
122
- destination: format_destination(event[:destino]),
123
- site: {
124
- description: event[:local],
125
- zip_code: event[:codigo]
126
- }
127
- }
128
- end
129
-
130
- def format_destination(destination)
131
- return nil if destination.nil?
132
- {
133
- city: destination[:cidade],
134
- neighborhood: destination[:bairro],
135
- state: destination[:uf],
136
- site: {
137
- description: destination[:local],
138
- zip_code: destination[:codigo]
139
- }
140
- }
141
- end
142
- end
143
- end
144
- end
@@ -1,11 +0,0 @@
1
- class CorreiosException < StandardError
2
- def generate_exception(message)
3
- raise CorreiosException, format_error_message(message)
4
- end
5
-
6
- def format_error_message(message)
7
- message = message.to_s.gsub('(soap:Server)', '')
8
- message = message.strip
9
- message.capitalize
10
- end
11
- end
@@ -1,20 +0,0 @@
1
- require 'savon'
2
-
3
- module Correios
4
- module Pricefier
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
- 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl'
17
- end
18
- end
19
- end
20
- end
@@ -1,72 +0,0 @@
1
- require 'date'
2
-
3
- module Correios
4
- module Pricefier
5
- class Helper
6
- def namespaces
7
- {
8
- 'xmlns:soap' => 'http://www.w3.org/2003/05/soap-envelope',
9
- 'xmlns:ns1' => 'http://tempuri.org/'
10
- }
11
- end
12
-
13
- def calculate_deadline_date(days, saturday, date = Date.today)
14
- if saturday
15
- days.to_i.times do
16
- date += 1.days
17
- date += 1.days if date.sunday?
18
- end
19
- else
20
- days.to_i.times do
21
- date += 1.days
22
- date += 1.days if deadline.sunday? || deadline.saturday?
23
- end
24
- end
25
- date
26
- end
27
-
28
- def convert_string_to_date(date)
29
- Date.strptime(date, '%d/%m/%Y')
30
- end
31
-
32
- def convert_date_to_string(date)
33
- date.strftime('%d/%m/%Y')
34
- end
35
-
36
- def convert_string_to_bool(string)
37
- string == 'S'
38
- end
39
-
40
- def convert_bool_to_string(bool)
41
- return 'S' if bool
42
- 'N'
43
- end
44
-
45
- def convert_string_to_float(string)
46
- string = string.tr(',', '.')
47
- string.to_f
48
- end
49
-
50
- def object_type(type)
51
- case type
52
- when :letter_envelope
53
- 3
54
- when :box
55
- 1
56
- when :prism
57
- 1
58
- when :cylinder
59
- 2
60
- end
61
- end
62
-
63
- def format_service_codes(services)
64
- services_string = ''
65
- services.each do |service|
66
- services_string += "#{service},"
67
- end
68
- services_string
69
- end
70
- end
71
- end
72
- end
@@ -1,102 +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 CalculateDeadlineWithDate < CorreiosException
11
- HELPER = Helper.new
12
- CLIENT = Client.new
13
-
14
- def initialize(data = {})
15
- @show_request = data[:show_request]
16
- @service_codes = data[:service_codes]
17
- @source_zip_code = data[:source_zip_code]
18
- @target_zip_code = data[:target_zip_code]
19
- @reference_date = data[:reference_date]
20
- super()
21
- end
22
-
23
- def request
24
- puts xml if @show_request == true
25
- begin
26
- format_response(CLIENT.client.call(:calc_prazo_data,
27
- soap_action: 'http://tempuri.org/CalcPrazoData',
28
- xml: xml).to_hash)
29
- rescue Savon::SOAPFault => error
30
- generate_exception(error)
31
- rescue Savon::HTTPError => error
32
- if error.http.code == 401
33
- generate_exception("Unauthorized (#{error.http.code}).")
34
- end
35
- generate_exception("Unknown HTTP error (#{error.http.code}).")
36
- end
37
- end
38
-
39
- private
40
-
41
- def xml
42
- Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
43
- xml['soap'].Envelope(HELPER.namespaces) do
44
- xml['soap'].Body do
45
- xml['ns1'].CalcPrazoData do
46
- xml.nCdServico HELPER.format_service_codes(@service_codes)
47
- xml.sCepOrigem @source_zip_code
48
- xml.sCepDestino @target_zip_code
49
- xml.sDtCalculo HELPER.convert_date_to_string(@reference_date)
50
- end
51
- end
52
- end
53
- end.doc.root.to_xml
54
- end
55
-
56
- def format_response(response)
57
- response = response[:calc_prazo_data_response][:calc_prazo_data_result]
58
-
59
- services = response[:servicos][:c_servico]
60
- services = [services] if services.is_a?(Hash)
61
-
62
- formatted_services = []
63
- services.each do |service|
64
- formatted_services << format_service(service)
65
- end
66
-
67
- {
68
- services: formatted_services
69
- }
70
- end
71
-
72
- def format_service(service)
73
- if [0, 10, 11].include?(service[:erro].to_i)
74
- {
75
- code: service[:codigo],
76
- delivery_at_home: HELPER.convert_string_to_bool(
77
- service[:entrega_domiciliar]
78
- ),
79
- delivery_on_saturdays: HELPER.convert_string_to_bool(
80
- service[:entrega_sabado]
81
- ),
82
- note: service[:obs_fim],
83
- deadline: {
84
- days: service[:prazo_entrega].to_i,
85
- date: HELPER.convert_string_to_date(
86
- service[:data_max_entrega]
87
- )
88
- }
89
- }
90
- else
91
- {
92
- code: service[:codigo],
93
- error: {
94
- code: service[:erro],
95
- description: service[:msg_erro]
96
- }
97
- }
98
- end
99
- end
100
- end
101
- end
102
- end