Class: Crm::WarehousesController

Inherits:
CrmController show all
Includes:
Controllers::WarehouseStreamActions
Defined in:
app/controllers/crm/warehouses_controller.rb

Overview

Controller: warehouses.

Constant Summary

Constants included from Controllers::WarehouseStreamActions

Controllers::WarehouseStreamActions::WAREHOUSE_TAB_CONTENT_FRAME

Constants included from Controllers::ReferenceFindable

Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS

Constants included from Controllers::AnalyticsEvents

Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY

Constants included from Controllers::ErrorRendering

Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES

Constants included from Www::SeoHelper

Www::SeoHelper::AWARDS, Www::SeoHelper::CA_ADDRESS, Www::SeoHelper::CA_BUSINESS_HOURS, Www::SeoHelper::CA_CONTACT_POINT, Www::SeoHelper::CA_CURRENCIES, Www::SeoHelper::CA_DESCRIPTION, Www::SeoHelper::CA_FOUNDING_DATE, Www::SeoHelper::CA_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::CA_LEGAL_NAME, Www::SeoHelper::CA_LOCAL_BUSINESS, Www::SeoHelper::CA_ONLINE_STORE, Www::SeoHelper::CA_RETURN_POLICY, Www::SeoHelper::CA_SALES_DEPARTMENT, Www::SeoHelper::CA_SERVICE_AREA, Www::SeoHelper::CA_URL, Www::SeoHelper::CA_VAT_ID, Www::SeoHelper::CA_WAREHOUSE_DEPARTMENT, Www::SeoHelper::CA_WAREHOUSE_HOURS, Www::SeoHelper::COMPANY_EMAIL, Www::SeoHelper::COMPANY_LOGO, Www::SeoHelper::COMPANY_NAME, Www::SeoHelper::COMPANY_SLOGAN, Www::SeoHelper::EXPERTISE, Www::SeoHelper::FAX_NUMBER, Www::SeoHelper::GS1_COMPANY_PREFIX, Www::SeoHelper::ISO6523_CODE, Www::SeoHelper::PAYMENT_METHODS, Www::SeoHelper::PHONE_NUMBER, Www::SeoHelper::PRIMARY_NAICS, Www::SeoHelper::REFUND_TYPE, Www::SeoHelper::RETURN_FEES, Www::SeoHelper::RETURN_METHOD, Www::SeoHelper::RETURN_POLICY_CATEGORY, Www::SeoHelper::SECONDARY_NAICS, Www::SeoHelper::SOCIAL_PROFILES, Www::SeoHelper::US_ADDRESS, Www::SeoHelper::US_BUSINESS_HOURS, Www::SeoHelper::US_CONTACT_POINT, Www::SeoHelper::US_CURRENCIES, Www::SeoHelper::US_DESCRIPTION, Www::SeoHelper::US_FOUNDING_DATE, Www::SeoHelper::US_GLOBAL_LOCATION_NUMBER, Www::SeoHelper::US_IMAGE, Www::SeoHelper::US_LEGAL_NAME, Www::SeoHelper::US_LOCAL_BUSINESS, Www::SeoHelper::US_ONLINE_STORE, Www::SeoHelper::US_RETURN_POLICY, Www::SeoHelper::US_SALES_DEPARTMENT, Www::SeoHelper::US_SERVICE_AREA, Www::SeoHelper::US_TAX_ID, Www::SeoHelper::US_URL, Www::SeoHelper::US_WAREHOUSE_DEPARTMENT, Www::SeoHelper::US_WAREHOUSE_HOURS

Constants included from IconHelper

IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY

Instance Method Summary collapse

Methods included from Controllers::WarehouseStreamActions

#redirect_to

Methods included from FileDownloadPresenter

#file_download_entry

Methods inherited from CrmController

#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie

Methods inherited from ApplicationController

#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #stamp_impersonation_context, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y

Methods included from Controllers::ReturnPathHandling

#check_for_return_path, #redirect_to_return_path_or_default

Methods included from Controllers::AnalyticsEvents

#consume_queued_analytics_events, #track_event

Methods included from Controllers::DeviceDetection

#device_detector, #is_ie?

Methods included from Controllers::SubdomainDetection

#is_crm_request?, #is_www_request?, #json_request?

Methods included from Controllers::TurboSafeRedirect

#redirect_to

Methods included from Controllers::TrackingDetection

#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?

Methods included from Controllers::AcceleratedFileSending

#send_file_accelerated, #send_upload_accelerated

Methods included from Controllers::ErrorRendering

#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback

Methods included from Controllers::TurnstileVerification

#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!

