Class: DataImportsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- DataImportsController
- Defined in:
- app/controllers/data_imports_controller.rb
Overview
Controller: data imports.
Constant Summary
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
-
#create ⇒ void
Creates a data import, optionally cloning an existing one, and queues its prep worker.
-
#delete_rows ⇒ void
Deletes one import row and renumbers the remaining row indexes.
-
#destroy ⇒ void
Deletes the data import when it has no imported rows.
-
#finish_import ⇒ void
Saves final import options and processes the queued rows.
-
#import ⇒ void
Renders the import review screen for queued rows.
-
#index ⇒ void
Lists data imports, newest first.
-
#new ⇒ void
Renders the new data import form.
-
#open_search ⇒ void
Redirects to a customer search scoped to this data import.
-
#reset_queued ⇒ void
Resets all queued rows back to
not_imported. -
#show ⇒ void
Shows one data import with its rows.
-
#update ⇒ void
Saves column mappings, then queues rows for import or deletes the selected rows.
-
#update_cell ⇒ void
Placeholder endpoint for inline cell updates.
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
#create ⇒ void
This method returns an undefined value.
Creates a data import, optionally cloning an existing one, and queues its prep worker.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/controllers/data_imports_controller.rb', line 34 def create (:create, DataImport) if params[:data_import] && (original_di = params[:data_import][:reuse_data_import_id].presence) source = DataImport.find_by(id: original_di) unless source flash[:error] = 'Source data import not found.' return redirect_to new_data_import_path end @data_import = source.deep_dup @data_import.attributes = params[:data_import] else @data_import = DataImport.new(params[:data_import]) end if @data_import.save job_id = DataImportPrepWorker.perform_async('data_import_id' => @data_import.id) redirect_to_job_or_fallback(job_id, data_import_path(@data_import)) else render :new, status: :unprocessable_content end end |
#delete_rows ⇒ void
This method returns an undefined value.
Deletes one import row and renumbers the remaining row indexes.
143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'app/controllers/data_imports_controller.rb', line 143 def delete_rows @data_import = DataImport.find(params[:id]) data_import_row = @data_import.data_import_rows.where(id: params[:data_import_row_id]).first row_index = data_import_row.row_index if data_import_row data_import_row.destroy DataImportRow.update_all('row_index = row_index - 1', "data_import_id = #{@data_import.id} and row_index > #{row_index}") flash[:info] = "Row #{data_import_row.id} deleted and gap filled." else flash[:error] = 'Row index not specified or invalid.' end redirect_to data_import_path(@data_import) end |
#destroy ⇒ void
This method returns an undefined value.
Deletes the data import when it has no imported rows.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/controllers/data_imports_controller.rb', line 87 def destroy (:destroy, DataImport) @data_import = DataImport.find(params[:id]) if @data_import if @data_import.can_delete? @data_import.delete flash[:info] = 'Data import was deleted' redirect_to data_imports_path else flash[:error] = 'Data import cannot be deleted, imported rows present' redirect_to data_import_path(@data_import) end else redirect_to data_imports_path end end |
#finish_import ⇒ void
This method returns an undefined value.
Saves final import options and processes the queued rows.
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'app/controllers/data_imports_controller.rb', line 127 def finish_import @data_import = DataImport.find(params[:id]) if @data_import.update(params[:data_import]) res = @data_import.process_import flash[:info] = "#{res[:requested]} Requested, #{res[:queued]} Queued, #{res[:processed]} Processed." redirect_to data_import_path(@data_import) else flash.now[:error] = @data_import.errors..to_sentence.presence || 'Unable to finish import.' load_queued_rows_and_columns render action: :import, status: :unprocessable_content end end |
#import ⇒ void
This method returns an undefined value.
Renders the import review screen for queued rows.
107 108 109 110 111 112 |
# File 'app/controllers/data_imports_controller.rb', line 107 def import (:update, DataImport) @data_import = DataImport.find(params[:id]) @data_import.default_country_iso3 ||= 'USA' load_queued_rows_and_columns end |
#index ⇒ void
This method returns an undefined value.
Lists data imports, newest first.
7 8 9 10 11 12 |
# File 'app/controllers/data_imports_controller.rb', line 7 def index (:read, DataImport) @q = DataImport.ransack(params[:q]) @q.sorts = 'created_at desc' if @q.sorts.blank? @pagy, @data_imports = pagy(@q.result, limit: 10) end |
#new ⇒ void
This method returns an undefined value.
Renders the new data import form.
26 27 28 29 |
# File 'app/controllers/data_imports_controller.rb', line 26 def new (:create, DataImport) @data_import = DataImport.new end |
#open_search ⇒ void
This method returns an undefined value.
Redirects to a customer search scoped to this data import.
160 161 162 163 164 |
# File 'app/controllers/data_imports_controller.rb', line 160 def open_search @data_import = DataImport.find(params[:id]) qt = CustomerSearch.instantiate_query_template(nil, { title: 'link', auto_count: false, aggregate_method: :none, query_params: { data_import_id_in: [@data_import.id] } }) redirect_to execute_search_path(qt.to_params) end |
#reset_queued ⇒ void
This method returns an undefined value.
Resets all queued rows back to not_imported.
117 118 119 120 121 122 |
# File 'app/controllers/data_imports_controller.rb', line 117 def reset_queued (:update, DataImport) @data_import = DataImport.find(params[:id]) @data_import.data_import_rows.queued.update_all(import_state: 'not_imported') redirect_to data_import_path(@data_import, notice: 'Queued records reset') end |
#show ⇒ void
This method returns an undefined value.
Shows one data import with its rows.
17 18 19 20 21 |
# File 'app/controllers/data_imports_controller.rb', line 17 def show (:read, DataImport) @data_import = DataImport.find(params[:id]) load_rows end |
#update ⇒ void
This method returns an undefined value.
Saves column mappings, then queues rows for import or deletes the selected rows.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'app/controllers/data_imports_controller.rb', line 64 def update (:update, DataImport) @data_import = DataImport.find(params[:id]) update_mapping @data_import_rows = @data_import.data_import_rows if /Import/i.match?(params['commit']) queue_for_import redirect_to_import_screen && return elsif /Delete Selected/i.match?(params['commit']) delete_selected end # Redirect (PRG) instead of render :show — a 200 render on this PATCH is # dropped by Turbo Drive. 303 (not the default 302) so the follow-up to # data_import_path is a GET (#show); per the Fetch spec a 302 keeps the PATCH # method, which would re-hit #update on the same URL. redirect_to data_import_path(@data_import), status: :see_other end |
#update_cell ⇒ void
This method returns an undefined value.
Placeholder endpoint for inline cell updates.
59 |
# File 'app/controllers/data_imports_controller.rb', line 59 def update_cell; end |