class ColissimoLabel::FindRelayPoint

Public Class Methods

new(addressee_data, estimated_delivery_date, weight_package) click to toggle source
# File lib/colissimo_label/find_relay_point.rb, line 7
def initialize(addressee_data, estimated_delivery_date, weight_package)
  @addressee_data          = addressee_data
  @estimated_delivery_date = estimated_delivery_date
  @weight_package          = weight_package
  @errors                  = []
end

Public Instance Methods

perform() click to toggle source
# File lib/colissimo_label/find_relay_point.rb, line 14
 def perform
   response      = perform_request
   status        = response.code
   soap_response = response.to_param

   raise StandardError, soap_response if status != 200

   parse         = Nokogiri::XML(soap_response)
   root          = parse.root
   error_code    = root.xpath('//errorCode').text
   error_message = root.xpath('//errorMessage').text

   raise StandardError, error_message if error_code != '0'

   root.xpath('//listePointRetraitAcheminement').map do |point|
     {
       pickup_id:      point.at_xpath('identifiant').text,
       pickup_type:    point.at_xpath('typeDePoint
').text,
       name:           point.at_xpath('nom').text,
       address:        [point.at_xpath('adresse1'), point.at_xpath('adresse2'), point.at_xpath('adresse3')].map(&:text).select(&:present?).join(' '),
       postcode:       point.at_xpath('codePostal').text,
       city:           point.at_xpath('localite').text,
       country:        point.at_xpath('libellePays').text,
       country_code:   point.at_xpath('codePays').text,
       latitude:       point.at_xpath('coordGeolocalisationLatitude').text.to_f,
       longitude:      point.at_xpath('coordGeolocalisationLongitude').text.to_f,
       distance:       point.at_xpath('distanceEnMetre').text.to_i,
       max_weight:     point.at_xpath('poidsMaxi').text.to_i,
       parking:        point.at_xpath('parking').text.to_b,
       business_hours: {
         monday:    point.at_xpath('horairesOuvertureLundi').text,
         tuesday:   point.at_xpath('horairesOuvertureMardi').text,
         wednesday: point.at_xpath('horairesOuvertureMercredi').text,
         thursday:  point.at_xpath('horairesOuvertureJeudi').text,
         friday:    point.at_xpath('horairesOuvertureVendredi').text,
         saturday:  point.at_xpath('horairesOuvertureSamedi').text,
         sunday:    point.at_xpath('horairesOuvertureDimanche').text
       }
     }
   end
 end

Private Instance Methods

perform_request() click to toggle source
# File lib/colissimo_label/find_relay_point.rb, line 59
def perform_request
  HTTP.get(service_url,
           params: {
                     accountNumber: ColissimoLabel.contract_number,
                     password:      ColissimoLabel.contract_password,
                     address:       @addressee_data[:address],
                     zipCode:       @addressee_data[:postcode],
                     city:          @addressee_data[:city],
                     countryCode:   @addressee_data[:country_code],
                     shippingDate:  @estimated_delivery_date,
                     weight:        @weight_package
                   }.compact)
end
service_url(service = 'findRDVPointRetraitAcheminement') click to toggle source

Services => findRDVPointRetraitAcheminement : à partir d’une adresse postale fournie en entrée, restitue les points de retrait les plus proches de cette adresse findPointRetraitAcheminementByID : à partir d’un Identifiant de Point Retrait (identifiant Point Retrait), restitue le détail des informations associé au Point Retrait transmis

# File lib/colissimo_label/find_relay_point.rb, line 76
def service_url(service = 'findRDVPointRetraitAcheminement')
  "https://ws.colissimo.fr/pointretrait-ws-cxf/PointRetraitServiceWS/2.0/#{service}"
end