Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactoring career_member_users #652

Merged
merged 2 commits into from Jul 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
70 changes: 46 additions & 24 deletions app/controllers/web/admin/career_member_users_controller.rb
@@ -1,54 +1,64 @@
# frozen_string_literal: true

class Web::Admin::CareerMemberUsersController < Web::Admin::ApplicationController
# TODO: удобнее здесь выводить members
before_action only: %i[index archived finished lost] do
query = { s: 'created_at desc' }.merge(params.permit![:q] || {})
@q = User.permitted.includes(:careers, :career_members).ransack(query)
@users = @q.result
@q = Career::Member.joins(:user, :career).merge(User.permitted).ransack(query)
@career_members = @q.result
@careers = Career.all
end

def index
@users_with_active_career = @users
.only_active_career_members
.page(params[:page])
.per(20)
@active_career_members = @career_members
.active
.page(params[:page])
.per(20)

@users = prepare_data(@active_career_members)
@back_to_page = admin_career_member_users_path
end

def archived
@users_with_archived_career = @users
.only_archived_career_members
.page(params[:page])
.per(20)
@archived_career_members = @career_members
.archived
.page(params[:page])
.per(20)

@users = prepare_data(@archived_career_members)
@back_to_page = archived_admin_career_member_users_path
end

def finished
@users_with_finished_career = @users
.only_finished_career_members
.page(params[:page])
.per(20)
@finished_career_members = @career_members
.finished
.page(params[:page])
.per(20)

@users = prepare_data(@finished_career_members)
end

def lost
@users_lost_career = @users
.only_active_career_members
.with_career_step_members
.includes(career_members: :career_step_members)
.merge(Career::Step::Member.active.where(created_at: ..1.week.ago))
.page(params[:page])
.per(20)
@lost_career_members = @career_members
.active
.joins(:career_step_members)
.includes(:career_step_members)
.merge(Career::Step::Member.active.where(created_at: ..1.week.ago))
.page(params[:page])
.per(20)

@users = prepare_data(@lost_career_members)
@back_to_page = lost_admin_career_member_users_path
end

def show
@user = User.find(params[:id])
@career_members = @user.career_members.includes(:career, :career_step_members)
@progress = @career_members.each_with_object({}) do |member, acc|
acc[member.id] = {}
acc[member.id][:career_name] = member.career
acc[member.id][:career] = member.career
acc[member.id][:last_activity_at] = member.career_step_members.active.last&.created_at
acc[member.id][:progress] = member.progress_by_finished_steps
acc[member.id][:current_step] = member.current_item.career_step.name
acc[member.id][:current_step] = member.current_item&.career_step&.name
end
@back_to_page = admin_career_member_user_path(@user)
end
Expand Down Expand Up @@ -77,4 +87,16 @@ def create
def career_member_params
params.require(:career_member).permit(:user_id, :career_id)
end

def prepare_data(career_members)
career_members.each_with_object({}) do |member, acc|
acc[member.id] = {}
acc[member.id][:last_name] = member.user.last_name
acc[member.id][:first_name] = member.user.first_name
acc[member.id][:email] = member.user.email
acc[member.id][:careers] = member.user.careers
acc[member.id][:current_step] = member.current_item&.career_step&.name
acc[member.id][:progress] = member.progress_by_finished_steps
end
end
end
8 changes: 8 additions & 0 deletions app/models/career/member.rb
Expand Up @@ -67,4 +67,12 @@ def finished_steps_count
career_step_members.finished.count
end
end

def self.ransackable_attributes(_auth_object = nil)
%w[created_at finished_at state updated_at user_id]
end

