Class: GetFreightquoteLoadNumber
- Inherits:
-
Object
- Object
- GetFreightquoteLoadNumber
- Includes:
- Sidekiq::Job, Workers::StatusBroadcastable
- Defined in:
- app/workers/get_freightquote_load_number.rb
Overview
Namespace for GetFreightquoteLoadNumber workers.
Instance Attribute Summary
Attributes included from Workers::StatusBroadcastable
Instance Method Summary collapse
Methods included from Workers::StatusBroadcastable::Overrides
Instance Method Details
#perform(options = {}) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/workers/get_freightquote_load_number.rb', line 10 def perform( = {}) # { delivery_id: @delivery.id, # current_user_id: @context_user.id }.deep_stringify_keys = .deep_symbolize_keys delivery = Delivery.find([:delivery_id]) load_number = nil pro_number = nil e_bol_enabled = nil # poll on the CHR/Freightquote events API 20.times do |_i| load_result = WyShipping.check_freightquote_events_for_load_number(delivery) load_number = load_result.dig(:load_number) # get load_number from load_result e_bol_enabled = load_result.dig(:e_bol_enabled).to_b # get e_bol_enabled flag from result, if true, we wait for pro_number, otherwise they will not provide it until the driver arrives with it pro_number = load_result.dig(:pro_number) if e_bol_enabled # get pro_number from load_result in case it's there already if load_number.present? break unless e_bol_enabled == true && pro_number.blank? # still waiting for PRO number, so poll on the CHR/Freightquote events API 20.times do |_i| pro_result = WyShipping.check_freightquote_events_for_pro_number(delivery) pro_number = pro_result.dig(:pro_number) # get pro_number from pro_result break if pro_number.present? # with e_bol_enabled true, we need load_number and pro_number sleep(3) end # with e_bol_enabled false, all we need is load_number so break out of the loop else sleep(3) end end if load_number.present? # we need this at minimum, if e_bol_enabled and we still have no pro_number, then let the LTL driver give it to warehouse at pickup time as the fallback, otherwise set it # Direct update bypasses Delivery's state machine, so the before_transition # callback that normally writes ship_labeled_at on entry to # pending_ship_confirm doesn't fire — set it inline here so the warehouse # mass ship-confirm carrier-pickup-time gate sees a real timestamp. delivery.update( freight_load_number: load_number, state: 'pending_ship_confirm', ship_labeled_at: delivery.ship_labeled_at || Time.current ) delivery.update(ltl_pro_number: pro_number) if pro_number.present? store redirect_to: "/deliveries/#{delivery.id}/complete_asynch_print_bol" else # this means we have run out of time with no load number, we must have that to proceed = "Timed out trying to get Freightquote carrier load number confirmation!" store redirect_to: "/deliveries/#{delivery.id}", error_message: end end |