Class: SmartServicesController

Inherits:
BasePortalController show all
Includes:
SmartServicesHelper
Defined in:
app/controllers/smart_services_controller.rb

Overview

Controller: smart services.

Constant Summary

Constants included from Controllers::MasqueradeGuarded

Controllers::MasqueradeGuarded::DEFAULT_BLOCK_MESSAGE

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 SmartServicesHelper

#build_address, #calculate_distance_from_lz, #check_postal_code, #create_customer, #create_order, #format_service_address

Methods inherited from BasePortalController

#current_ability, #portal_party, #set_catalog, #set_webpack

Methods included from Controllers::MasqueradeGuarded

block_while_masquerading, #masquerade_blocks?

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

#check_zip_codevoid

This method returns an undefined value.

Returns the smart services available at the given postal code, as JSON.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/controllers/smart_services_controller.rb', line 26

def check_zip_code
  services = check_postal_code(params[:postal_code])

  respond_to do |format|
    format.json do
      if services.any?
        render json: {
          services: services.join(',')
        }
      else
        render json: { error_message: "No smart services found!" }, status: :internal_server_error
      end
    end
  end
end

#create_appointmentvoid

This method returns an undefined value.

Creates the customer, order, and support-case ticket for a smart-service
appointment, and renders the payment step.



51
52
53
54
55
56
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
86
87
88
89
90
91
92
93
94
95
96
# File 'app/controllers/smart_services_controller.rb', line 51

def create_appointment
  service_address = {
    recipient: params[:name],
    street1: params[:street1],
    street2: params[:street2],
    state_code: params[:state],
    postal_code: params[:zip],
    city: params[:city],
    country_iso: 'US'
  }

  @customer = begin
    create_customer(@context_user.customer, params[:name], params[:phone], params[:email])
  rescue StandardError
    nil
  end
  @order = begin
    create_order(params[:service], params[:room_qty], @customer, service_address)
  rescue StandardError
    nil
  end
  @ticket = begin
    create_ticket(params[:service], params[:date], params[:time], @order.shipping_address.id, @order.id, params[:room_qty])
  rescue StandardError
    nil
  end

  respond_to do |format|
    format.json do
      if @customer.nil? || @order.nil? || @ticket.nil?
        ErrorReporting.error("Error creating appointment. Customer #{@customer.try(:id)} Order #{@order.try(:id)} Ticket #{@ticket.try(:id)}")
        render json: { error_message: "We had a problem creating your appointment. Please call us at 800-875-5285 to arrange an appointment through the phone." }, status: :internal_server_error
      else
        render json: {
          html:
            render_to_string(
              partial: 'payment',
              formats: :html,
              layout: false,
              locals: { encrypted_order: Encryption.encrypt_string(@order.id.to_s), support_case: @ticket }
            )
        }
      end
    end
  end
end

#create_ticket(service, date, time, address_id, order_id, room_qty) ⇒ SupportCase

Builds and saves the support-case ticket for a smart-service appointment.

Parameters:

  • service (String)

    the requested service code

  • date (String)

    the requested service date

  • time (String)

    the requested time frame

  • address_id (Integer)

    the service address id

  • order_id (Integer)

    the order the ticket is attached to

  • room_qty (String, Integer)

    number of rooms being serviced

Returns:

  • (SupportCase)

    the created (and saved) support case



127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'app/controllers/smart_services_controller.rb', line 127

def create_ticket(service, date, time, address_id, order_id, room_qty)
  sc = SupportCase.new(case_type: 'SmartService')
  sc.send(:set_case_number)
  sc.description = "Requested Date: #{date} <br> Time Frame: #{time}.<br>"
  sc.priority = 'Low'
  sc.service = service
  sc.service_room_qty = room_qty.to_i
  sc.service_address_id = address_id
  sc.service_date = date
  sc.build_participants_and_rooms(order_id: order_id)
  sc.save
  sc
end

#indexvoid

This method returns an undefined value.

Blocks employee accounts from the customer-facing smart-services portal.



9
10
11
12
13
14
# File 'app/controllers/smart_services_controller.rb', line 9

def index
  return unless @context_user.is_employee?

  flash[:error] = "You can't access this page with an employee account."
  redirect_to cms_link('/')
end

#load_customer_infovoid

This method returns an undefined value.

Prepares checkout and renders the customer-information step.



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/controllers/smart_services_controller.rb', line 101

def load_customer_info
  create_order_and_prepare_checkout
  respond_to do |format|
    format.json do
      render json: {
        html:
          render_to_string(
            partial: 'customer_information',
            formats: :html,
            layout: false,
            locals: { checkout_form: @checkout_form }
          )
      }
    end
  end
end

#remote_requestvoid

This method returns an undefined value.

Renders the smart-services lead capture form.



19
20
21
# File 'app/controllers/smart_services_controller.rb', line 19

def remote_request
  @lead = Lead.new
end

#select_smart_servicevoid

This method returns an undefined value.

Renders the smart-service selection step.



45
# File 'app/controllers/smart_services_controller.rb', line 45

def select_smart_service; end