forked from jasder/forgeplus
95 lines
3.0 KiB
Ruby
95 lines
3.0 KiB
Ruby
class Admins::DepartmentsController < Admins::BaseController
|
|
|
|
helper_method :current_department
|
|
|
|
def index
|
|
params[:sort_by] ||= 'created_at'
|
|
params[:sort_direction] ||= 'desc'
|
|
|
|
departments = Admins::DepartmentQuery.call(params)
|
|
|
|
@departments = paginate departments.preload(:school, :member_users)
|
|
|
|
department_ids = @departments.map(&:id)
|
|
@users_count = UserExtension.where(department_id: department_ids).group(:department_id).count
|
|
@professional_auth_count = UserExtension.where(department_id: department_ids)
|
|
.joins(:user).where(users: { professional_certification: true })
|
|
.group(:department_id).count
|
|
end
|
|
|
|
def create
|
|
department_name = params[:department_name].to_s.strip
|
|
school = School.find(params[:school_id])
|
|
|
|
return render_error('部门名称重复') if school.departments.exists?(name: department_name)
|
|
|
|
ActiveRecord::Base.transaction do
|
|
department = school.departments.create!(name: department_name, is_auth: 1)
|
|
ApplyAddDepartment.create!(school_id: school.id, status: 1, name: department.name,
|
|
department_id: department.id, user_id: current_user.id)
|
|
end
|
|
|
|
render_ok
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
identifier = update_params.delete(:identifier).presence
|
|
if identifier && Department.where.not(id: current_department.id).exists?(identifier: identifier)
|
|
return render_error('统计链接重复', type: :notify)
|
|
end
|
|
|
|
current_department.update!(update_params.merge(identifier: identifier))
|
|
end
|
|
|
|
def destroy
|
|
ActiveRecord::Base.transaction do
|
|
current_department.apply_add_departments.update_all(status: 2)
|
|
|
|
user_ids = current_department.user_extensions.pluck(:user_id)
|
|
if user_ids.present?
|
|
DeleteDepartmentNotifyJob.perform_later(current_department.id, 0, user_ids)
|
|
current_department.soft_delete!
|
|
else
|
|
current_department.destroy!
|
|
end
|
|
end
|
|
|
|
render_delete_success
|
|
end
|
|
|
|
def merge
|
|
return render_error('请选择其它部门') if params[:origin_department_id].to_s == params[:department_id].to_s
|
|
|
|
origin_department = Department.find(params[:origin_department_id])
|
|
to_department = Department.find(params[:department_id])
|
|
|
|
return render_error('部门所属单位不相同') if origin_department.school_id != to_department.school_id
|
|
|
|
ActiveRecord::Base.transaction do
|
|
origin_department.apply_add_departments.delete_all
|
|
|
|
origin_department.user_extensions.update_all(department_id: to_department.id)
|
|
|
|
if to_department.identifier.blank? && origin_department.identifier.present?
|
|
to_department.update!(identifier: origin_department.identifier)
|
|
end
|
|
|
|
origin_department.destroy!
|
|
end
|
|
|
|
render_ok
|
|
end
|
|
|
|
private
|
|
|
|
def current_department
|
|
@_current_department ||= Department.find(params[:id])
|
|
end
|
|
|
|
def update_params
|
|
params.require(:department).permit(:name, :identifier, :host_count)
|
|
end
|
|
end |