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,186 @@
1
+ # Pricefier
2
+ require_relative 'pricefier/requests/calculate_deadline'
3
+ require_relative 'pricefier/requests/calculate_deadline_with_date'
4
+ require_relative 'pricefier/requests/calculate_deadline_with_restrictions'
5
+ require_relative 'pricefier/requests/calculate_price'
6
+ require_relative 'pricefier/requests/calculate_price_deadline'
7
+ require_relative 'pricefier/requests/calculate_price_deadline_with_date'
8
+ require_relative 'pricefier/requests/calculate_price_deadline_with_restrictions'
9
+ require_relative 'pricefier/requests/calculate_price_fac'
10
+ require_relative 'pricefier/requests/calculate_price_with_date'
11
+ require_relative 'pricefier/requests/list_services'
12
+ require_relative 'pricefier/requests/list_services_star'
13
+
14
+ # Reverse Logistics
15
+ require_relative 'reverse_logistics/requests/calculate_ticket_number_check_digit'
16
+ require_relative 'reverse_logistics/requests/cancel_shipping'
17
+ require_relative 'reverse_logistics/requests/create_shippings'
18
+ require_relative 'reverse_logistics/requests/create_shippings_with_collection'
19
+ require_relative 'reverse_logistics/requests/request_ticket_numbers'
20
+ require_relative 'reverse_logistics/requests/track_shipping'
21
+ require_relative 'reverse_logistics/requests/track_shippings_by_date'
22
+
23
+ # Sigep
24
+ require_relative 'sigep/requests/cancel_shipping'
25
+ require_relative 'sigep/requests/calculate_label_number_check_digit'
26
+ require_relative 'sigep/requests/check_card_status'
27
+ require_relative 'sigep/requests/check_service_availability'
28
+ require_relative 'sigep/requests/create_shippings'
29
+ require_relative 'sigep/requests/request_label_numbers'
30
+ require_relative 'sigep/requests/request_shippings_xml'
31
+ require_relative 'sigep/requests/search_available_additional_services'
32
+ require_relative 'sigep/requests/search_customer'
33
+ require_relative 'sigep/requests/search_zip_code'
34
+ require_relative 'sigep/requests/track_shippings'
35
+
36
+ # SRO
37
+ require_relative 'SRO/requests/track_shippings'
38
+ require_relative 'SRO/requests/track_shippings_list'
39
+
40
+ require_relative 'credentials'
41
+
42
+ module Correios
43
+ def self.test
44
+ 'YAY! Correios_gem is working! Have fun!'
45
+ end
46
+
47
+ def self.authenticate
48
+ yield(credentials)
49
+ end
50
+
51
+ def self.credentials
52
+ @credentials ||= Credentials.new
53
+ end
54
+
55
+ module Pricefier
56
+ def self.calculate_deadline(data = {})
57
+ CalculateDeadline.new(data).request
58
+ end
59
+
60
+ def self.calculate_deadline_with_date(data = {})
61
+ CalculateDeadlineWithDate.new(data).request
62
+ end
63
+
64
+ def self.calculate_deadline_with_restrictions(data = {})
65
+ CalculateDeadlineWithRestrictions.new(data).request
66
+ end
67
+
68
+ def self.calculate_price(data = {})
69
+ CalculatePrice.new(data).request
70
+ end
71
+
72
+ def self.calculate_price_deadline(data = {})
73
+ CalculatePriceDeadline.new(data).request
74
+ end
75
+
76
+ def self.calculate_price_deadline_with_date(data = {})
77
+ CalculatePriceDeadlineWithDate.new(data).request
78
+ end
79
+
80
+ def self.calculate_price_deadline_with_restrictions(data = {})
81
+ CalculatePriceDeadlineWithRestrictions.new(data).request
82
+ end
83
+
84
+ def self.calculate_price_fac(data = {})
85
+ CalculatePriceFAC.new(data).request
86
+ end
87
+
88
+ def self.calculate_price_with_date(data = {})
89
+ CalculatePriceWithDate.new(data).request
90
+ end
91
+
92
+ def self.list_services(data = {})
93
+ ListServices.new(data).request
94
+ end
95
+
96
+ def self.list_services_star(data = {})
97
+ ListServicesSTAR.new(data).request
98
+ end
99
+ end
100
+
101
+ module ReverseLogistics
102
+ def self.calculate_ticket_number_check_digit(data = {})
103
+ CalculateTicketNumberCheckDigit.new(data).request
104
+ end
105
+
106
+ def self.cancel_shipping(data = {})
107
+ CancelShipping.new(data).request
108
+ end
109
+
110
+ def self.create_shippings(data = {})
111
+ CreateShippings.new(data).request
112
+ end
113
+
114
+ def self.create_shippings_with_collection(data = {})
115
+ CreateShippingsWithCollection.new(data).request
116
+ end
117
+
118
+ def self.request_ticket_numbers(data = {})
119
+ RequestTicketNumbers.new(data).request
120
+ end
121
+
122
+ def self.track_shipping(data = {})
123
+ TrackShipping.new(data).request
124
+ end
125
+
126
+ def self.track_shippings_by_date(data = {})
127
+ TrackShippingsByDate.new(data).request
128
+ end
129
+ end
130
+
131
+ module Sigep
132
+ def self.calculate_label_number_check_digit(data = {})
133
+ CalculateLabelNumberCheckDigit.new(data).request
134
+ end
135
+
136
+ def self.cancel_shipping(data = {})
137
+ CancelShipping.new(data).request
138
+ end
139
+
140
+ def self.check_card_status(data = {})
141
+ CheckCardStatus.new(data).request
142
+ end
143
+
144
+ def self.check_service_availability(data = {})
145
+ CheckServiceAvailability.new(data).request
146
+ end
147
+
148
+ def self.create_shippings(data = {})
149
+ CreateShippings.new(data).request
150
+ end
151
+
152
+ def self.request_label_numbers(data = {})
153
+ RequestLabelNumbers.new(data).request
154
+ end
155
+
156
+ def self.request_shippings_xml(data = {})
157
+ RequestShippingsXML.new(data).request
158
+ end
159
+
160
+ def self.search_available_additional_services(data = {})
161
+ SearchAvailableAdditionalServices.new(data).request
162
+ end
163
+
164
+ def self.search_customer(data = {})
165
+ SearchCustomer.new(data).request
166
+ end
167
+
168
+ def self.search_zip_code(data = {})
169
+ SearchZipCode.new(data).request
170
+ end
171
+
172
+ def self.track_shippings(data = {})
173
+ TrackShippings.new(data).request
174
+ end
175
+ end
176
+
177
+ module SRO
178
+ def self.track_shippings(data = {})
179
+ TrackShippings.new(data).request
180
+ end
181
+
182
+ def self.track_shippings_list(data = {})
183
+ TrackShippingsList.new(data).request
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,27 @@
1
+ module Correios
2
+ class Credentials
3
+ attr_accessor :sigep_user,
4
+ :sigep_password,
5
+ :administrative_code,
6
+ :contract,
7
+ :card,
8
+ :cnpj,
9
+ :reverse_logistics_user,
10
+ :reverse_logistics_password,
11
+ :sro_user,
12
+ :sro_password
13
+
14
+ def initialize
15
+ self.sigep_user = sigep_user
16
+ self.sigep_password = sigep_password
17
+ self.administrative_code = administrative_code
18
+ self.contract = contract
19
+ self.card = card
20
+ self.cnpj = cnpj
21
+ self.reverse_logistics_user = reverse_logistics_user
22
+ self.reverse_logistics_password = reverse_logistics_password
23
+ self.sro_user = sro_user
24
+ self.sro_password = sro_password
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,72 @@
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
@@ -0,0 +1,100 @@
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 CalculateDeadline < 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
+ super()
20
+ end
21
+
22
+ def request
23
+ puts xml if @show_request == true
24
+ begin
25
+ format_response(CLIENT.client.call(:calc_prazo,
26
+ soap_action: 'http://tempuri.org/CalcPrazo',
27
+ xml: xml).to_hash)
28
+ rescue Savon::SOAPFault => error
29
+ generate_exception(error)
30
+ 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}).")
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def xml
41
+ Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
42
+ xml['soap'].Envelope(HELPER.namespaces) do
43
+ xml['soap'].Body do
44
+ xml['ns1'].CalcPrazo do
45
+ xml.nCdServico HELPER.format_service_codes(@service_codes)
46
+ xml.sCepOrigem @source_zip_code
47
+ xml.sCepDestino @target_zip_code
48
+ end
49
+ end
50
+ end
51
+ end.doc.root.to_xml
52
+ end
53
+
54
+ def format_response(response)
55
+ response = response[:calc_prazo_response][:calc_prazo_result]
56
+
57
+ services = response[:servicos][:c_servico]
58
+ services = [services] if services.is_a?(Hash)
59
+
60
+ formatted_services = []
61
+ services.each do |service|
62
+ formatted_services << format_service(service)
63
+ end
64
+
65
+ {
66
+ services: formatted_services
67
+ }
68
+ end
69
+
70
+ def format_service(service)
71
+ if [0, 10, 11].include?(service[:erro].to_i)
72
+ {
73
+ code: service[:codigo],
74
+ delivery_at_home: HELPER.convert_string_to_bool(
75
+ service[:entrega_domiciliar]
76
+ ),
77
+ delivery_on_saturdays: HELPER.convert_string_to_bool(
78
+ service[:entrega_sabado]
79
+ ),
80
+ note: service[:obs_fim],
81
+ deadline: {
82
+ days: service[:prazo_entrega].to_i,
83
+ date: HELPER.convert_string_to_date(
84
+ service[:data_max_entrega]
85
+ ),
86
+ }
87
+ }
88
+ else
89
+ {
90
+ code: service[:codigo],
91
+ error: {
92
+ code: service[:erro],
93
+ description: service[:msg_erro]
94
+ }
95
+ }
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,102 @@
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