Class: StoresController

Inherits:
CrmController show all
Includes:
Controllers::Destroyable, Controllers::Showable
Defined in:
app/controllers/stores_controller.rb

Overview

Controller: stores.

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 included from Controllers::Showable

#perform_show, #show

Methods included from Controllers::Destroyable

#destroy, #perform_destroy

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

#all_addressesvoid

This method returns an undefined value.

Returns each store's warehouse address as JSON, optionally scoped to a company.



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'app/controllers/stores_controller.rb', line 99

def all_addresses
  company_id = params[:company_id].presence
  results = Store.includes(:warehouse_address).order('stores.id ASC')
  results = results.where(company_id: company_id) if company_id
  json_results = results.map do |s|
    {
      id: s.warehouse_address.id,
      recipient: s.warehouse_address.to_s,
      company_id: s.company_id
    }
  end
  render json: json_results
end

#createvoid

This method returns an undefined value.

Creates a store from submitted params.



32
33
34
35
36
37
38
39
# File 'app/controllers/stores_controller.rb', line 32

def create
  @store = Store.new(params[:store])
  if @store.save
    redirect_to_return_path_or_default store_path(@store)
  else
    render :new, status: :unprocessable_content
  end
end

#editvoid

This method returns an undefined value.

Loads a store for editing.



25
26
27
# File 'app/controllers/stores_controller.rb', line 25

def edit
  @store = Store.find(params[:id])
end

#indexvoid

This method returns an undefined value.

Lists stores alphabetically.



11
12
13
# File 'app/controllers/stores_controller.rb', line 11

def index
  @stores = Store.order(:name)
end

#inventoryvoid

This method returns an undefined value.

Lists on-hand inventory and a raw Amazon-vs-WarmlyYours stock comparison
for AVAILABLE store items.



57
58
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
# File 'app/controllers/stores_controller.rb', line 57

def inventory
  @q = ViewStock.ransack(params[:q])
  @pagy, @items = pagy(@q.result, limit: 100)

  sql = <<-SQL.squish
    with amz_items as (
        select distinct i.id as item_id
        from items i
        inner join store_items si on i.id = si.item_id
        where store_id in (3,5)
        and si.location = 'AVAILABLE'

    ), data_result as (
        select sku,
        sum(case when store_id = 3 then qty_on_hand else 0 end) as amazon_us,
        sum(case when store_id = 5 then qty_on_hand else 0 end) as amazon_ca,
        sum(case when store_id = 1 then qty_on_hand else 0 end) as wy_us,
        sum(case when store_id = 2 then qty_on_hand else 0 end) as wy_ca
        from items i
        inner join store_items si on i.id = si.item_id
        inner join amz_items ai on ai.item_id = i.id
        where si.location = 'AVAILABLE'
        group by sku
    )
    select * from data_result order by sku;
  SQL

  @amazon_inventory = ActiveRecord::Base.lease_connection.execute(sql)
end

#lookupvoid

This method returns an undefined value.

Returns store autocomplete/picker results as JSON.



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'app/controllers/stores_controller.rb', line 116

def lookup
  @stores = Store.order(:name)
  if (store_id = params[:store_id])
    @stores = @stores.where(id: store_id)
  else
    @stores = @stores.where(company_id: params[:company_id]) if params[:company_id]
    if (q = params[:q].presence || params[:term].presence)
      @stores = @stores.where("name ilike ?", "%#{ActiveRecord::Base.sanitize_sql_like(q)}%")
    end
  end
  res = TomSelect.format_json_results(self, @stores, params[:page], params[:per_page]) do |e|
    { id: e.id, text: e.name }
  end
  render json: res
end

#lookup_addressvoid

This method returns an undefined value.

Returns a store's warehouse-consignee addresses as autocomplete results, as JSON.



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'app/controllers/stores_controller.rb', line 135

def lookup_address
  if (store_id = params[:store_id])
    @store = Store.find(store_id)
    @addresses = Address.where(party_id: @store.consignee_party_id).order(state_code: :asc)
    if (q = params[:q].presence || params[:term].presence)
      sanitized = ActiveRecord::Base.sanitize_sql_like(q)
      @addresses = @addresses.where("address_text ILIKE ?", "%#{sanitized}%")
    end
  else
    @addresses = []
  end
  res = TomSelect.format_json_results(self, @addresses, params[:page], params[:per_page]) do |e|
    { id: e.id, text: e.to_s }
  end
  render json: res
end

#newvoid

This method returns an undefined value.

Builds a new, unsaved store.



18
19
20
# File 'app/controllers/stores_controller.rb', line 18

def new
  @store = Store.new(params[:store])
end

#shippedvoid

This method returns an undefined value.

Marks the given deliveries as shipped.



90
91
92
93
94
# File 'app/controllers/stores_controller.rb', line 90

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

#stock_items_without_locationvoid

This method returns an undefined value.

Lists the store's stock items that have no location assigned.



155
156
157
158
159
# File 'app/controllers/stores_controller.rb', line 155

def stock_items_without_location
  @store = Store.find(params[:id])
  @q = @store.store_items.stock_items_without_location.joins(:item).ransack(params[:q])
  @pagy_items, @store_items = pagy(@q.result, limit: 100)
end

#updatevoid

This method returns an undefined value.

Updates a store from submitted params.



44
45
46
47
48
49
50
51
# File 'app/controllers/stores_controller.rb', line 44

def update
  @store = Store.find(params[:id])
  if @store.update(params[:store])
    redirect_to_return_path_or_default store_path(@store)
  else
    render :edit, status: :unprocessable_content
  end
end