Class: DataImportsController

Inherits:
CrmController show all
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

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

#createvoid

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
  authorize!(: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_rowsvoid

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

#destroyvoid

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
  authorize!(: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_importvoid

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.full_messages.to_sentence.presence || 'Unable to finish import.'
    load_queued_rows_and_columns
    render action: :import, status: :unprocessable_content
  end
end

#importvoid

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
  authorize!(:update, DataImport)
  @data_import = DataImport.find(params[:id])
  @data_import.default_country_iso3 ||= 'USA'
  load_queued_rows_and_columns
end

#indexvoid

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
  authorize!(: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

#newvoid

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
  authorize!(:create, DataImport)
  @data_import = DataImport.new
end

#open_searchvoid

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_queuedvoid

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
  authorize!(: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

#showvoid

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
  authorize!(:read, DataImport)
  @data_import = DataImport.find(params[:id])
  load_rows
end

#updatevoid

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
  authorize!(: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_cellvoid

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