Class: FedExExpressCaSchedulePickupWorker

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

Instance Method Summary collapse

Instance Method Details

#performObject



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

def perform
  # find if there any qualifying FedEx Freight US shipments and ensure there is not already a pickup scheduled for today
  store = Store.find(2) # TBD CHANGE BACK TO 2 AFTER TESTING!!!!
  carrier = 'FedEx'
   = "fedex_express_ca_#{SHIPPING_BASE_CONFIGURATION[:fedex_ca_account]}"
  pickup_date_time = Shipment.choose_carrier_pickup_date_time(carrier, store)
  if store.carrier_pickup_for_datetime(, pickup_date_time).blank?
    # Here we deal with ^&%&^ FedEx ground and express actually being different pickup entities/companies but the same carrier
    shipments = Shipment.carrier_candidates_for_pickup(carrier).fedex_express
    deliveries = Delivery.where(id: shipments.pluck(Arel.sql('distinct shipments.delivery_id'))).by_store_id(store.id)
    if deliveries.any?
      pickup_date_time = Shipment.choose_carrier_pickup_date_time(carrier, store)
      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_saia_carrier_pickup(carrier_account_id, pickup_date_time, Time.zone.parse('5:00pm'), result[:pickup_number],
        #                               result[:request_response])
        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
  end
end