Methods included from Controllers::CloudflareCaching

edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session

Methods included from Controllers::Webpackable

#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?

Methods included from Controllers::Localizable

#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale

Methods included from Controllers::Authenticable

#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak

Methods included from ApplicationHelper

#better_number_to_currency, #check_force_logout, #check_or_cross, #check_or_times, #embedded_tab_frame_id, #error_messages, #general_disclaimer_on_product_installation_and_local_codes, #gridjs_from_html_table, #gridjs_table, #is_wy_ip, #line_break, #parent_layout, #pass_or_fail, #render_error_messages_list, #render_video_card, #resolved_auth_form_turbo_frame, #return_path_or, #safe_css_color, #set_return_path_if_present, #set_section_if_present, #tab_frame_id, #to_underscore, #track_page?, #turbo_section_wrapper, #turbo_tabs_request?, #url_on_same_domain_as_request, #widget_index_daily_focus_index_path, #working_hours?, #yes_or_no, #yes_or_no_highlighted, #yes_or_no_with_check_or_cross, #youtube_video

Methods included from UppyUploaderHelper

#file_uploader, #image_uploader, #large_file_uploader_s3, #lead_sketch_uploader, #rma_image_uploader, #rma_image_uploader_s3, #uppy_uploader, #video_uploader

Methods included from Www::ImagesHelper

#image_asset_tag, #image_asset_url

Methods included from Www::SeoHelper

#add_page_schema, #add_webpage_schema, #canada?, #company_social_links, #ensure_context_json, #json_ld_script_tag, #local_business_schema, #online_store_id, #online_store_schema, #page_main_entity, #page_main_entity_json, #render_auto_collection_page_schema, #render_collection_page_schema, #render_local_business_schema, #render_online_store_schema, #render_page_schemas, #render_page_video_schemas, #render_webpage_schema, #render_webpage_schema_with_collections, #usa?

Methods included from UrlsHelper

#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?

Methods included from IconHelper

#account_nav_icon, #fa_icon, #star_rating_html

Instance Method Details

#cancel_pickingObject



41
42
43
44
45
46
47
48
# File 'app/controllers/crm/warehouses_controller.rb', line 41

def cancel_picking
  @orders = Order.joins(:deliveries).where(deliveries: { id: params[:delivery_ids] })
  @orders.each do |order|
    order.quick_note("placed in CR Hold by warehouse, from state: #{order.state}")
    order.cr_hold!
  end
  redirect_back_or_to root_path
end

#mass_actionObject



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
# File 'app/controllers/crm/warehouses_controller.rb', line 13

def mass_action
  unless params[:delivery_ids].present? || params[:serial_number_ids].present?
    flash[:info] = 'You must select one or more deliveries'
    redirect_back_or_to root_path and return
  end
  set_store
  selected_action = params[:selected_action].presence&.parameterize
  case selected_action
  when 'print-pick-slip', 'reprint-pick-slip'
    print_pick_slip
  when 'print-pick-slip-split-kits', 'reprint-pick-slip-split-kits'
    print_pick_slip(true)
  when 'mass-ship-confirm'
    mass_ship_confirmed
  when 'cancel-picking', 'cr-hold'
    cancel_picking
  when 'picked'
    picked
  when 'print-serial-number-labels'
    print_serial_number_labels
  when 'release-now'
    release_now
  else
    flash[:error] = "Mass action #{params[:selected_action]} not recognized."
    redirect_back_or_to root_path
  end
end

#mass_ship_confirmObject

Mass ship confirm page - shows deliveries filtered by carrier for bulk ship confirmation



279
280
281
282
283
284
285
# File 'app/controllers/crm/warehouses_controller.rb', line 279

def mass_ship_confirm
  set_store
  carrier = params[:mass_ship_confirm_for_carrier]
  render_deliveries :pending_ship_confirm,
                    deliveries: @store.query_mass_ship_confirm_delivery_candidates(carrier),
                    mass_ship_confirm_for_carrier: carrier
end

#mass_ship_confirmedObject

Executes mass ship confirm from the warehouse dashboard.
Runs synchronously so warehouse staff see immediate results instead of
waiting for background jobs with no feedback.

Uses the state machine's shipped! directly — its guards (LTL/PRO,
empty delivery) are the single source of truth. The old path through
individual_auto_ship_confirm added an extra shipments.completed.empty?
check that silently skipped deliveries whose shipments were in
label_complete state, even though the state machine would allow them.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/controllers/crm/warehouses_controller.rb', line 59

