hermes_api 0.5.2 → 0.7.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.
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