Class: PickItemsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- PickItemsController
- 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
-
#catalog_items ⇒ void
Loads catalog items for the picker's catalog panel.
-
#index ⇒ void
Renders the item picker for the itemizable, unless it is locked for picking.
-
#quick_revise_all_rooms ⇒ void
Enqueues a quick revision of all rooms on the itemizable.
-
#quick_revise_room ⇒ void
Enqueues a quick revision of a single room's picked items.
-
#save ⇒ void
Saves the picked line items on the itemizable, in the background for large submissions.
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
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
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_items ⇒ void
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 |
#index ⇒ void
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_rooms ⇒ void
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 = { 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() fallback = pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id) redirect_to_job_or_fallback(jid, fallback) end |
#quick_revise_room ⇒ void
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 = { 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() fallback = pick_items_path(@itemizable.class.name.foreign_key => @itemizable.id) redirect_to_job_or_fallback(jid, fallback) end |
#save ⇒ void
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 |