def mass_ship_confirmed
  @deliveries = Delivery.where(id: params[:delivery_ids])
  confirmed = []
  skipped = []
  failed = []
  @deliveries.find_each do |delivery|
    if delivery.can_shipped?
      delivery.shipped!
      confirmed << delivery.id
    else
      skipped << delivery.id
    end
  rescue StandardError => e
    failed << delivery.id
    Rails.logger.error "Mass ship confirm failed for delivery #{delivery.id}: #{e.message}"
  end

  messages = []
  messages << "Ship confirmed #{confirmed.size} #{'delivery'.pluralize(confirmed.size)}." if confirmed.present?
  messages << "#{skipped.size} #{'delivery'.pluralize(skipped.size)} could not be confirmed (not ready or invalid state)." if skipped.present?
  messages << "#{failed.size} #{'delivery'.pluralize(failed.size)} failed with errors." if failed.present?

  if confirmed.present?
    flash[:success] = messages.shift
    flash[:warning] = messages.join(' ') if messages.any?
  elsif messages.any?
    flash[:error] = messages.join(' ')
  else
    flash[:warning] = 'No deliveries selected for ship confirm.'
  end

  redirect_to_return_path_or_default warehouse_path(@store, tab: 'pending_ship_confirm')
end

#pickedObject



93
94
95
96
97
# File 'app/controllers/crm/warehouses_controller.rb', line 93

def picked
  @deliveries = Delivery.where(id: params[:delivery_ids])
  @deliveries.each(&:picked)
  redirect_back_or_to root_path
end


167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'app/controllers/crm/warehouses_controller.rb', line 167

def print_pick_slip(split_kits = nil)
  set_store

  if (print_profile = shipping_document_print_profile)
    # Stream them
    deliveries = Delivery.where(id: params[:delivery_ids])
    print_item_labels = false
    deliveries.each do |delivery|
      # If split kits is not specified, then we determine based on the presence
      # of serial numbers in the kit components
      options = {
        delivery_ids: [delivery.id],
        store_id: @store.id,
        print_profile_id: print_profile&.id,
        current_user_id: @context_user.id,
        split_kits:
      }.stringify_keys
      GeneratePickSlipWorker.perform_async(options)
      delivery.picking! if delivery.at_warehouse?
      print_item_labels = true if !print_item_labels && delivery.should_print_heating_element_labels?
    end
    flash[:info] = "#{view_context.pluralize(deliveries.size, 'slip')} sent to print profile #{print_profile.name}"
    if print_item_labels
      redirect_to generate_barcodes_path(delivery_ids: params[:delivery_ids], heating_elements_only: true, return_path: @return_path || warehouse_path(@store))
    else
      redirect_to_return_path_or_default warehouse_path(@store)
    end
  else
    options = {
      delivery_ids: params[:delivery_ids],
      store_id: @store.id,
      print_profile_id: print_profile&.id,
      current_user_id: @context_user.id,
      split_kits:
    }.stringify_keys

    job_id = GeneratePickSlipWorker.perform_async(options)
    redirect_to job_path(job_id)
  end
end


214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'app/controllers/crm/warehouses_controller.rb', line 214

def print_serial_number_labels
  @serial_numbers = SerialNumber.where(id: params[:serial_number_ids])
  if @serial_numbers.present?
    # get all of the serial number labels and join them together, serial number also get marked as PRINTED here
    pdf = SerialNumber.generate_super_label_pdf(@serial_numbers)
    if pdf
      session[:download_path] = upload_url(pdf)
      session[:download_disposition] = :inline
      flash[:info] = "Super label generated. If the file doesn't open automatically please click <a href='#{session[:download_path]}' target='_blank' rel='noopener'>here</a>"
    else
      flash[:error] = 'No labels could be generated.'
    end
  else
    flash[:error] = 'No labels selected'
  end
  redirect_back_or_to root_path
end

#release_nowObject



99
100
101
102
103
104
105
106
# File 'app/controllers/crm/warehouses_controller.rb', line 99

def release_now
  @deliveries = Delivery.where(id: params[:delivery_ids])
  @deliveries.each do |d|
    d.override_future_release_date = true
    d.release!
  end
  redirect_back_or_to root_path
end

#serial_numbersObject



208
209
210
211
212
# File 'app/controllers/crm/warehouses_controller.rb', line 208

def serial_numbers
  set_store
  @serial_numbers_pending_print = @store.query_serial_numbers_pending_print
  puts "serial_number_labels!!!: @store: #{@store}"
end

#showObject



8
9
10
11
# File 'app/controllers/crm/warehouses_controller.rb', line 8

def show
  set_store
  @return_path = warehouse_path(@store.id)
end