def self.ransackable_associations(_auth_object = nil)
%w[user career]
end
end
@@ -1,8 +1,8 @@
.p-3.mb-3.bg-light
= search_form_for q, default_filter_form_options(url: url_for) do |f|
= f.input :last_name_or_first_name_cont, placeholder: "#{han('user', :last_name)}/#{han('user', :first_name)}", label: false
= f.input :email_cont, placeholder: han('user', :email), label: false
= f.input :careers_slug_eq, prompt: t('.careers'), label: false, as: :select_with_search, collection: @careers.map { |career| [career.name, career.slug] }
= f.input :user_last_name_or_user_first_name_cont, placeholder: "#{han('user', :last_name)}/#{han('user', :first_name)}", label: false
= f.input :user_email_cont, placeholder: han('user', :email), label: false
= f.input :career_slug_eq, prompt: t('.careers'), label: false, as: :select_with_search, collection: @careers.map { |career| [career.name, career.slug] }
.col.d-flex.align-self-end
= f.button :submit, t('submit'), class: 'btn-primary me-2 flex-grow-1'
= link_to t('reset'), url_for, class: 'btn btn-outline-primary'
49 changes: 30 additions & 19 deletions app/views/web/admin/career_member_users/_users.html.slim
@@ -1,32 +1,43 @@
- if users.empty?
- if career_members.empty?
= render 'web/shared/empty_list'
- else
table.table.table-striped
thead
tr
th = sort_link(q, 'last_name')
th = sort_link(q, 'first_name')
th = sort_link(q, 'email')
th = sort_link(q, 'user_last_name')
th = sort_link(q, 'user_first_name')
th = sort_link(q, 'user_email')
th = t('.current_step')
th = han('career', 'name')
th = han('career/member', 'created_at')
- unless @users_with_finished_career.nil?
- unless @finished_career_members.nil?
th = han('career/member', 'finished_at')
- if show_progress
th = t('.progress')
th = t('actions')

tbody
- users.each do |user|
tr
td = user.last_name
td = user.first_name
td = user.email
td = render 'careers', careers: user.careers
td = show_date_if(user.career_members.last.created_at, :without_time)
- unless @users_with_finished_career.nil?
td = show_date_if(user.career_members.last.finished_at, :without_time)
- if show_progress
td = user.active_career_member.progress_by_finished_steps
td
= link_to admin_career_member_user_path(user), class: 'btn btn-outline-primary btn-sm', title: t('.show') do
span.bi.bi-eye-fill
- career_members.each do |career_member|
- let users[career_member.id] do |user|
tr
td = user[:last_name]
td = user[:first_name]
td = user[:email]
td = user[:current_step] || t('.not_started')
td = render 'careers', careers: user[:careers]
td = show_date_if(career_member.created_at, :without_time)
- unless @finished_career_members.nil?
td = show_date_if(career_member.finished_at, :without_time)
- if show_progress
td = user[:progress]
td
.btn-group[role='group' aria-label="#{t('action_buttons')}"]
= link_to admin_career_member_user_path(career_member.user), class: 'btn btn-outline-primary btn-sm', title: t('.show') do
span.bi.bi-eye-fill

- if career_member.may_archive?
= link_to archive_admin_career_member_path(career_member.career, career_member, back_to: @back_to_page), class: 'btn btn-outline-danger btn-sm', method: :patch, data: { confirm: t('.confirm') }, title: t('.archive') do
span.bi.bi.bi-trash3
- if career_member.may_activate?
= link_to activate_admin_career_member_path(career_member.career, career_member, back_to: @back_to_page), method: :patch, class: 'btn btn-outline-success btn-sm', data: { confirm: t('.confirm_activate') }, title: t('.restore') do
span.bi.bi-arrow-counterclockwise
4 changes: 2 additions & 2 deletions app/views/web/admin/career_member_users/archived.html.slim
Expand Up @@ -5,6 +5,6 @@

= render 'menu'

= render 'users', users: @users_with_archived_career, q: @q, show_progress: false
= render 'users', career_members: @archived_career_members, users: @users, q: @q, show_progress: false

= paginate @users_with_archived_career
= paginate @archived_career_members
4 changes: 2 additions & 2 deletions app/views/web/admin/career_member_users/finished.html.slim
Expand Up @@ -5,6 +5,6 @@

