forked from Trustie/forgeplus
168 lines
6.5 KiB
Ruby
168 lines
6.5 KiB
Ruby
class CompetitionInfosController < ApplicationController
|
|
include ApplicationHelper
|
|
before_action :find_competition, only: [:show, :update, :enroll, :upload, :enroll_status, :statistics, :enroll_list]
|
|
before_action :require_admin, only: [:index, :new, :edit, :create]
|
|
before_action :check_competition_manager, only: [:update]
|
|
|
|
def index
|
|
@competition_infos = CompetitionInfo.all
|
|
end
|
|
|
|
# GET /competition_infos/new
|
|
def new
|
|
@competition_info = CompetitionInfo.new
|
|
end
|
|
|
|
# GET /competition_infos/1/edit
|
|
def edit
|
|
@competition_info = CompetitionInfo.find params[:id]
|
|
end
|
|
|
|
# POST /competition_infos.json
|
|
def create
|
|
@competition_info = CompetitionInfo.new(competition_info_params)
|
|
|
|
respond_to do |format|
|
|
if @competition_info.save
|
|
format.html { redirect_to competition_infos_path, notice: '创建成功.' }
|
|
format.json { render :show, status: :created, location: @competition_info }
|
|
else
|
|
format.html { render :new }
|
|
format.json { render json: @competition_info.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
# PATCH/PUT /competition_infos/1.json
|
|
def update
|
|
# @competition_info = CompetitionInfo.find params[:id]
|
|
respond_to do |format|
|
|
if @competition_info.update(competition_info_params)
|
|
format.html { redirect_to competition_infos_path, notice: '更新成功.' }
|
|
format.json { render :show, status: :ok, location: @competition_info }
|
|
else
|
|
format.html { render :edit }
|
|
format.json { render json: @competition_info.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
def enroll_list
|
|
competition_users = CompetitionUser.where(competition_info: @competition_info.id).order("updated_at desc")
|
|
zones = @competition_info.manager_zones(current_user)
|
|
if params[:zone].present?
|
|
competition_users = zones.include?(params[:zone].to_s) ? competition_users.where(zone: params[:zone].to_s) : competition_users.where(zone: [])
|
|
else
|
|
competition_users = current_user.admin? ? competition_users : competition_users.where(zone: zones)
|
|
end
|
|
if params[:sub_competition].present?
|
|
competition_users = competition_users.where(sub_competition: params[:sub_competition].to_s)
|
|
end
|
|
if params[:upload].to_s == "true"
|
|
competition_users = competition_users.joins("join attachments on attachments.container_type='CompetitionUser' and attachments.container_id = competition_users.id")
|
|
end
|
|
@competition_users_count = competition_users.count
|
|
competition_users = competition_users.select("DISTINCT competition_users.*")
|
|
@competition_users = paginate(competition_users)
|
|
respond_to do |format|
|
|
format.json
|
|
#导出功能
|
|
format.xlsx {
|
|
set_export_cookies
|
|
@table_columns = %w(参赛单位 参赛负责人 职务 军衔 电话 赛区 赛项 课题来源 成员)
|
|
@table_columns = @table_columns + %w(作品下载链接) if params[:upload].to_s == "true"
|
|
@export_infos = []
|
|
competition_users.each do |u|
|
|
info_array = [u.org_name, u.leader, u.org_job, u.org_rank, u.phone, u.zone, u.sub_competition, u.subject_source_type == 0 ? "自主提报" : u.subject_source_name,
|
|
u.members_to_string
|
|
]
|
|
if params[:upload].to_s == "true"
|
|
info_array = info_array + [u.attachments.blank? ? "" : "#{EduSetting.get('host_name')}/#{download_url(u.attachments.first)}"]
|
|
end
|
|
@export_infos.push(info_array)
|
|
end
|
|
export_name = "竞赛报名列表_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
|
|
export_name = "竞赛作品列表_#{Time.now.strftime('%Y%m%d_%H%M%S')}" if params[:upload].to_s == "true"
|
|
render xlsx: "#{export_name.strip}", template: "competition_infos/enroll_list.xlsx.axlsx", locals: {table_columns: @table_columns, export_infos: @export_infos}
|
|
}
|
|
end
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def enroll
|
|
competition_user = CompetitionUser.find_by(competition_info: @competition_info.id, user_id: current_user.id)
|
|
tip_exception "您已经报名!" if competition_user.present?
|
|
competition_user = CompetitionUser.new(enroll_params)
|
|
competition_user.competition_info = @competition_info
|
|
competition_user.user = current_user
|
|
competition_user.members = params[:members]
|
|
competition_user.save
|
|
render_ok
|
|
end
|
|
|
|
def enroll_status
|
|
@competition_user = CompetitionUser.find_by(competition_info: @competition_info.id, user_id: current_user.id)
|
|
end
|
|
|
|
def upload
|
|
competition_user = CompetitionUser.find_by(competition_info: @competition_info.id, user_id: current_user.id)
|
|
tip_exception "未报名,请先报名" if competition_user.blank?
|
|
tip_exception "附件参数attachment_ids不能为空" if params[:attachment_ids].blank?
|
|
# tip_exception "您已经提交作品!" if competition_user.present? && competition_user.attachments.present?
|
|
competition_user.attachments.update_all(container_id: nil, container_type: nil)
|
|
params[:attachment_ids].each do |id|
|
|
attachment = Attachment.find_by_id(id)
|
|
unless attachment.blank?
|
|
attachment.container = competition_user
|
|
attachment.author_id = current_user.id
|
|
attachment.description = ""
|
|
attachment.save
|
|
end
|
|
end
|
|
render_ok
|
|
end
|
|
|
|
#赛事风采
|
|
def statistics
|
|
@competition_users = @competition_info.competition_users
|
|
@upload_count = @competition_users.joins("join attachments on attachments.container_type='CompetitionUser' and attachments.container_id = competition_users.id").count
|
|
end
|
|
|
|
|
|
private
|
|
|
|
def enroll_params
|
|
params.permit(:org_name, :org_job, :org_rank, :leader, :zone, :sub_competition, :phone,
|
|
:subject_source_type, :subject_source_name)
|
|
end
|
|
|
|
def competition_info_params
|
|
params.require(:competition_info).permit(:title, :zones, :zones_local, :sub_competitions, :identifier, :content,
|
|
:video_url, :is_local, :manager_ids, :upload_date, :enroll_date, :guide, :about_us, :banner_url)
|
|
end
|
|
|
|
def find_competition
|
|
if CompetitionInfo.where(:identifier => params[:id]).exists?
|
|
@competition_info = CompetitionInfo.where(:identifier => params[:id]).first
|
|
else
|
|
@competition_info = CompetitionInfo.find(params[:id])
|
|
end
|
|
end
|
|
|
|
def manager_competition_zones
|
|
if current_user.admin?
|
|
@competition_info.competition_zones
|
|
else
|
|
@competition_info.manager_zones(current_user)
|
|
end
|
|
end
|
|
|
|
def check_competition_manager
|
|
unless @competition_info.is_manager?(current_user)
|
|
tip_exception(403, "你没有权限操作!")
|
|
end
|
|
end
|
|
end
|