Class: FedExFreightCaSchedulePickupWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/workers/fed_ex_freight_ca_schedule_pickup_worker.rb

Overview

Sidekiq worker: fed ex freight ca schedule pickup.

Instance Method Summary collapse

Instance Method Details

#performObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/workers/fed_ex_freight_ca_schedule_pickup_worker.rb', line 7

def perform
  # find if there any qualifying FedEx Freight CA shipments and ensure there is not already a pickup scheduled for today
  store = Store.find(2)
  carrier = 'FedExFreight'
   = "fedex_freight_ca_#{SHIPPING_BASE_CONFIGURATION[:fedex_ca_account]}"
  pickup_date_time = Shipment.choose_carrier_pickup_date_time(carrier, store)
  return if store.carrier_pickup_for_datetime(, pickup_date_time).present?

  shipments = Shipment.carrier_candidates_for_pickup(carrier)
  deliveries = Delivery.where(id: shipments.pluck(Arel.sql('distinct shipments.delivery_id'))).by_store_id(store.id)
  return unless deliveries.any?

  result = WyShipping.schedule_pickup(carrier, store.country.iso3.to_sym, deliveries, pickup_date_time)
  logger.info "#{self.class}: deliveries: #{deliveries.map { |d| d.order.reference_number }.join(', ')}, pickup_date_time: #{pickup_date_time}"
  logger.info "#{self.class}: result[:request_response]: #{result[:request_response]}"
  if result[:status_code] == :ok
    logger.info "#{self.class}: pickup schedule result: #{result[:status_message]}"
    store.set_carrier_pickup(carrier, , result[:request_response], result[:confirmation_number], result[:schedule_start_datetime], result[:scheduled_end_datetime])
  else
    logger.info "#{self.class}: pickup could not be scheduled: #{result[:status_message]}, sending e-mail to #{store.email}"
    Mailer.schedule_pickup_failed_email(store.email, carrier, deliveries, result[:status_message]).deliver
  end
end