Class: PickItemsController

Inherits:
CrmController show all
Defined in:
app/controllers/pick_items_controller.rb

Overview

Controller: pick items.

Constant Summary collapse

BACKGROUND_SAVE_THRESHOLD =

Threshold for using background worker (number of line items being submitted)

30

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

Instance Method Summary collapse

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, #touch_employee_last_seen

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?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #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, #registration_lead_type, #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 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?

Instance Method Details

#catalog_itemsvoid

This method returns an undefined value.

Loads catalog items for the picker's catalog panel.



50
51
52
53
54
55
56
57
58
59
# File 'app/controllers/pick_items_controller.rb', line 50

def catalog_items
  @itemizable = begin
    params[:itemizable_type].constantize.find(params[:itemizable_id])
  rescue StandardError
    nil
  end
  return if @itemizable.nil?

  load_catalog(@itemizable.determine_catalog_for_picking, params.merge(skus: @itemizable.determine_skus_to_filter))
end

#indexvoid

This method returns an undefined value.

Renders the item picker for the itemizable, unless it is locked for picking.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/controllers/pick_items_controller.rb', line 10

def index
  if @itemizable.try(:editing_locked?) || (@itemizable.is_a?(RoomConfiguration) && @itemizable.orders.any?(&:editing_locked?))
    flash[:error] = "#{@itemizable.class.name} is locked for picking"
    redirect_to_return_path_or_default polymorphic_url(@itemizable)
  else
    load_catalog(@itemizable.determine_catalog_for_picking, { product_line_id: @pl_id, skus: @itemizable.determine_skus_to_filter }) if @pl_id
    @version_timestamp = @itemizable.line_items.version
  end
  # This is too heavy, specially on large large quotes it will time out.
  # @material_alerts = @itemizable.get_material_alerts
  @picking_guidelines = if @itemizable.respond_to?(:opportunity) && @itemizable&.opportunity&.quote_underlayment_by_room
                          'Please quote underlayment or membrane per room'
                        else
                          'Please quote total underlayment or membrane as ungrouped items per quote'
                        end
end

#quick_revise_all_roomsvoid

This method returns an undefined value.

Enqueues a quick revision of all rooms on the itemizable.



80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/controllers/pick_items_controller.rb', line 80

def quick_revise_all_rooms
  job_options = {
    itemizable_type: @itemizable.class.name,
    itemizable_id: @itemizable.id,
    keep_plan: params[:keep_plan].to_b,
    redirect_to: pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id)
  }.stringify_keys

  jid = RoomQuickRevisionWorker.perform_async(job_options)
  fallback = pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id)
  redirect_to_job_or_fallback(jid, fallback)
end

#quick_revise_roomvoid

This method returns an undefined value.

Enqueues a quick revision of a single room's picked items.



64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/controllers/pick_items_controller.rb', line 64

def quick_revise_room
  job_options = {
    itemizable_type: @itemizable.class.name,
    itemizable_id: @itemizable.id,
    keep_plan: params[:keep_plan].to_b,
    room_configuration_ids: [params[:group_id]].compact.presence,
    redirect_to: pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id)
  }.stringify_keys
  jid = RoomQuickRevisionWorker.perform_async(job_options)
  fallback = pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id)
  redirect_to_job_or_fallback(jid, fallback)
end

#savevoid

This method returns an undefined value.

Saves the picked line items on the itemizable, in the background for large submissions.



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'app/controllers/pick_items_controller.rb', line 33

def save
  @version_timestamp = params[:version_timestamp]
  if params[:itemizable].present?
    if should_use_background_save?
      save_in_background
    else
      save_synchronously
    end
  else
    flash[:info] = 'No changes detected'
    redirect_to_return_path_or_default polymorphic_url(@itemizable)
  end
end