Class: Crm::CertificationsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Crm::CertificationsController
- Includes:
- Controllers::Workflowable
- Defined in:
- app/controllers/crm/certifications_controller.rb
Overview
Controller: certifications.
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
-
#approve ⇒ Object
Approval goes through the state machine's
activateevent so approved certifications land in the canonicalactivestate (reference number, congratulations email, expiry reset) instead of a bespoke 'approved' string invisible to every scope and worker. -
#create ⇒ void
POST /crm/certifications — requests a certification for a course enrollment.
-
#edit ⇒ void
GET /crm/certifications/:id/edit — edit form for an existing certification.
-
#index ⇒ void
GET /crm/certifications — a customer's certifications, or a course enrollment's certification.
-
#index_all ⇒ Object
The certification queue: defaults to the
requestedstate so staff land on what needs action, with per-row activation checklists in the view. -
#new ⇒ void
GET /crm/certifications/new — blank certification request form.
-
#reject ⇒ void
POST /crm/certifications/:id/reject — cancels a certification request.
-
#show ⇒ void
GET /crm/certifications/:id — a single certification (HTML dashboard or PDF certificate).
-
#update ⇒ void
PATCH/PUT /crm/certifications/:id — updates a certification.
Methods included from Controllers::Workflowable
#render_workflow_error_stream, #render_workflow_success_stream, #workflow_action, #workflow_action_complete
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
#approve ⇒ Object
Approval goes through the state machine's activate event so approved
certifications land in the canonical active state (reference number,
congratulations email, expiry reset) instead of a bespoke 'approved'
string invisible to every scope and worker.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'app/controllers/crm/certifications_controller.rb', line 117 def approve @certification = Certification.find(params.expect(:id)) @customer = @certification.party.customer begin Certification.transaction do unless @certification.activate raise "Certification cannot be approved yet. Missing: #{@certification.activation_blockers.to_sentence}." end @certification.update!(certified_by: current_user.id) end flash[:info] = "Certification approved and valid until #{@certification.expires_at.to_date}" rescue StandardError => e flash[:error] = e. end redirect_back_or_to @certification end |
#create ⇒ void
This method returns an undefined value.
POST /crm/certifications — requests a certification for a course enrollment.
69 70 71 72 73 74 75 76 77 78 |
# File 'app/controllers/crm/certifications_controller.rb', line 69 def create @certification = @customer.certifications.new(certification_params) @certification.title = @certification.course_enrollment.course.name if @certification.save @certification.request redirect_to @certification, notice: 'Certification requested' else render :new, status: :unprocessable_content end end |
#edit ⇒ void
This method returns an undefined value.
GET /crm/certifications/:id/edit — edit form for an existing certification.
61 62 63 64 |
# File 'app/controllers/crm/certifications_controller.rb', line 61 def edit @certification = Certification.find(params.expect(:id)) @customer = @certification.party end |
#index ⇒ void
This method returns an undefined value.
GET /crm/certifications — a customer's certifications, or a course
enrollment's certification.
13 14 15 16 17 18 19 20 21 22 |
# File 'app/controllers/crm/certifications_controller.rb', line 13 def index if params[:customer_id].present? get_customer @certifications = @customer.certifications elsif params[:course_enrollment_id].present? get_enrollment @certification = @course_enrollment.certification @customer = @course_enrollment.party end end |
#index_all ⇒ Object
The certification queue: defaults to the requested state so staff land
on what needs action, with per-row activation checklists in the view.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'app/controllers/crm/certifications_controller.rb', line 94 def index_all params[:q] = { state_eq: 'requested' } if params[:q].blank? @q = Certification.ransack(params[:q]) @q.sorts = 'created_at desc' if @q.sorts.blank? result = @q.result.includes(:party, course_enrollment: :course) respond_to do |format| format.html do @pagy, @certifications = pagy(result, limit: 25) @stats = { requested: Certification.requested.count, active: Certification.active.count, expiring_soon: Certification.active.where(expires_at: ..30.days.from_now).count, expired: Certification.expired.count } end format.csv { send_data certifications_csv(result), filename: "certifications-#{Date.current}.csv" } end end |
#new ⇒ void
This method returns an undefined value.
GET /crm/certifications/new — blank certification request form.
56 |
# File 'app/controllers/crm/certifications_controller.rb', line 56 def new; end |
#reject ⇒ void
This method returns an undefined value.
POST /crm/certifications/:id/reject — cancels a certification request.
138 139 140 141 142 143 144 145 146 147 |
# File 'app/controllers/crm/certifications_controller.rb', line 138 def reject @certification = Certification.find(params.expect(:id)) @customer = @certification.party if @certification.cancel flash[:info] = "Certification rejected" else flash[:error] = "This certification can no longer be rejected (state: #{@certification.state})." end redirect_back_or_to @certification end |
#show ⇒ void
This method returns an undefined value.
GET /crm/certifications/:id — a single certification (HTML dashboard or
PDF certificate).
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/crm/certifications_controller.rb', line 28 def show @certification = Certification.find(params.expect(:id)) @customer = @certification.party.customer @course_enrollment = @certification.course_enrollment @course = @course_enrollment.course if @course_enrollment.present? if @course.present? dashboard = Course::DashboardStats.call(@course) @topic_categories = dashboard.topic_categories @topic_exams = dashboard.topic_exams @recent_enrollments = dashboard.recent_enrollments @stats = dashboard.stats end respond_to do |format| format.html format.pdf do result = Pdf::Document::Certificate.call(@certification) send_data result.pdf, filename: result.file_name, type: 'application/pdf', disposition: 'inline', encoding: 'utf8' end end end |
#update ⇒ void
This method returns an undefined value.
PATCH/PUT /crm/certifications/:id — updates a certification.
83 84 85 86 87 88 89 90 |
# File 'app/controllers/crm/certifications_controller.rb', line 83 def update @certification = Certification.find(params.expect(:id)) if @certification.update(certification_params) redirect_to @certification, notice: 'Certification updated' else render :edit, status: :unprocessable_content end end |