#speedee_delivery_closeObject



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'app/controllers/crm/warehouses_controller.rb', line 144

def speedee_delivery_close
  Delivery.transaction do
    remaining_speedee_deliveries = Delivery.with_shipment_carrier('SpeedeeDelivery').where(state: %w[at_warehouse pending_ship_labels]).size
    set_store
    if remaining_speedee_deliveries.zero?
      result = Shipping::SpeedeeManifestGenerator.new.process(@store)
      # puts result
      if result.success
        # everything ok, print the manifest summary PDF
        # send the file to the browser
        session[:download_path] = upload_url(result.summary_pdf_upload)
        session[:download_disposition] = :inline
        flash[:info] = "Speedee Manifest generated, if the summary PDF does not open automatically please click <a href='#{session[:download_path]}' target='_blank' rel='noopener'>here</a>."
      else
        flash[:error] = "Could not generate end of day manifest. #{result.message}"
      end
    else
      flash[:error] = "Could not generate end of day manifest. #{remaining_speedee_deliveries} Speedee deliveries remain to be processed. Either HOLD them or ship label them to proceed."
    end
    redirect_back_or_to root_path
  end
end

#speedee_delivery_summary_pdfObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'app/controllers/crm/warehouses_controller.rb', line 108

def speedee_delivery_summary_pdf
  set_store
  # puts result
  sm = SpeedeeManifest.last
  if (sm.transmitted_at.to_date == Time.current.to_date) && sm.uploads.summary_pdfs.last.present? # check we have a recent manifest generated today
    # everything ok, print the manifest summary PDF
    # send the file to the browser
    session[:download_path] = upload_url(sm.uploads.summary_pdfs.last)
    session[:download_disposition] = :inline
    flash[:info] = "Most recent Speedee driver summary PDF for today found, if the summary PDF does not open automatically please click <a href='#{session[:download_path]}' target='_blank' rel='noopener'>here</a>."
  else
    flash[:error] = "Could not find today's Speedee driver summary PDF"
  end
  redirect_back_or_to root_path
end

#speedee_summaryObject



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'app/controllers/crm/warehouses_controller.rb', line 124

def speedee_summary
  set_store
  speedee_manifest ||= SpeedeeManifest.last
  respond_to do |format|
    format.html do
      render layout: 'layouts/pdf/speedee_summary', locals: {
        store: @store,
        speedee_manifest:
      }
    end
    format.pdf do
      summary_result = Pdf::Document::SpeedeeSummary.call(@store, speedee_manifest)
      send_data summary_result.pdf,
                filename: summary_result.pdf_file_name,
                type: 'application/pdf',
                disposition: 'inline'
    end
  end
end

#tab_amazon_itemsObject



323
324
325
326
327
# File 'app/controllers/crm/warehouses_controller.rb', line 323

def tab_amazon_items
  set_store
  @orders = @store.query_warehouse_amazon_orders
  render 'tab_amazon_items', layout: should_render_layout?
end

#tab_at_warehouseObject



238
239
240
241
# File 'app/controllers/crm/warehouses_controller.rb', line 238

def tab_at_warehouse
  set_store
  render_deliveries :at_warehouse
end

#tab_awaiting_carrier_assignment_ordersObject



309
310
311
312
313
314
# File 'app/controllers/crm/warehouses_controller.rb', line 309

def tab_awaiting_carrier_assignment_orders
  set_store
  @orders = @store.query_awaiting_carrier_assignment_orders
  @tab_frame_id = 'awaiting_carrier_assignment_orders'
  render 'tab_orders', layout: should_render_layout?
end

#tab_back_ordersObject



316
317
318
319
320
321
# File 'app/controllers/crm/warehouses_controller.rb', line 316

def tab_back_orders
  set_store
  @orders = @store.query_warehouse_back_orders
  @tab_frame_id = 'back_orders'
  render 'tab_orders', layout: should_render_layout?
end

#tab_backordered_itemsObject



344
345
346
347
348
# File 'app/controllers/crm/warehouses_controller.rb', line 344

def tab_backordered_items
  set_store
  @store_items = Query::StoreItemQuery.new.out_of_stock_items_on_backorders(@store.id)
  render 'tab_backordered_items', layout: should_render_layout?
end

#tab_future_releaseObject



287
288
289
290
291
# File 'app/controllers/crm/warehouses_controller.rb', line 287

def tab_future_release
  set_store
  deliveries = @store.query_warehouse_deliveries(state: :future_release).order(:future_release_date, :created_at)
  render_deliveries :future_release, deliveries:
end

#tab_held_ordersObject



