correios_gem 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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,62 @@
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 SearchAvailableAdditionalServices < 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(:busca_servicos_adicionais_ativos,
23
+ soap_action: '',
24
+ xml: xml).to_hash)
25
+ rescue Savon::SOAPFault => error
26
+ generate_exception(error)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def xml
33
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
34
+ xml['soap'].Envelope(HELPER.namespaces) do
35
+ xml['soap'].Body do
36
+ xml['ns1'].buscaServicosAdicionaisAtivos
37
+ end
38
+ end
39
+ end.doc.root.to_xml
40
+ end
41
+
42
+ def format_response(response)
43
+ response = response[:busca_servicos_adicionais_ativos_response][:return]
44
+ response = [response] if response.is_a?(Hash)
45
+
46
+ { additional_services: format_additional_services(response) }
47
+ end
48
+
49
+ def format_additional_services(additional_services)
50
+ formatted_additional_services = []
51
+ additional_services.each do |additional_service|
52
+ formatted_additional_services << {
53
+ code: additional_service[:codigo],
54
+ description: additional_service[:descricao].encode(Encoding::UTF_8),
55
+ initials: additional_service[:sigla]
56
+ }
57
+ end
58
+ formatted_additional_services
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,129 @@
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 SearchCustomer < 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(:busca_cliente,
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'].buscaCliente do
39
+ parent_namespace = xml.parent.namespace
40
+ xml.parent.namespace = nil
41
+
42
+ xml.idContrato @credentials.contract
43
+ xml.idCartaoPostagem @credentials.card
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[:busca_cliente_response][:return]
56
+
57
+ contracts = response[:contratos]
58
+ contracts = [contracts] if contracts.is_a?(Hash)
59
+
60
+ formatted_contracts = []
61
+ contracts.each do |contract|
62
+ formatted_contracts << format_contract(contract)
63
+ end
64
+
65
+ {
66
+ status_code: response[:status_codigo].strip,
67
+ status_description: response[:descricao_status_cliente].strip,
68
+ contracts: formatted_contracts
69
+ }
70
+ end
71
+
72
+ def format_contract(contract)
73
+ cards = contract[:cartoes_postagem]
74
+ cards = [cards] if cards.is_a?(Hash)
75
+
76
+ formatted_cards = []
77
+ cards.each do |card|
78
+ formatted_cards << format_card(card)
79
+ end
80
+
81
+ {
82
+ board_id: contract[:codigo_diretoria].strip,
83
+ board_description: contract[:descricao_diretoria_regional].strip,
84
+ validity_begin: contract[:data_vigencia_inicio],
85
+ validity_end: contract[:data_vigencia_fim],
86
+ cards: formatted_cards
87
+ }
88
+ end
89
+
90
+ def format_card(card)
91
+ services = card[:servicos]
92
+ services = [services] if services.is_a?(Hash)
93
+
94
+ formatted_services = []
95
+ services.each do |service|
96
+ formatted_services << format_service(service)
97
+ end
98
+
99
+ {
100
+ validity_begin: card[:data_vigencia_inicio],
101
+ validity_end: card[:data_vigencia_fim],
102
+ services: formatted_services
103
+ }
104
+ end
105
+
106
+ def format_service(service)
107
+ sigep_service = service[:servico_sigep]
108
+
109
+ {
110
+ category: sigep_service[:categoria_servico],
111
+ code: service[:codigo].strip,
112
+ description: service[:descricao].strip,
113
+ id: service[:id].strip,
114
+ seal: sigep_service[:chancela][:chancela],
115
+ conditions: {
116
+ dimensions_required: sigep_service[:exige_dimensoes],
117
+ addtional_price_required: sigep_service[:exige_valor_cobrar],
118
+ payment_on_delivery: HELPER.convert_string_to_bool(
119
+ sigep_service[:pagamento_entrega]
120
+ ),
121
+ grouped_shipment: HELPER.convert_string_to_bool(
122
+ sigep_service[:remessa_agrupada]
123
+ )
124
+ }
125
+ }
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,63 @@
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 SearchZipCode < CorreiosException
11
+ HELPER = Helper.new
12
+ CLIENT = Client.new
13
+
14
+ def initialize(data = {})
15
+ @show_request = data[:show_request]
16
+ @zip_code = data[:zip_code]
17
+ super()
18
+ end
19
+
20
+ def request
21
+ puts xml if @show_request == true
22
+ begin
23
+ format_response(CLIENT.client.call(:consulta_cep,
24
+ soap_action: '',
25
+ xml: xml).to_hash)
26
+ rescue Savon::SOAPFault => error
27
+ generate_exception(error)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def xml
34
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
35
+ xml['soap'].Envelope(HELPER.namespaces) do
36
+ xml['soap'].Body do
37
+ xml['ns1'].consultaCEP do
38
+ parent_namespace = xml.parent.namespace
39
+ xml.parent.namespace = nil
40
+
41
+ xml.cep @zip_code
42
+
43
+ xml.parent.namespace = parent_namespace
44
+ end
45
+ end
46
+ end
47
+ end.doc.root.to_xml
48
+ end
49
+
50
+ def format_response(response)
51
+ response = response[:consulta_cep_response][:return]
52
+ {
53
+ neighborhood: response[:bairro],
54
+ zip_code: response[:cep],
55
+ city: response[:cidade],
56
+ additional: response[:complemento2],
57
+ street: response[:end],
58
+ state: response[:uf]
59
+ }
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,145 @@
1
+ require 'nokogiri'
2
+ require 'active_support/core_ext/hash'
3
+
4
+ require_relative '../client'
5
+ require_relative '../helper'
6
+ require_relative '../../correios_exception.rb'
7
+
8
+ module Correios
9
+ module Sigep
10
+ class TrackShippings < 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
+ super()
22
+ end
23
+
24
+ def request
25
+ puts xml if @show_request == true
26
+ begin
27
+ format_response(CLIENT.client.call(:consulta_sro,
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'].consultaSRO do
42
+ parent_namespace = xml.parent.namespace
43
+ xml.parent.namespace = nil
44
+
45
+ @label_numbers.each do |label_number|
46
+ xml.listaObjetos label_number
47
+ end
48
+ xml.tipoConsulta query_type(@query_type)
49
+ xml.tipoResultado result_type(@result_type)
50
+ xml.usuarioSro @credentials.sro_user
51
+ xml.senhaSro @credentials.sro_password
52
+
53
+ xml.parent.namespace = parent_namespace
54
+ end
55
+ end
56
+ end
57
+ end.doc.root.to_xml
58
+ end
59
+
60
+ def format_response(response)
61
+ response = response[:consulta_sro_response][:return]
62
+ response = Hash.from_xml(response)
63
+
64
+ objects = response['rastro']['objeto']
65
+ objects = [objects] if objects.is_a?(Hash)
66
+
67
+ formatted_objects = []
68
+ objects.each do |object|
69
+ formatted_objects << format_object(object)
70
+ end
71
+
72
+ { tracking: formatted_objects }
73
+ end
74
+
75
+ def format_object(object)
76
+ events = object['evento']
77
+ events = [events] if events.is_a?(Hash)
78
+
79
+ formatted_events = []
80
+ events.each do |event|
81
+ formatted_events << format_event(event)
82
+ end
83
+
84
+ {
85
+ label: {
86
+ number: object['numero'],
87
+ initials: object['sigla'],
88
+ name: object['nome'],
89
+ category: object['categoria']
90
+ },
91
+ events: formatted_events
92
+ }
93
+ end
94
+
95
+ def format_event(event)
96
+ {
97
+ movement: HELPER.tracking_event_status(event),
98
+ type: event['tipo'],
99
+ status: event['status'],
100
+ time: HELPER.convert_string_to_date(event['data'], event['hora']),
101
+ description: event['descricao'],
102
+ detail: event['detalhe'],
103
+ city: event['cidade'],
104
+ state: event['uf'],
105
+ destination: format_destination(event['destino']),
106
+ site: {
107
+ description: event['local'],
108
+ code: event['codigo']
109
+ }
110
+ }
111
+ end
112
+
113
+ def format_destination(destination)
114
+ return nil if destination.nil?
115
+ {
116
+ city: destination['cidade'],
117
+ neighborhood: destination['bairro'],
118
+ state: destination['uf'],
119
+ site: {
120
+ description: destination['local'],
121
+ code: destination['codigo']
122
+ }
123
+ }
124
+ end
125
+
126
+ def query_type(type)
127
+ case type
128
+ when :list
129
+ 'L'
130
+ when :range
131
+ 'F'
132
+ end
133
+ end
134
+
135
+ def result_type(type)
136
+ case type
137
+ when :last_event
138
+ 'U'
139
+ when :all_events
140
+ 'T'
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: correios_gem
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Arthur Soares
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.2.6
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.2.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: nokogiri
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.9'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.9.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.9'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.9.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: savon
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.12'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.12.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.12'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.12.0
73
+ description: Integration with Sigep Web, SRO, Reverse Logistics and Pricefier
74
+ email: arthurvsp97@gmail.com
75
+ executables: []
76
+ extensions: []
77
+ extra_rdoc_files: []
78
+ files:
79
+ - lib/SRO/client.rb
80
+ - lib/SRO/helper.rb
81
+ - lib/SRO/requests/track_shippings.rb
82
+ - lib/SRO/requests/track_shippings_list.rb
83
+ - lib/correios_exception.rb
84
+ - lib/correios_gem.rb
85
+ - lib/credentials.rb
86
+ - lib/pricefier/client.rb
87
+ - lib/pricefier/helper.rb
88
+ - lib/pricefier/requests/calculate_deadline.rb
89
+ - lib/pricefier/requests/calculate_deadline_with_date.rb
90
+ - lib/pricefier/requests/calculate_deadline_with_restrictions.rb
91
+ - lib/pricefier/requests/calculate_price.rb
92
+ - lib/pricefier/requests/calculate_price_deadline.rb
93
+ - lib/pricefier/requests/calculate_price_deadline_with_date.rb
94
+ - lib/pricefier/requests/calculate_price_deadline_with_restrictions.rb
95
+ - lib/pricefier/requests/calculate_price_fac.rb
96
+ - lib/pricefier/requests/calculate_price_with_date.rb
97
+ - lib/pricefier/requests/list_services.rb
98
+ - lib/pricefier/requests/list_services_star.rb
99
+ - lib/reverse_logistics/client.rb
100
+ - lib/reverse_logistics/helper.rb
101
+ - lib/reverse_logistics/requests/calculate_ticket_number_check_digit.rb
102
+ - lib/reverse_logistics/requests/cancel_shipping.rb
103
+ - lib/reverse_logistics/requests/create_shippings.rb
104
+ - lib/reverse_logistics/requests/create_shippings_with_collection.rb
105
+ - lib/reverse_logistics/requests/request_ticket_numbers.rb
106
+ - lib/reverse_logistics/requests/track_shipping.rb
107
+ - lib/reverse_logistics/requests/track_shippings_by_date.rb
108
+ - lib/sigep/client.rb
109
+ - lib/sigep/helper.rb
110
+ - lib/sigep/requests/calculate_label_number_check_digit.rb
111
+ - lib/sigep/requests/cancel_shipping.rb
112
+ - lib/sigep/requests/check_card_status.rb
113
+ - lib/sigep/requests/check_service_availability.rb
114
+ - lib/sigep/requests/create_shippings.rb
115
+ - lib/sigep/requests/request_label_numbers.rb
116
+ - lib/sigep/requests/request_shippings_xml.rb
117
+ - lib/sigep/requests/search_available_additional_services.rb
118
+ - lib/sigep/requests/search_customer.rb
119
+ - lib/sigep/requests/search_zip_code.rb
120
+ - lib/sigep/requests/track_shippings.rb
121
+ homepage: https://github.com/arthursoas/correios_gem
122
+ licenses:
123
+ - GPL-3.0
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.7.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: correios-gem integrates your app with Brazil post office APIs
145
+ test_files: []