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,91 @@
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 CheckServiceAvailability < 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
+ @service_code = data[:service_code]
19
+ @source_zip_code = data[:source_zip_code]
20
+ @target_zip_code = data[:target_zip_code]
21
+ super()
22
+ end
23
+
24
+ def request
25
+ puts xml if @show_request == true
26
+ begin
27
+ format_response(CLIENT.client.call(:verifica_disponibilidade_servico,
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'].verificaDisponibilidadeServico do
42
+ parent_namespace = xml.parent.namespace
43
+ xml.parent.namespace = nil
44
+
45
+ xml.numeroServico @service_code
46
+ xml.cepOrigem @source_zip_code
47
+ xml.cepDestino @target_zip_code
48
+ xml.codAdministrativo @credentials.administrative_code
49
+ xml.usuario @credentials.sigep_user
50
+ xml.senha @credentials.sigep_password
51
+
52
+ xml.parent.namespace = parent_namespace
53
+ end
54
+ end
55
+ end
56
+ end.doc.root.to_xml
57
+ end
58
+
59
+ def format_response(response)
60
+ response = response[:verifica_disponibilidade_servico_response][:return]
61
+ response = response.split('#')
62
+
63
+ {
64
+ status: convert_availability_to_symbol(response[0]),
65
+ message: response[1]
66
+ }
67
+ end
68
+
69
+ def convert_availability_to_symbol(availability)
70
+ case availability.to_i
71
+ when 0, 11
72
+ :available
73
+ when -2, -3
74
+ :invalid_zip_code
75
+ when -33
76
+ :system_down
77
+ when -34, -35, 1
78
+ :incorrect_data
79
+ when -36, -37, -38
80
+ :unauthorized
81
+ when -888, 6, 7, 8, 9, 12
82
+ :unavailable
83
+ when 10
84
+ :partially_available
85
+ when 99
86
+ :error
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,70 @@
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 CreateShippings < 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
+ @data = data
19
+ @shippings = data[:shippings]
20
+ @request_number = data[:request_number]
21
+ super()
22
+ end
23
+
24
+ def request
25
+ puts xml if @show_request == true
26
+ begin
27
+ format_response(CLIENT.client.call(:fecha_plp_varios_servicos,
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 format_response(response)
38
+ response = response[:fecha_plp_varios_servicos_response][:return]
39
+
40
+ { request_id: response }
41
+ end
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'].fechaPlpVariosServicos do
48
+ parent_namespace = xml.parent.namespace
49
+ xml.parent.namespace = nil
50
+
51
+ xml.xml HELPER.shippings_xml(@data)
52
+ xml.idPlpCliente @request_number
53
+ xml.cartaoPostagem @credentials.card
54
+ @shippings.each do |shipping|
55
+ xml.listaEtiquetas HELPER.label_without_digit_checker(
56
+ shipping[:label_number].dup
57
+ )
58
+ end
59
+ xml.usuario @credentials.sigep_user
60
+ xml.senha @credentials.sigep_password
61
+
62
+ xml.parent.namespace = parent_namespace
63
+ end
64
+ end
65
+ end
66
+ end.doc.root.to_xml
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,76 @@
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 RequestLabelNumbers < 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
+ @amount = data[:amount]
19
+ @service_id = data[:service_id]
20
+ super()
21
+ end
22
+
23
+ def request
24
+ puts xml if @show_request == true
25
+ begin
26
+ format_response(CLIENT.client.call(:solicita_etiquetas,
27
+ soap_action: '',
28
+ xml: xml).to_hash)
29
+ rescue Savon::SOAPFault => error
30
+ generate_exception(error)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def xml
37
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
38
+ xml['soap'].Envelope(HELPER.namespaces) do
39
+ xml['soap'].Body do
40
+ xml['ns1'].solicitaEtiquetas do
41
+ parent_namespace = xml.parent.namespace
42
+ xml.parent.namespace = nil
43
+
44
+ xml.tipoDestinatario 'C'
45
+ xml.idServico @service_id
46
+ xml.qtdEtiquetas @amount
47
+ xml.identificador @credentials.cnpj
48
+ xml.usuario @credentials.sigep_user
49
+ xml.senha @credentials.sigep_password
50
+
51
+ xml.parent.namespace = parent_namespace
52
+ end
53
+ end
54
+ end
55
+ end.doc.root.to_xml
56
+ end
57
+
58
+ def format_response(response)
59
+ response = response[:solicita_etiquetas_response][:return]
60
+ response = response.split(',')
61
+
62
+ initial_number = response[0].dup.delete('^0-9').to_i
63
+ final_number = response[1].dup.delete('^0-9').to_i
64
+
65
+ label_numbers = []
66
+ while initial_number <= final_number do
67
+ letters = response[0].dup.delete('0-9')
68
+ label_numbers << letters.insert(2, "#{initial_number}")
69
+ initial_number += 1
70
+ end
71
+
72
+ { label_numbers: label_numbers }
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,208 @@
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 RequestShippingsXML < 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
+ @request_id = data[:request_id]
19
+ super()
20
+ end
21
+
22
+ def request
23
+ puts xml if @show_request == true
24
+ begin
25
+ format_response(CLIENT.client.call(:solicita_xml_plp,
26
+ soap_action: '',
27
+ xml: xml).to_hash)
28
+ rescue Savon::SOAPFault => error
29
+ generate_exception(error)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def xml
36
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
37
+ xml['soap'].Envelope(HELPER.namespaces) do
38
+ xml['soap'].Body do
39
+ xml['ns1'].solicitaXmlPlp do
40
+ parent_namespace = xml.parent.namespace
41
+ xml.parent.namespace = nil
42
+
43
+ xml.idPlpMaster @request_id
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[:solicita_xml_plp_response][:return]
56
+ response = Hash.from_xml(response)
57
+
58
+ request = response['correioslog']['plp']
59
+ sender = response['correioslog']['remetente']
60
+
61
+ shippings = response['correioslog']['objeto_postal']
62
+ shippings = [shippings] if shippings.is_a?(Hash)
63
+
64
+ formatted_shippings = []
65
+ shippings.each do |shipping|
66
+ formatted_shippings << format_shipping(shipping)
67
+ end
68
+
69
+ {
70
+ request_id: request['id_plp'],
71
+ card: request['cartao_postagem'],
72
+ global_value: request['valor_global'].to_f,
73
+ payment_method: payment_method(
74
+ response['correioslog']['forma_pagamento']
75
+ ),
76
+ shipping_site: {
77
+ name: request['nome_unidade_postagem'],
78
+ code: request['mcu_unidade_postagem']
79
+ },
80
+ sender: format_sender(sender),
81
+ shippings: formatted_shippings
82
+ }
83
+ end
84
+
85
+ def format_sender(sender)
86
+ {
87
+ contract: sender['numero_contrato'],
88
+ board_id: sender['numero_diretoria'],
89
+ administrative_code: sender['codigo_administrativo'],
90
+ name: sender['nome_remetente'],
91
+ phone: sender['telefone_remetente'],
92
+ fax: sender['fax_remetente'],
93
+ email: sender['email_remetente'],
94
+ address: {
95
+ zip_code: sender['cep_remetente'],
96
+ state: sender['uf_remetente'],
97
+ city: sender['cidade_remetente'],
98
+ neighborhood: sender['bairro_remetente'],
99
+ street: sender['logradouro_remetente'],
100
+ number: sender['numero_remetente'],
101
+ additional: sender['complemento_remetente']
102
+ }
103
+ }
104
+ end
105
+
106
+ def format_shipping(shipping)
107
+ additional_services = shipping['servico_adicional']['codigo_servico_adicional']
108
+ additional_services = [additional_services] if additional_services.is_a?(String)
109
+
110
+ {
111
+ label_number: shipping['numero_etiqueta'],
112
+ service_code: shipping['codigo_servico_postagem'],
113
+ cost_center: shipping['nacional']['centro_custo_cliente'],
114
+ description: shipping['nacional']['descricao_objeto'],
115
+ declared_value: shipping['servico_adicional']['valor_declarado'],
116
+ value: shipping['valor_cobrado'].to_f,
117
+ proof_number: shipping['numero_comprovante_postagem'],
118
+ cubage: shipping['cubagem'].to_f,
119
+ additional_value: HELPER.convert_string_to_decimal(
120
+ shipping['nacional']['valor_a_cobrar']
121
+ ),
122
+ additional_services: additional_services,
123
+ notes: format_notes(shipping),
124
+ receiver: format_receiver(
125
+ shipping['destinatario'], shipping['nacional']
126
+ ),
127
+ invoice: format_invoice(shipping['nacional']),
128
+ object: format_object(
129
+ shipping['dimensao_objeto'], shipping['peso']
130
+ )
131
+ }
132
+ end
133
+
134
+ def format_notes(shipping)
135
+ notes = []
136
+ notes << shipping['rt1'] if shipping['rt1'].present?
137
+ notes << shipping['rt2'] if shipping['rt2'].present?
138
+ notes
139
+ end
140
+
141
+ def format_receiver(receiver, national)
142
+ {
143
+ name: receiver['nome_destinatario'],
144
+ phone: receiver['telefone_destinatario'],
145
+ cellphone: receiver['celular_destinatario'],
146
+ email: receiver['email_destinatario'],
147
+ address: {
148
+ zip_code: national['cep_destinatario'],
149
+ state: national['uf_destinatario'],
150
+ city: national['cidade_destinatario'],
151
+ neighborhood: national['bairro_destinatario'],
152
+ street: receiver['logradouro_destinatario'],
153
+ number: receiver['numero_end_destinatario'],
154
+ additional: receiver['complemento_destinatario']
155
+ }
156
+ }
157
+ end
158
+
159
+ def format_invoice(national)
160
+ {
161
+ number: national['numero_nota_fiscal'],
162
+ serie: national['serie_nota_fiscal'],
163
+ kind: national['natureza_nota_fiscal'],
164
+ value: national['valor_nota_fiscal']
165
+ }
166
+ end
167
+
168
+ def format_object(object, weight)
169
+ {
170
+ type: object_type(object['tipo_objeto']),
171
+ height: object['dimensao_altura'].to_f,
172
+ width: object['dimensao_largura'].to_f,
173
+ length: object['dimensao_comprimento'].to_f,
174
+ diameter: object['dimensao_diametro'].to_f,
175
+ weight: weight.to_f
176
+ }
177
+ end
178
+
179
+ def payment_method(method)
180
+ case method
181
+ when '1'
182
+ :postal_vouncher
183
+ when '2'
184
+ :postal_refound
185
+ when '3'
186
+ :exchange_contract
187
+ when '4'
188
+ :credit_card
189
+ when '5'
190
+ :other
191
+ when nil
192
+ :to_bill
193
+ end
194
+ end
195
+
196
+ def object_type(type)
197
+ case type
198
+ when '1'
199
+ :letter_envelope
200
+ when '2'
201
+ :box_prism
202
+ when '3'
203
+ :cylinder
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end