= render 'menu'

= render 'users', users: @users_with_finished_career, q: @q, show_progress: false
= render 'users', career_members: @finished_career_members, users: @users, q: @q, show_progress: false

= paginate @users_with_finished_career
= paginate @finished_career_members
4 changes: 2 additions & 2 deletions app/views/web/admin/career_member_users/index.html.slim
Expand Up @@ -7,6 +7,6 @@

h2 = t('.users_active_career')

= render 'users', users: @users_with_active_career, q: @q, show_progress: true
= render 'users', career_members: @active_career_members, users: @users, q: @q, show_progress: true

= paginate @users_with_active_career
= paginate @active_career_members
4 changes: 2 additions & 2 deletions app/views/web/admin/career_member_users/lost.html.slim
Expand Up @@ -5,6 +5,6 @@

= render 'menu'

= render 'users', users: @users_lost_career, q: @q, show_progress: true
= render 'users', career_members: @lost_career_members, users: @users, q: @q, show_progress: true

= paginate @users_lost_career
= paginate @lost_career_members
8 changes: 4 additions & 4 deletions app/views/web/admin/career_member_users/show.html.slim
Expand Up @@ -34,18 +34,18 @@ table.table.table-striped
- @career_members.each do |career_member|
- let @progress[career_member.id] do |member|
tr
td = member[:career_name].name
td = member[:career].name
td = career_member.aasm(:state).human_state
td = member[:current_step]
td = member[:progress]
td = show_date_if(member[:last_activity_at], :without_time)
td
.btn-group[role='group' aria-label="#{t('action_buttons')}"]
= link_to admin_career_path(member[:career_name]), class: 'btn btn-outline-primary btn-sm', title: t('.show') do
= link_to admin_career_path(member[:career]), class: 'btn btn-outline-primary btn-sm', title: t('.show') do
span.bi.bi-eye-fill
- if career_member.may_archive?
= link_to archive_admin_career_member_path(member[:career_name], career_member, back_to: @back_to_page), class: 'btn btn-outline-danger btn-sm', method: :patch, data: { confirm: t('.confirm') }, title: t('.archive') do
= link_to archive_admin_career_member_path(member[:career], career_member, back_to: @back_to_page), class: 'btn btn-outline-danger btn-sm', method: :patch, data: { confirm: t('.confirm') }, title: t('.archive') do
span.bi.bi.bi-trash3
- if career_member.may_activate?
= link_to activate_admin_career_member_path(member[:career_name], career_member, back_to: @back_to_page), method: :patch, class: 'btn btn-outline-success btn-sm', data: { confirm: t('.confirm_activate') }, title: t('.restore') do
= link_to activate_admin_career_member_path(member[:career], career_member, back_to: @back_to_page), method: :patch, class: 'btn btn-outline-success btn-sm', data: { confirm: t('.confirm_activate') }, title: t('.restore') do
span.bi.bi-arrow-counterclockwise
4 changes: 4 additions & 0 deletions config/locales/admin/en.yml
Expand Up @@ -46,6 +46,10 @@ en:
list: List
new: Assign a student a career track
users:
current_step: Current step
not_started: Not started
confirm: Are you sure you want to remove the user from the career track?
confirm_activate: Are you sure you want to restore the user to the career track
progress: All/Finished
no_date: Not finished
show: User profile
Expand Down
4 changes: 4 additions & 0 deletions config/locales/admin/ru.yml
Expand Up @@ -47,6 +47,10 @@ ru:
users_finished_career: Закончили КТ
users_archived_career: Архив
users:
current_step: Текущий шаг
not_started: Не стартовал
confirm: Вы уверенны что хотите убрать пользоваеля из карьерного трека
confirm_activate: Вы уверенны что хотите востонавить пользователя в карьерный трек
progress: Всего/Пройденно
show: Профиль пользователя
no_date: Не завершен
Expand Down