302
303
304
305
306
307
# File 'app/controllers/crm/warehouses_controller.rb', line 302

def tab_held_orders
  set_store
  @orders = @store.query_warehouse_held_orders
  @tab_frame_id = 'held_orders'
  render 'tab_orders', layout: should_render_layout?
end

#tab_items_need_packaging_reviewObject



357
358
359
360
361
# File 'app/controllers/crm/warehouses_controller.rb', line 357

def tab_items_need_packaging_review
  set_store
  @items = Item.active.where('review_product_weight_flag IS true OR review_product_packaging_flag IS true')
  render 'tab_items_need_packaging_review', layout: should_render_layout?
end

#tab_items_need_restockObject



363
364
365
366
367
# File 'app/controllers/crm/warehouses_controller.rb', line 363

def tab_items_need_restock
  set_store
  @store_items = Query::StoreItemQuery.new.restock_items(@store.id)
  render 'tab_items_need_restock', layout: should_render_layout?
end

#tab_orders_need_attentionObject



350
351
352
353
354
355
# File 'app/controllers/crm/warehouses_controller.rb', line 350

def tab_orders_need_attention
  set_store
  @orders = @store.query_warehouse_orders_need_attention
  @tab_frame_id = 'orders_need_attention'
  render 'tab_orders', layout: should_render_layout?
end

#tab_pending_carrier_confirmObject



268
269
270
271
# File 'app/controllers/crm/warehouses_controller.rb', line 268

def tab_pending_carrier_confirm
  set_store
  render_deliveries :pending_carrier_confirm
end

#tab_pending_manifest_completionObject



263
264
265
266
# File 'app/controllers/crm/warehouses_controller.rb', line 263

def tab_pending_manifest_completion
  set_store
  render_deliveries :pending_manifest_completion
end

#tab_pending_pickup_confirmObject



258
259
260
261
# File 'app/controllers/crm/warehouses_controller.rb', line 258

def tab_pending_pickup_confirm
  set_store
  render_deliveries :pending_pickup_confirm
end

#tab_pending_ship_confirmObject



273
274
275
276
# File 'app/controllers/crm/warehouses_controller.rb', line 273

def tab_pending_ship_confirm
  set_store
  render_deliveries :pending_ship_confirm
end

#tab_pending_ship_label_reviewObject



253
254
255
256
# File 'app/controllers/crm/warehouses_controller.rb', line 253

def tab_pending_ship_label_review
  set_store
  render_deliveries :pending_ship_label_review
end

#tab_pending_ship_labelsObject



248
249
250
251
# File 'app/controllers/crm/warehouses_controller.rb', line 248

def tab_pending_ship_labels
  set_store
  render_deliveries :pending_ship_labels
end

#tab_pickingObject



243
244
245
246
# File 'app/controllers/crm/warehouses_controller.rb', line 243

def tab_picking
  set_store
  render_deliveries :picking
end

#tab_pre_packObject



232
233
234
235
236
# File 'app/controllers/crm/warehouses_controller.rb', line 232

def tab_pre_pack
  set_store
  deliveries = @store.query_warehouse_deliveries(state: :pre_pack).order(:order_id, :quote_id, :future_release_date, :created_at)
  render_deliveries :pre_pack, deliveries:
end

#tab_rmas_pending_to_receive_todayObject



335
336
337
338
339
340
341
342
# File 'app/controllers/crm/warehouses_controller.rb', line 335

def tab_rmas_pending_to_receive_today
  set_store
  @rmas = Rma.joins(:return_shipments)
             .where(shipments: { estimated_delivery_date: Time.zone.today })
             .where(shipments: { tracking_state: %w[in_transit delivered exception delivery_attempt delivered_to_collection_location] })
             .where(company_id: @store.id).select('rmas.*,shipments.estimated_delivery_date,shipments.tracking_state').uniq
  render 'tab_rmas_pending_to_receive_today', layout: should_render_layout?
end

#tab_serial_numbersObject



329
330
331
332
333
# File 'app/controllers/crm/warehouses_controller.rb', line 329

def tab_serial_numbers
  set_store
  @serial_numbers_pending_print = @store.query_serial_numbers_pending_print
  render 'tab_serial_numbers', layout: should_render_layout?
end

#tab_shipped_invoicedObject



293
294
295
296
297
298
299
300
# File 'app/controllers/crm/warehouses_controller.rb', line 293

def tab_shipped_invoiced
  set_store
  @state = :shipped_invoiced
  @deliveries = @store.query_recently_shipped.order(:created_at)
  preload_delivery_tracking_events!
  @mass_actions = []
  render 'tab_deliveries', layout: should_render_layout?
end