module Deliveries::Couriers::CorreosExpress

Constants

COLLECTION_POINTS_ENDPOINT_LIVE
COLLECTION_POINTS_ENDPOINT_TEST
CUTOFF_TIME_ENDPOINT_LIVE
Config
LABELS_ENDPOINT_LIVE
LABELS_ENDPOINT_TEST
PICKUPS_ENDPOINT_LIVE
PICKUPS_ENDPOINT_TEST
SHIPMENTS_ENDPOINT_LIVE
SHIPMENTS_ENDPOINT_TEST
TRACKING_INFO_ENDPOINT_LIVE
TRACKING_INFO_ENDPOINT_TEST

Public Instance Methods

create_pickup(sender:, receiver:, parcels:, reference_code:, pickup_date: nil, remarks: nil, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 127
def create_pickup(sender:, receiver:, parcels:, reference_code:,
                  pickup_date: nil, remarks: nil, **)
  time_interval = nil
  begin
    params = Pickups::Create::FormatParams.new(
      sender: sender.courierize(:correos_express),
      receiver: receiver.courierize(:correos_express),
      parcels: parcels,
      reference_code: reference_code,
      pickup_date: pickup_date,
      remarks: remarks,
      time_interval: time_interval
    ).execute

    pickup_number = Pickups::Create.new(params: params).execute
  rescue InvalidTimeIntervalError => e
    raise e if time_interval
    raise e unless (cutoff_time = e.message[/\b(\d+):\d{2}\z/, 1])

    time_interval = 9..cutoff_time.to_i
    retry
  end

  Deliveries::Pickup.new(
    courier_id: 'correos_express',
    sender: sender,
    receiver: receiver,
    parcels: parcels,
    reference_code: reference_code,
    tracking_code: pickup_number,
    pickup_date: pickup_date
  )
end
create_shipment(sender:, receiver:, parcels:, reference_code:, collection_point: nil, shipment_date: nil, remarks: nil, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 115
def create_shipment(sender:, receiver:, parcels:, reference_code:, collection_point: nil, shipment_date: nil, remarks: nil, **)
  Shipments::Create.new(
    sender: sender,
    receiver: receiver,
    collection_point: collection_point,
    shipment_date: shipment_date,
    parcels: parcels,
    reference_code: reference_code,
    remarks: remarks
  ).execute
end
get_collection_point(global_point_id:) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 60
def get_collection_point(global_point_id:)
  global_point = Deliveries::CollectionPoint.parse_global_point_id(global_point_id: global_point_id)

  collection_points = get_collection_points(postcode: global_point.postcode)
  collection_point = collection_points.select { |col| col.point_id == global_point.point_id }.first

  if collection_point.blank?
    raise Deliveries::APIError.new(
      "Collection Point not found - #{global_point.point_id}",
      1
    )
  end

  collection_point
end
get_collection_points(postcode:, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 46
def get_collection_points(postcode:, **)
  raise Deliveries::APIError, 'Postcode cannot be null' if postcode.blank?

  collection_points = []

  points = CollectionPoints::Search.new(postcode: postcode).execute
  points.each do |point|
    collection_point_params = CollectionPoints::Search::FormatResponse.new(response: point).execute
    collection_points << Deliveries::CollectionPoint.new(**collection_point_params)
  end

  collection_points
end
get_label(tracking_code:, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 95
def get_label(tracking_code:, **)
  pdf = Labels::Generate.new(
    tracking_codes: tracking_code
  ).execute.first

  Deliveries::Label.new(raw: pdf)
end
get_labels(tracking_codes:, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 103
def get_labels(tracking_codes:, **)
  labels = Deliveries::Labels.new

  Labels::Generate.new(
    tracking_codes: tracking_codes
  ).execute.each do |pdf|
    labels << pdf
  end

  labels
end
pickup_info(tracking_code:, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 85
def pickup_info(tracking_code:, **)
  response = Pickups::Trace.new(
    tracking_code: tracking_code
  ).execute

  tracking_info_params = Pickups::Trace::FormatResponse.new(response: response).execute

  Deliveries::TrackingInfo.new(**tracking_info_params)
end
shipment_info(tracking_code:, **) click to toggle source
# File lib/deliveries/couriers/correos_express.rb, line 76
def shipment_info(tracking_code:, **)
  response = Shipments::Trace.new(
    tracking_code: tracking_code
  ).execute

  tracking_info_params = Shipments::Trace::FormatResponse.new(response: response).execute
  Deliveries::TrackingInfo.new(**tracking_info_params)
end