Class: MailingsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- MailingsController
- Includes:
- Controllers::Destroyable
- Defined in:
- app/controllers/mailings_controller.rb
Overview
Controller: mailings.
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 mailing from
params[:mailing]and redirects to it (or back to the index on failure). -
#index ⇒ void
Lists all mailings, most recent first.
-
#manually_complete_all_mail_activities ⇒ void
Manually completes every open/postage-labeled mail activity of the mailing and redirects back with the outcome.
-
#new ⇒ void
Renders the new-mailing form: activity types grouped by Accounting and Marketing/Sale, plus the open activities available for inclusion.
-
#print_all_postage_labels ⇒ void
Generates a combined PDF of all postage labels for the mailing and redirects to it.
-
#show ⇒ void
Shows a mailing with its ransack-filtered mail activities; also responds with a CSV export of the mailing list.
-
#update ⇒ void
Starts mailing completion: when
params[:complete_mailing]is present and no background job is active, enqueuesMailingCompletionWorkerand redirects to the job page.
Methods included from Controllers::Destroyable
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 mailing from params[:mailing] and redirects to it (or back to the index on failure).
76 77 78 79 80 81 82 83 |
# File 'app/controllers/mailings_controller.rb', line 76 def create @mailing = Mailing.new(params[:mailing]) if @mailing.save redirect_to mailing_path(@mailing) else redirect_to mailings_path, error: 'Unable to create mailing' end end |
#index ⇒ void
This method returns an undefined value.
Lists all mailings, most recent first.
32 33 34 |
# File 'app/controllers/mailings_controller.rb', line 32 def index @pagy, @mailings = pagy(Mailing.order(id: :desc)) end |
#manually_complete_all_mail_activities ⇒ void
This method returns an undefined value.
Manually completes every open/postage-labeled mail activity of the mailing and
redirects back with the outcome.
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'app/controllers/mailings_controller.rb', line 117 def manually_complete_all_mail_activities @mailing = Mailing.find(params[:id]) @mailing.mail_activities.open.each(&:manually_complete_mail_activity) @mailing.mail_activities.postage_labeled.each(&:complete_mail_activity) if @mailing.mail_activities.all?(&:complete?) flash[:info] = 'All mail activities are now completed.' else flash[:error] = "Not all mail activities could be completed. #{@mailing.mail_activities.packaged.count + @mailing.mail_activities.postage_rated.count} have packages defined that need to be cleared or postage labeled." end redirect_to mailing_path(@mailing) end |
#new ⇒ void
This method returns an undefined value.
Renders the new-mailing form: activity types grouped by Accounting and Marketing/Sale,
plus the open activities available for inclusion.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/controllers/mailings_controller.rb', line 57 def new mail_types = ActivityType.tagged_with('mailing').order(:task_type).pluck(:task_type, :id) accounting_types = ActivityType.where(task_type: ['ACTSTMT']).order(:task_type).pluck(:task_type, :id) all_activity_type_ids = accounting_types.map(&:last) + mail_types.map(&:last) @activity_types = { Accounting: accounting_types, 'Marketing/Sale': mail_types } selected_activity_type_ids = (params.try(:[], :q).try(:[], :activity_type_id_in) || []).filter_map(&:presence).uniq.sort store_id = params.dig(:q, :customer_catalog_store_id_eq).presence || 1 @store = Store.find(store_id) @q = Activity.open_activities.ransack(params[:q]) @q.customer_catalog_store_id_eq = store_id @q.activity_type_id_in = all_activity_type_ids if selected_activity_type_ids.blank? @q.sorts = ['campaign_name asc', 'activity_type_task_type asc', 'created_at asc'] if @q.sorts.blank? @pagy_open_mailings, @open_mailings = pagy(@q.result.includes(:party).references(:parties), limit: 250) end |
#print_all_postage_labels ⇒ void
This method returns an undefined value.
Generates a combined PDF of all postage labels for the mailing and redirects to it.
132 133 134 135 136 137 138 139 140 141 |
# File 'app/controllers/mailings_controller.rb', line 132 def print_all_postage_labels @mailing = Mailing.find(params[:id]) pdf, msg = @mailing.generate_all_postage_labels_pdf if pdf redirect_to upload_url(pdf) else flash[:error] = "No postage labels could be generated. #{msg}" redirect_to mailing_path(@mailing) end end |
#show ⇒ void
This method returns an undefined value.
Shows a mailing with its ransack-filtered mail activities; also responds with a
CSV export of the mailing list.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/controllers/mailings_controller.rb', line 39 def show @mailing = Mailing.find(params[:id]) @q = @mailing.mail_activities.ransack(params[:q]) @pagy_activities, @mail_activities = pagy(@q.result, limit: 100) respond_to do |format| format.html format.csv do # send it to the browsah send_data generate_csv_string(@mail_activities), type: 'text/csv; charset=iso-8859-1; header=present', disposition: "attachment; filename=mailing_list_#{@mailing.created_at}.csv" end end end |
#update ⇒ void
This method returns an undefined value.
Starts mailing completion: when params[:complete_mailing] is present and no background
job is active, enqueues MailingCompletionWorker and redirects to the job page.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'app/controllers/mailings_controller.rb', line 88 def update @mailing = Mailing.find(params[:id]) if @mailing.complete? flash[:warning] = 'Mailing has already been completed' redirect_to(mailing_path(@mailing)) && return elsif params[:complete_mailing].present? if @mailing.has_active_background_job? flash[:error] = 'You must wait for any existing jobs to finish before starting a new one.' redirect_to(mailing_path(@mailing)) && return end = { mailing_id: @mailing.id, current_user_id: @context_user.id, redirect_to: mailing_path(@mailing) }.stringify_keys job_id = MailingCompletionWorker.perform_async() if job_id @mailing.update(job_id:) redirect_to job_path(job_id) else flash[:error] = 'Mailing Completion Worker not queued. Please try again or contact support.' redirect_to_return_path_or_default mailing_path(@mailing) end end end |