Class: DiscountsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- DiscountsController
- Defined in:
- app/controllers/discounts_controller.rb
Overview
== Schema Information
Table name: discounts
id :integer not null, primary key
coupon_id :integer not null
itemizable_type :string(50)
itemizable_id :integer not null
amount :decimal(8, 2)
notes :text
effective_date :datetime
blacklisted :boolean
user_amount :decimal(8, 2)
Applies and removes coupon-based Discounts on a polymorphic itemizable
(order, quote, etc.), resolved from the request context by set_context.
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
Applies a coupon to the context object via Coupon::ApplyCoupon.
-
#destroy ⇒ void
Removes a discount via Coupon::DeleteDiscount.
-
#index ⇒ void
Lists discounts on the current context object, or redirects with an error if the context couldn't be resolved.
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_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.
Applies a coupon to the context object via Coupon::ApplyCoupon.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/controllers/discounts_controller.rb', line 36 def create res = Coupon::ApplyCoupon.new.perform(@context_object, params[:discount]) flash[:error] = res.errors unless res.success? respond_to do |format| format.turbo_stream do if res.success? # Reload to get updated total from database trigger @context_object.reload @discounts = @context_object.discounts.includes(:coupon) # TurboStreamFlashable concern will automatically append flash messages render turbo_stream: [ turbo_stream.replace( 'discount_summary', partial: 'discounts/summary', locals: { itemizable: @context_object } ), turbo_stream.update('coupon_search_results', '') # Clear search results after successful application ] else # On failure, just show flash messages (TurboStreamFlashable handles this) render turbo_stream: turbo_stream.update('coupon_search_results', '') # Clear search results even on failure end end format.html do redirect_to polymorphic_path([@context_object, :discounts]) end end end |
#destroy ⇒ void
This method returns an undefined value.
Removes a discount via Coupon::DeleteDiscount.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'app/controllers/discounts_controller.rb', line 68 def destroy discount = Discount.find(params[:id]) itemizable = discount.itemizable res = Coupon::DeleteDiscount.new.perform(discount) flash[:error] = res.errors unless res.success? respond_to do |format| format.turbo_stream do @context_object = itemizable # Reload to get updated total from database trigger @context_object.reload @discounts = @context_object.discounts.includes(:coupon) render turbo_stream: turbo_stream.replace( 'discount_summary', partial: 'discounts/summary', locals: { itemizable: @context_object } ) end format.html do redirect_to polymorphic_path([itemizable, :discounts]) end end end |
#index ⇒ void
This method returns an undefined value.
Lists discounts on the current context object, or redirects with an
error if the context couldn't be resolved.
24 25 26 27 28 29 30 31 |
# File 'app/controllers/discounts_controller.rb', line 24 def index if @context_object.present? @discounts = @context_object.discounts.includes(:coupon) else flash[:error] = 'Wrong URL' redirect_to root_path end end |