Class: EmployeeTopicsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- EmployeeTopicsController
- Includes:
- Controllers::Workflowable
- Defined in:
- app/controllers/employee_topics_controller.rb
Overview
Training-topic assignments for employees: CRUD on EmployeeTopic,
auto-assignment by role, and the bulk training-request flow.
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
-
#auto_assign_topics ⇒ void
Runs EmployeeTopic.auto_assign for each employee in
params[:employee_id]. -
#do_training_request ⇒ void
Assigns the selected topics to the selected trainees in bulk.
-
#edit ⇒ void
Loads an assignment for editing.
-
#index ⇒ void
Lists employee-topic assignments, ransack-filterable (defaults to
assigned/requestedstates), grouped by topic category. -
#show ⇒ void
Shows a single assignment.
-
#training_request ⇒ void
Renders the bulk training-request form.
-
#update ⇒ void
Updates an assignment.
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
#auto_assign_topics ⇒ void
This method returns an undefined value.
Runs EmployeeTopic.auto_assign for each employee in
params[:employee_id].
66 67 68 69 70 71 72 73 74 |
# File 'app/controllers/employee_topics_controller.rb', line 66 def auto_assign_topics @employees = Employee.where(id: params[:employee_id]) assignment_counter = 0 @employees.each do |employee| assignment_counter += EmployeeTopic.auto_assign(employee).size end flash[:info] = "#{assignment_counter} topic(s) assigned" redirect_to_return_path_or_default employee_topics_path end |
#do_training_request ⇒ void
This method returns an undefined value.
Assigns the selected topics to the selected trainees in bulk.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/controllers/employee_topics_controller.rb', line 86 def do_training_request trainees = Employee.where(id: params[:employee_ids]) new_employee_topics = [] errors = [] topics = Topic.active.where(applies_to_employee: true).where(id: params[:topic_ids]) topics.each do |topic| trainees.each do |employee| et = employee.employee_topics.where(topic_id: topic.id).first_or_create(state: 'assigned') et.update(employee_topic_params.merge(state: 'assigned')) new_employee_topics << et errors += et.errors..map { |e| "Topic ID: #{topic.id}, Employee ID: #{employee.id} assignment error: #{e}" } end end flash[:info] = "#{view_context.pluralize(new_employee_topics.size, 'topic')} were assigned to #{view_context.pluralize(trainees.size, 'trainee')}" flash[:error] = "Could not process some requests. #{errors.inspect}" if errors.present? redirect_to employee_topics_path(q: { party_id_in: params[:employee_ids], topic_id_in: params[:topic_ids], state_in: ['assigned'] }) end |
#edit ⇒ void
This method returns an undefined value.
Loads an assignment for editing.
44 45 46 47 |
# File 'app/controllers/employee_topics_controller.rb', line 44 def edit @employee_topic = EmployeeTopic.find(params.expect(:id)) (:update, @employee_topic) end |
#index ⇒ void
This method returns an undefined value.
Lists employee-topic assignments, ransack-filterable (defaults to
assigned/requested states), grouped by topic category.
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/controllers/employee_topics_controller.rb', line 20 def index params[:q] = { state_in: %w[assigned requested] } if params[:q].blank? @q = EmployeeTopic.ransack(params[:q]) # The joins drive the merges and ordering; preload separately so rendering # 100 rows doesn't fire a lookup per row for employee/trainer/topic. @pagy, @employee_topics = pagy(@q.result .joins([{ topic: :topic_category }, :employee]) .merge(Employee.active_employees) .merge(Topic.sorted) .preload(:employee, :trainer_party, topic: :topic_category), items: 100) @employee_topics_grouped = @employee_topics.group_by { |pt| pt.topic.topic_category } end |
#show ⇒ void
This method returns an undefined value.
Shows a single assignment. The view asks the ability which state events
this user may fire, so nothing is precomputed here.
37 38 39 |
# File 'app/controllers/employee_topics_controller.rb', line 37 def show @employee_topic = EmployeeTopic.find(params.expect(:id)) end |
#training_request ⇒ void
This method returns an undefined value.
Renders the bulk training-request form.
79 80 81 |
# File 'app/controllers/employee_topics_controller.rb', line 79 def training_request load_employees_and_topics end |
#update ⇒ void
This method returns an undefined value.
Updates an assignment.
52 53 54 55 56 57 58 59 60 |
# File 'app/controllers/employee_topics_controller.rb', line 52 def update @employee_topic = EmployeeTopic.find(params.expect(:id)) (:update, @employee_topic) if @employee_topic.update(employee_topic_params) redirect_to_return_path_or_default employee_topic_path(@employee_topic) else render :edit, status: :unprocessable_content end end |