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,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: []