hermes_api 0.5.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87f92e8ae4fdbdc63d9e57027707610b8e46beb0017887e3653b30fb7100917e
4
- data.tar.gz: 9943983c9eb55d666baf6941450a5c960df500af17a653bd4f4c652b949b581d
3
+ metadata.gz: e46834a6a9ce66e5a73e5a352ebe1384e53cadb20933d4e51cbcf93bfa1fc9e8
4
+ data.tar.gz: cc774117acd165f1a01ed476ea88b65eeb68b0a4b37b2122e199bfcdd55be7d8
5
5
  SHA512:
6
- metadata.gz: b0424b7e0049fd9fba5c542b22007b6232e5188f11c7711d4fcdab8d8255957d7382a04a8a7e66cb8ed0ef226021971ae0ebd76f1808f125c204ec81f5939038
7
- data.tar.gz: 8118f608d127c49d58c843136d6269553dcabfccff2e05fe703dbbbafd970dfe86f280321252d54a8b7f38f17ed0c4977604094c2134696cb6bdad9c26fec81f
6
+ metadata.gz: 05c7e2f756c0c68c8dfa535cbb8cbf064582352146f346bca765bfd31c146b94e4045b0f2f49170e97d2561ca2f5ba4012161632e110afdcd12e149e34aeb56c
7
+ data.tar.gz: 1df67df9cd32108bbf3de5da31b1b25b3f646f4394fc5fd4cd390d303065b3f3f16de0532b30ed6ac1f2434db9d55cb7a0d7e611ed32b256d5064bf9a904dbc3
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hermes_api (0.5.1)
4
+ hermes_api (0.5.2)
5
5
  activeresource (>= 4.1.0, < 6.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (6.1.4)
11
- activesupport (= 6.1.4)
10
+ activemodel (6.1.4.1)
11
+ activesupport (= 6.1.4.1)
12
12
  activemodel-serializers-xml (1.0.2)
13
13
  activemodel (> 5.x)
14
14
  activesupport (> 5.x)
@@ -17,7 +17,7 @@ GEM
17
17
  activemodel (>= 5.0, < 7)
18
18
  activemodel-serializers-xml (~> 1.0)
19
19
  activesupport (>= 5.0, < 7)
20
- activesupport (6.1.4)
20
+ activesupport (6.1.4.1)
21
21
  concurrent-ruby (~> 1.0, >= 1.0.2)
22
22
  i18n (>= 1.6, < 2)
23
23
  minitest (>= 5.1)
data/bin/console CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
+ require "pry"
4
5
  require "bundler/setup"
5
6
  require "dotenv/load"
6
7
  require "dev/zeitwerk_loader"
@@ -11,5 +12,4 @@ require "hermes_api"
11
12
  set_config
12
13
 
13
14
  # (If you use this, don't forget to add pry to your Gemfile!)
14
- require "pry"
15
15
  Pry.start
data/lib/dev/config.rb CHANGED
@@ -2,7 +2,9 @@ require "dotenv/load"
2
2
 
3
3
  def set_config
4
4
  HermesAPI.configure do |config|
5
- config.env = :production
5
+ config.env = :test
6
+ # Set to production when testing HermesAPI::TrackingEvent resource
7
+ # config.env = :production
6
8
  config.proxy = ENV["HERMES_API_PROXY"]
7
9
  end
8
10
  end
@@ -4,18 +4,50 @@ module HermesAPI
4
4
  ActiveResource::Formats::XmlFormat.decode(@response.body)
5
5
  end
6
6
 
7
- def to_s
8
- response = ActiveResource::Formats::XmlFormat.decode(@response.body)
9
- entries = response.dig("routingResponseEntries", "routingResponseEntry")
7
+ def code
8
+ if entries.is_a? Array
9
+ entries.map do |entry|
10
+ entry.dig("errorMessages", "errorCode")
11
+ end
12
+ else
13
+ entries.dig("errorMessages", "errorCode")
14
+ end
15
+ end
16
+
17
+ alias_method :codes, :code
18
+
19
+ def description
20
+ unless entries.is_a? Array
21
+ entries.dig("errorMessages", "errorDescription")
22
+ end
23
+ end
24
+
25
+ def code_with_descriptions
10
26
  if entries.is_a? Array
11
27
  entries.map do |entry|
12
- error = entry.dig("errorMessages")
13
- "Something went wrong, Error Code: #{error["errorCode"]}, Error Description: #{error["errorDescription"]}."
14
- end.to_s
28
+ code = entry.dig("errorMessages", "errorCode")
29
+ description = entry.dig("errorMessages", "errorDescription")
30
+ "#{code}: #{description}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def to_s
36
+ if entries.is_a? Array
37
+ "#{code_with_descriptions.join(", ")}."
15
38
  else
16
- error = entries.dig("errorMessages")
17
- "Something went wrong. Error Code: #{error["errorCode"]} Error Description: #{error["errorDescription"]}"
39
+ "#{code}: #{description}."
18
40
  end
19
41
  end
42
+
43
+ private
44
+
45
+ def decoded_response
46
+ ActiveResource::Formats::XmlFormat.decode(@response.body)
47
+ end
48
+
49
+ def entries
50
+ decoded_response.dig("routingResponseEntries", "routingResponseEntry")
51
+ end
20
52
  end
21
53
  end
@@ -29,8 +29,13 @@ module HermesAPI
29
29
  super
30
30
  end
31
31
 
32
+ def load(attributes, remove_root = false, persisted = false)
33
+ attributes.deep_transform_keys! { |k| k.to_s.underscore }
34
+ super
35
+ end
36
+
32
37
  def to_xml(options = {})
33
- super({root: self.class.root}.merge(options))
38
+ super({root: self.class.root, camelize: :lower}.merge(options))
34
39
  end
35
40
  end
36
41
  end
@@ -0,0 +1,166 @@
1
+ module HermesAPI
2
+ class DropOffReturnLabel < Base
3
+ # Create return label(s) wheredrop off at ParcelShops.
4
+ # HermesUK doc: https://drive.google.com/file/d/1lVuHd2o4nDWrGkacG0GrvNm7LYVL_bFd/view?usp=sharing
5
+ # You can choose to create a batch of return labels by passing in multiple collectionRoutingRequestEntry.
6
+ # Example:
7
+ # HermesAPI::Base.with_session("username", "password") do
8
+ # request_body = {client_id: "1234",
9
+ # client_name: "Leggings",
10
+ # child_client_id: "",
11
+ # child_client_name: "",
12
+ # source_of_request: "CLIENTWS",
13
+ # collection_routing_request_entries: [{ # collectionRoutingRequestEntry
14
+ # customer: {
15
+ # address: {
16
+ # first_name: "Leonie", lastame: "E", houseName: "2", streetName: "Street",
17
+ # addressLine1: "2 Street", addressLine2: "Fulham", postCode: "SW6 6EL",
18
+ # city: "London", region: "", countryCode: "GB"
19
+ # },
20
+ # mobilePhoneNo: "+447884571522",
21
+ # email: "leonie@london.com",
22
+ # customerReference1: "8284"
23
+ # },
24
+ # countryOfOrigin: "GB"
25
+ # }]}
26
+ # @order = HermesAPI::DropOffReturnLabel.new(request_body)
27
+ # @order.save
28
+
29
+ # # Request for a single print in store QR code by wrapping in an oauth session block, only work with 1 label.
30
+ # # To request a batch of QR codes, use the HermesAPI::PrintInStoreQrCode#create directly.
31
+
32
+ # HermesAPI::PrintInStoreQrCode.with_oauth_session("api_key", "client_id/auth_id", "client_secret/auth_secret") do
33
+ # @order.request_print_in_store_qr_code(
34
+ # delivery_address: {
35
+ # name: "Andy",
36
+ # address_line1: "7 Street",
37
+ # address_line2: "Fulham",
38
+ # country_code: "GB",
39
+ # postcode: "SW6 6EL"
40
+ # },
41
+ # dimensions: {
42
+ # depth: 15,
43
+ # length: 20,
44
+ # width: 15,
45
+ # weight: 1
46
+ # },
47
+ # value: {
48
+ # currency: "GBP",
49
+ # amount: 10
50
+ # }
51
+ # )
52
+ # end
53
+ # end
54
+
55
+ include ReturnLabelHelper
56
+
57
+ self.prefix = "/routing/service/rest/v4/createReturnBarcodeAndLabel"
58
+ self.element_name = ""
59
+
60
+ DEFAULT_ATTRS = {
61
+ client_id: "",
62
+ client_name: "",
63
+ child_client_id: "",
64
+ child_client_name: "",
65
+ source_of_request: "",
66
+ collection_routing_request_entries: [{
67
+ customer: {
68
+ address: {
69
+ first_name: "",
70
+ last_name: "",
71
+ house_name: "",
72
+ street_name: "",
73
+ address_line1: "",
74
+ post_code: "",
75
+ city: "",
76
+ region: "",
77
+ country_code: ""
78
+ },
79
+ mobile_phone_no: "",
80
+ email: "",
81
+ customer_reference1: ""
82
+ },
83
+ country_of_origin: ""
84
+ }]
85
+ }
86
+
87
+ def request_print_in_store_qr_code(**attrs)
88
+ if missing_required_qr_code_attributes?(attrs)
89
+ raise ArgumentError, request_print_in_store_qr_code_error_message
90
+ end
91
+
92
+ return nil if attributes["routing_response_entries"].blank?
93
+
94
+ entries = routing_response_entries.routing_response_entry
95
+ entry = entries.is_a?(Array) ? entries[0] : entries
96
+ carrier = entry.inbound_carriers.carrier1
97
+ barcode = carrier.barcode1
98
+ customer = collection_routing_request_entries[0].customer
99
+ address = customer.address
100
+
101
+ self.print_in_store_qr_code = PrintInStoreQrCode.create(
102
+ customer: {
103
+ customer_reference1: customer.customer_reference1
104
+ },
105
+ label_type: "RETURN",
106
+ barcode: {
107
+ barcode: barcode.barcode_number,
108
+ barcode_display: barcode.barcode_display
109
+ },
110
+ client: {
111
+ client_id: client_id,
112
+ client_name: client_name
113
+ },
114
+ routing: {
115
+ delivery_method: {
116
+ delivery_method_id: carrier.delivery_method_code,
117
+ delivery_method_description: carrier.delivery_method_desc
118
+ },
119
+ sort_levels: {
120
+ sort_level1: carrier.sort_level1.strip,
121
+ sort_level2: carrier.sort_level2
122
+ }
123
+ },
124
+ service_offers: [],
125
+ **attrs
126
+ )
127
+ end
128
+
129
+ private
130
+
131
+ def missing_required_qr_code_attributes?(attrs)
132
+ ([:dimensions, :value, :delivery_address] - attrs.keys).length > 0
133
+ end
134
+
135
+ def request_print_in_store_qr_code_error_message
136
+ <<~ERR_MESSAGE
137
+ Missing required attributes
138
+ Example:
139
+
140
+ label = HermesAPI::DropOffReturnLabel.new(...)
141
+
142
+ if label.save
143
+ label.request_print_in_store_qr_code(
144
+ dimensions: {
145
+ depth: 15,
146
+ length: 20,
147
+ width: 15,
148
+ weight: 1
149
+ },
150
+ value: {
151
+ currency: 'GBP',
152
+ amount: 10
153
+ },
154
+ delivery_address: {
155
+ name: 'Don Joe',
156
+ address_line1: 'Real Logic',
157
+ address_line2: '4-4 Ridings Park, Eastern Way',
158
+ country_code: 'GB',
159
+ postcode: 'WS117FJ'
160
+ }
161
+ )
162
+ end
163
+ ERR_MESSAGE
164
+ end
165
+ end
166
+ end
@@ -6,5 +6,15 @@ module HermesAPI
6
6
  def self.inherited(subclass)
7
7
  subclass.extend(BearerAuth)
8
8
  end
9
+
10
+ def load(attributes, remove_root = false, persisted = false)
11
+ attributes.deep_transform_keys! { |k| k.to_s.underscore }
12
+ super
13
+ end
14
+
15
+ def to_json(options = {})
16
+ attributes.as_json.deep_transform_keys { |k| k.to_s.camelize(:lower) }
17
+ .to_json(include_root_in_json ? {root: self.class.element_name}.merge(options) : options)
18
+ end
9
19
  end
10
20
  end
@@ -0,0 +1,85 @@
1
+ module HermesAPI
2
+ class PickupReturnLabel < Base
3
+ # Create return label(s) with courier pickup request.
4
+ # HermesUK doc: https://drive.google.com/file/d/1lVuHd2o4nDWrGkacG0GrvNm7LYVL_bFd/view?usp=sharing
5
+ # You can choose to create a batch of return labels by passing in multiple collectionRoutingRequestEntry.
6
+ # Example:
7
+ # HermesAPI::Base.with_session("username", "password") do
8
+ # request_body = {clientId: "249",
9
+ # clientName: "Leggings",
10
+ # childClientId: "",
11
+ # childClientName: "",
12
+ # sourceOfRequest: "CLIENTWS",
13
+ # routingStartDate: Time.now.tomorrow.strftime("%Y-%m-%dT%H:%M:%S"),
14
+ # collectionRoutingRequestEntries: [{ # collectionRoutingRequestEntry
15
+ # customer: {
16
+ # address: {
17
+ # firstName: "Leonie", lastName: "E", houseName: "2", streetName: "Street",
18
+ # addressLine1: "2 Street", addressLine2: "Fulham", postCode: "SW6 6EL",
19
+ # city: "London", region: "", countryCode: "GB"
20
+ # },
21
+ # mobilePhoneNo: "+447884571522",
22
+ # email: "leonie@london.com",
23
+ # customerReference1: "8284"
24
+ # },
25
+ # parcel: {
26
+ # weight: 1,
27
+ # length: 10,
28
+ # width: 10,
29
+ # depth: 10,
30
+ # girth: 0,
31
+ # combinedDimension: 0,
32
+ # volume: 0,
33
+ # value: 10,
34
+ # description: "Parcel"
35
+ # },
36
+ # countryOfOrigin: "GB"
37
+ # }]}
38
+ # @order = HermesAPI::PickupReturnLabel.new(request_body)
39
+ # @order.save
40
+ # end
41
+
42
+ include ReturnLabelHelper
43
+
44
+ self.prefix = "/routing/service/rest/v4/routeCollectionCreatePreadviceReturnBarcodeAndLabel"
45
+ self.element_name = ""
46
+
47
+ DEFAULT_ATTRS = {
48
+ client_id: "",
49
+ client_name: "",
50
+ child_client_id: "",
51
+ child_client_name: "",
52
+ source_of_request: "",
53
+ collection_routing_request_entries: [{
54
+ customer: {
55
+ address: {
56
+ first_name: "",
57
+ last_name: "",
58
+ house_name: "",
59
+ street_name: "",
60
+ address_line1: "",
61
+ post_code: "",
62
+ city: "",
63
+ region: "",
64
+ country_code: ""
65
+ },
66
+ parcel: {
67
+ weight: 1,
68
+ length: 10,
69
+ width: 10,
70
+ depth: 10,
71
+ girth: 0,
72
+ combined_dimension: 0,
73
+ volume: 0,
74
+ value: 10,
75
+ description: "Parcel"
76
+ },
77
+ mobile_phone_no: "",
78
+ email: "",
79
+ customer_reference1: ""
80
+ },
81
+ country_of_origin: ""
82
+ }]
83
+ }
84
+ end
85
+ end
@@ -9,8 +9,8 @@ module HermesAPI
9
9
  super
10
10
  end
11
11
 
12
- def qr_code
13
- base64_data = as_json.dig("qrCode", "base64EncodedBytes")
12
+ def qr_code_image
13
+ base64_data = as_json.dig("qr_code", "base64_encoded_bytes")
14
14
  Base64.decode64(base64_data) if base64_data
15
15
  end
16
16
  end
@@ -1,11 +1,11 @@
1
1
  module HermesAPI
2
2
  class TrackingEvent < JsonBase
3
- # # Retrieve TrackingEvents by wrapping in an oauth session block
3
+ # # Retrieve TrackingEvents by wrapping in an oauth session block
4
+ #
5
+ # HermesAPI::TrackingEvent.with_oauth_session("api_key", "client_id/auth_id", "client_secret/auth_secret") do
6
+ # HermesAPI::TrackingEvent.where(barcode: "123456789")
7
+ # end
4
8
  #
5
- # HermesAPI::TrackingEvent.with_oauth_session("api_key", "client_id/auth_id", "client_secret/auth_secret") do
6
- # HermesAPI::TrackingEvent.where(barcode: "123456789")
7
- # end
8
-
9
9
  self.element_name = ""
10
10
  self.prefix = "/client-tracking-api/v1/events"
11
11
 
@@ -1,5 +1,9 @@
1
1
  module HermesAPI
2
2
  class WebTracking < ActiveResource::Base
3
+ # # Retrieve TrackingEvents from web site: https://www.myhermes.co.uk/track
4
+
5
+ # HermesAPI::WebTracking.find("1234512345")
6
+
3
7
  self.element_name = ""
4
8
  self.site = "https://api.hermesworld.co.uk"
5
9
  self.prefix = "/enterprise-tracking-api/v1/parcels"
@@ -18,7 +22,8 @@ module HermesAPI
18
22
 
19
23
  def load(attributes, remove_root = false, persisted = false)
20
24
  attributes = attributes.dig("results", 0)
21
- super(attributes)
25
+ attributes.deep_transform_keys! { |k| k.to_s.underscore }
26
+ super
22
27
  end
23
28
 
24
29
  def self.find(barcode)
@@ -0,0 +1,41 @@
1
+ module HermesAPI
2
+ module ReturnLabelHelper
3
+ module ClassMethods
4
+ def root
5
+ :collectionRoutingRequest
6
+ end
7
+ end
8
+
9
+ def self.included(base_klass)
10
+ base_klass.extend(ClassMethods)
11
+ end
12
+
13
+ def labels
14
+ entries = routing_response_entries.routing_response_entry
15
+ if entries.is_a?(Array)
16
+ entries.map do |entry|
17
+ Base64.decode64(entry.inbound_carriers.label_image)
18
+ end
19
+ else
20
+ Base64.decode64(entries.inbound_carriers.label_image)
21
+ end
22
+ rescue NameError
23
+ end
24
+
25
+ alias_method :label, :labels
26
+
27
+ def tracking_numbers
28
+ entries = routing_response_entries.routing_response_entry
29
+ if entries.is_a?(Array)
30
+ entries.map do |entry|
31
+ entry.inbound_carriers.carrier1.barcode1.barcode_number
32
+ end
33
+ else
34
+ entries.inbound_carriers.carrier1.barcode1.barcode_number
35
+ end
36
+ rescue NameError
37
+ end
38
+
39
+ alias_method :tracking_number, :tracking_numbers
40
+ end
41
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HermesAPI
4
- VERSION = "0.5.2"
4
+ VERSION = "0.7.0"
5
5
  end
data/lib/hermes_api.rb CHANGED
@@ -4,17 +4,19 @@ require_relative "hermes_api/version"
4
4
  require "active_resource"
5
5
 
6
6
  module HermesAPI
7
- require "hermes_api/cache"
8
7
  require "hermes_api/bearer_auth"
8
+ require "hermes_api/cache"
9
9
  require "hermes_api/configuration"
10
- require "hermes_api/creation_error"
11
10
  require "hermes_api/connection"
11
+ require "hermes_api/creation_error"
12
12
 
13
- require "hermes_api/resources/base"
14
- require "hermes_api/resources/return_label"
13
+ require "hermes_api/shared/return_label_helper"
15
14
 
16
- require "hermes_api/resources/o_auth"
15
+ require "hermes_api/resources/base"
16
+ require "hermes_api/resources/drop_off_return_label"
17
17
  require "hermes_api/resources/json_base"
18
+ require "hermes_api/resources/o_auth"
19
+ require "hermes_api/resources/pickup_return_label"
18
20
  require "hermes_api/resources/print_in_store_qr_code"
19
21
  require "hermes_api/resources/tracking_event"
20
22
  require "hermes_api/resources/web_tracking"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hermes_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Chong
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-31 00:00:00.000000000 Z
11
+ date: 2021-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeresource
@@ -157,12 +157,14 @@ files:
157
157
  - lib/hermes_api/connection.rb
158
158
  - lib/hermes_api/creation_error.rb
159
159
  - lib/hermes_api/resources/base.rb
160
+ - lib/hermes_api/resources/drop_off_return_label.rb
160
161
  - lib/hermes_api/resources/json_base.rb
161
162
  - lib/hermes_api/resources/o_auth.rb
163
+ - lib/hermes_api/resources/pickup_return_label.rb
162
164
  - lib/hermes_api/resources/print_in_store_qr_code.rb
163
- - lib/hermes_api/resources/return_label.rb
164
165
  - lib/hermes_api/resources/tracking_event.rb
165
166
  - lib/hermes_api/resources/web_tracking.rb
167
+ - lib/hermes_api/shared/return_label_helper.rb
166
168
  - lib/hermes_api/version.rb
167
169
  homepage: https://github.com/PostCo/hermes_api
168
170
  licenses:
@@ -1,185 +0,0 @@
1
- module HermesAPI
2
- class ReturnLabel < Base
3
- # Create return label(s).
4
- # You can choose to create a batch of return labels by passing in multiple collectionRoutingRequestEntry.
5
- # Example:
6
- # HermesAPI::Base.with_session("username", "password") do
7
- # request_body = {clientId: "1234",
8
- # clientName: "Life",
9
- # childClientId: "",
10
- # childClientName: "",
11
- # sourceOfRequest: "CLIENTWS",
12
- # collectionRoutingRequestEntries: [{ #collectionRoutingRequestEntry
13
- # customer: {
14
- # address: {
15
- # firstName: "Leonie", lastName: "E", houseName: "2", streetName: "Street",
16
- # addressLine1: "2 Street", addressLine2: "Fulham", postCode: "SW6 6EL",
17
- # city: "London", region: "", countryCode: "GB"
18
- # },
19
- # mobilePhoneNo: "+447884571522",
20
- # email: "leonie@london.com",
21
- # customerReference1: "8284"
22
- # },
23
- # countryOfOrigin: "GB"
24
- # }]}
25
- # @order = HermesAPI::ReturnLabel.new(request_body)
26
- # @order.save
27
- #
28
- # # Request for a single print in store QR code by wrapping in an oauth session block, only work with 1 label.
29
- # # To request a batch of QR codes, use the HermesAPI::PrintInStoreQrCode#create directly.
30
- #
31
- # HermesAPI::PrintInStoreQrCode.with_oauth_session("api_key", "client_id/auth_id", "client_secret/auth_secret") do
32
- # @order.request_print_in_store_qr_code(
33
- # deliveryAddress: {
34
- # name: "Andy",
35
- # addressLine1: "7 Street",
36
- # addressLine2: "Fulham",
37
- # countryCode: "GB",
38
- # postcode: "SW6 6EL"
39
- # },
40
- # dimensions: {
41
- # depth: 15,
42
- # length: 20,
43
- # width: 15,
44
- # weight: 1
45
- # },
46
- # value: {
47
- # currency: "GBP",
48
- # amount: 10
49
- # }
50
- # )
51
- # end
52
- # end
53
- #
54
- self.prefix = "/routing/service/rest/v4/createReturnBarcodeAndLabel"
55
- self.element_name = ""
56
-
57
- DEFAULT_ATTRS = {
58
- clientId: "",
59
- clientName: "",
60
- childClientId: "",
61
- childClientName: "",
62
- sourceOfRequest: "",
63
- collectionRoutingRequestEntries: [{
64
- customer: {
65
- address: {
66
- firstName: "",
67
- lastName: "",
68
- houseName: "",
69
- streetName: "",
70
- addressLine1: "",
71
- postCode: "",
72
- city: "",
73
- region: "",
74
- countryCode: ""
75
- },
76
- mobilePhoneNo: "",
77
- email: "",
78
- customerReference1: ""
79
- },
80
- countryOfOrigin: ""
81
- }]
82
- }
83
-
84
- def self.root
85
- :collectionRoutingRequest
86
- end
87
-
88
- def labels
89
- entries = routingResponseEntries.routingResponseEntry
90
- if entries.is_a?(Array)
91
- entries.map do |entry|
92
- Base64.decode64(entry.inboundCarriers.labelImage)
93
- end
94
- else
95
- Base64.decode64(entries.inboundCarriers.labelImage)
96
- end
97
- rescue NameError
98
- end
99
-
100
- alias_method :label, :labels
101
-
102
- def tracking_numbers
103
- entries = routingResponseEntries.routingResponseEntry
104
- if entries.is_a?(Array)
105
- entries.map do |entry|
106
- entry.inboundCarriers.carrier1.barcode1.barcodeNumber
107
- end
108
- else
109
- entries.inboundCarriers.carrier1.barcode1.barcodeNumber
110
- end
111
- rescue NameError
112
- end
113
-
114
- alias_method :tracking_number, :tracking_numbers
115
-
116
- def request_print_in_store_qr_code(**attrs)
117
- if ([:dimensions, :value, :deliveryAddress] - attrs.keys).length > 0
118
- raise ArgumentError, request_print_in_store_qr_code_error_message
119
- end
120
-
121
- return nil if attributes["routingResponseEntries"].blank?
122
-
123
- entries = routingResponseEntries.routingResponseEntry
124
- entry = entries.is_a?(Array) ? entries[0] : entries
125
- carrier = entry.inboundCarriers.carrier1
126
- barcode = carrier.barcode1
127
- customer = collectionRoutingRequestEntries[0].customer
128
- address = customer.address
129
- self.print_in_store_qr_code = PrintInStoreQrCode.create(
130
- customer: {
131
- customerReference1: customer.customerReference1
132
- },
133
- labelType: "RETURN",
134
- barcode: {
135
- barcode: barcode.barcodeNumber,
136
- barcodeDisplay: barcode.barcodeDisplay
137
- },
138
- client: {
139
- clientId: clientId,
140
- clientName: clientName
141
- },
142
- routing: {
143
- deliveryMethod: {
144
- deliveryMethodId: carrier.deliveryMethodCode,
145
- deliveryMethodDescription: carrier.deliveryMethodDesc
146
- },
147
- sortLevels: {
148
- sortLevel1: carrier.sortLevel1.strip,
149
- sortLevel2: carrier.sortLevel2
150
- }
151
- },
152
- serviceOffers: [],
153
- **attrs
154
- )
155
- end
156
-
157
- private
158
-
159
- def request_print_in_store_qr_code_error_message
160
- <<~HEREDOC
161
- Missing attributes
162
- Example:
163
- HermesAPI::ReturnLabel#request_print_in_store_qr_code(
164
- dimensions: {
165
- depth: 15,
166
- length: 20,
167
- width: 15,
168
- weight: 1
169
- },
170
- value: {
171
- currency: 'GBP',
172
- amount: 10
173
- },
174
- deliveryAddress: {
175
- name: 'Don Joe',
176
- addressLine1: 'Real Logic',
177
- addressLine2: '4-4 Ridings Park, Eastern Way',
178
- countryCode: 'GB',
179
- postcode: 'WS117FJ'
180
- }
181
- )
182
- HEREDOC
183
- end
184
- end
185
- end