colissimo_label 0.3.0 → 0.4.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: 5e90802f1cf838c12269ba5ec5727101638c5b06599cbe886bd7eed2829a5778
4
- data.tar.gz: cdb13594e2d12b5ffa8d054fb47d5a30c6ed086f8d94505d993adb0ddd69dae3
3
+ metadata.gz: 6b20cf6d60590b5b229d08dca579e8526540718702f0818282369af8de9568d7
4
+ data.tar.gz: 6138fdc5edc70493a52af72104ce6df8a5b8f6f060779d5eb3baf63821bae8ae
5
5
  SHA512:
6
- metadata.gz: 9748ea47123020040a4fa91d90514f3db0badc6c745df86115af7e7d2c4dda8444cd11bf4828be4882430af31f14ab984edc5b1e90bbb78eba8cff75350cd03d
7
- data.tar.gz: 1fd5976d56c2ab40cf079aeb55409d17212c28809f98dc770f40fd680180b3445e703987d1fe9d26f1a0a7c2a09f58a1a6adaaac66badae6657302fa37e232e8
6
+ metadata.gz: a4eb97e5a3e6d55a8fe22895bfb31b6cd7a5d5df0f7c6b21ee8edf40ed5b1e655c1aef84dd2d9017474ae240d51c96d49f46e4cdfef3dca7c8a3d505472b1bb0
7
+ data.tar.gz: 2b68731fb099899fe85e593dcfc6412e857cc02eb5cd28fec1d838681e11cc1adfb67a12dbe1a5481877f96908f1f01122228a3a7d683096a0237ddf723be6a4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.4.0
2
+
3
+ - Add `ColissimoLabel::FindRelayPoint` class to fetch available relay points around an address
4
+
1
5
  ## 0.3.0
2
6
 
3
7
  - Incorrect README method
data/README.md CHANGED
@@ -58,6 +58,55 @@ ColissimoLabel.colissimo_local_path = Rails.root.join('public', 'colissimo')
58
58
 
59
59
  ## Usage
60
60
 
61
+ ### Fetch relay points
62
+
63
+ Colissimo webservices provides all relay points around an address.
64
+
65
+ To get all available relay :
66
+
67
+ ```ruby
68
+ relay_points = ColissimoLabel::FindRelayPoint.new(
69
+ {
70
+ address: 'Address',
71
+ city: 'City',
72
+ postcode: 'Postcode',
73
+ country_code: 'Normalized country code (ex: FR)'
74
+ },
75
+ (Date.today + 5.days).strftime('%d/%m/%Y'), # Estimated departure date of the package
76
+ 1000 # Computed weight of the package (in grams)
77
+ ).perform
78
+ ```
79
+
80
+ It will return an array of relay points with the following data:
81
+
82
+ ```ruby
83
+ {
84
+ :pickup_id,
85
+ :name,
86
+ :address,
87
+ :postcode,
88
+ :city,
89
+ :country,
90
+ :country_code,
91
+ :latitude,
92
+ :longitude,
93
+ :distance,
94
+ :max_weight,
95
+ :parking,
96
+ business_hours: {
97
+ :monday,
98
+ :tuesday,
99
+ :wednesday,
100
+ :thursday,
101
+ :friday,
102
+ :saturday,
103
+ :sunday
104
+ }
105
+ }
106
+ ```
107
+
108
+ ### Generate Colissimo label
109
+
61
110
  To generate a new Colissimo label, use the following methods.
62
111
 
63
112
  For a national address:
@@ -72,7 +121,7 @@ parcel_number = ColissimoLabel::GenerateLabel.new(
72
121
  address: 'Address',
73
122
  city: 'City',
74
123
  postcode: 'Postcode',
75
- country_code: 'Normalized country code'
124
+ country_code: 'Normalized country code (ex: FR)'
76
125
  },
77
126
  {
78
127
  last_name: 'Last name of the addressee',
@@ -101,7 +150,7 @@ parcel_number = ColissimoLabel::GenerateLabel.new(
101
150
  address: 'Address',
102
151
  city: 'City',
103
152
  postcode: 'Postcode',
104
- country_code: 'Normalized country code'
153
+ country_code: 'Normalized country code (ex: DE)'
105
154
  },
106
155
  {
107
156
  last_name: 'Last name of the addressee',
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'http'
4
+
5
+ class ColissimoLabel::FindRelayPoint
6
+
7
+ def initialize(addressee_data, estimated_delivery_date, weight_package)
8
+ @addressee_data = addressee_data
9
+ @estimated_delivery_date = estimated_delivery_date
10
+ @weight_package = weight_package
11
+ @errors = []
12
+ end
13
+
14
+ def perform
15
+ response = perform_request
16
+ status = response.code
17
+ soap_response = response.to_param
18
+
19
+ raise StandardError, soap_response if status != 200
20
+
21
+ parse = Nokogiri::XML(soap_response)
22
+ root = parse.root
23
+ error_code = root.xpath('//errorCode').text
24
+ error_message = root.xpath('//errorMessage').text
25
+
26
+ raise StandardError, error_message if error_code != '0'
27
+
28
+ root.xpath('//listePointRetraitAcheminement').map do |point|
29
+ {
30
+ pickup_id: point.at_xpath('identifiant').text,
31
+ name: point.at_xpath('nom').text,
32
+ address: [point.at_xpath('adresse1'), point.at_xpath('adresse2'), point.at_xpath('adresse3')].map(&:text).select(&:present?).join(' '),
33
+ postcode: point.at_xpath('codePostal').text,
34
+ city: point.at_xpath('localite').text,
35
+ country: point.at_xpath('libellePays').text,
36
+ country_code: point.at_xpath('codePays').text,
37
+ latitude: point.at_xpath('coordGeolocalisationLatitude').text.to_f,
38
+ longitude: point.at_xpath('coordGeolocalisationLongitude').text.to_f,
39
+ distance: point.at_xpath('distanceEnMetre').text.to_i,
40
+ max_weight: point.at_xpath('poidsMaxi').text.to_i,
41
+ parking: point.at_xpath('parking').text.to_b,
42
+ business_hours: {
43
+ monday: point.at_xpath('horairesOuvertureLundi').text,
44
+ tuesday: point.at_xpath('horairesOuvertureMardi').text,
45
+ wednesday: point.at_xpath('horairesOuvertureMercredi').text,
46
+ thursday: point.at_xpath('horairesOuvertureJeudi').text,
47
+ friday: point.at_xpath('horairesOuvertureVendredi').text,
48
+ saturday: point.at_xpath('horairesOuvertureSamedi').text,
49
+ sunday: point.at_xpath('horairesOuvertureDimanche').text
50
+ }
51
+ }
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def perform_request
58
+ HTTP.get(service_url,
59
+ params: {
60
+ accountNumber: ColissimoLabel.contract_number,
61
+ password: ColissimoLabel.contract_password,
62
+ address: @addressee_data[:address],
63
+ zipCode: @addressee_data[:postcode],
64
+ city: @addressee_data[:city],
65
+ countryCode: @addressee_data[:country_code],
66
+ shippingDate: @estimated_delivery_date,
67
+ weight: @weight_package
68
+ }.compact)
69
+ end
70
+
71
+ # Services =>
72
+ # findRDVPointRetraitAcheminement : à partir d’une adresse postale fournie en entrée, restitue les points de retrait les plus proches de cette adresse
73
+ # findPointRetraitAcheminementByID : à partir d’un Identifiant de Point Retrait (identifiant Point Retrait), restitue le détail des informations associé au Point Retrait transmis
74
+ def service_url(service = 'findRDVPointRetraitAcheminement')
75
+ "https://ws.colissimo.fr/pointretrait-ws-cxf/PointRetraitServiceWS/2.0/#{service}"
76
+ end
77
+
78
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ColissimoLabel
4
- VERSION = '0.3.0'.freeze
4
+ VERSION = '0.4.0'.freeze
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require 'active_support'
4
4
 
5
5
  require 'colissimo_label/version'
6
+ require 'colissimo_label/find_relay_point'
6
7
  require 'colissimo_label/generate_label'
7
8
 
8
9
  module ColissimoLabel
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colissimo_label
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - FloXcoder
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-09 00:00:00.000000000 Z
11
+ date: 2019-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -159,6 +159,7 @@ files:
159
159
  - bin/setup
160
160
  - colissimo_label.gemspec
161
161
  - lib/colissimo_label.rb
162
+ - lib/colissimo_label/find_relay_point.rb
162
163
  - lib/colissimo_label/generate_label.rb
163
164
  - lib/colissimo_label/logger.rb
164
165
  - lib/colissimo_label/version.rb