video_log
parent
81380ea879
commit
c3d98855cb
@ -1,38 +0,0 @@
|
||||
class AttendancesController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :find_course, only: [:create, :index]
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
attendance = @course.course_attendances.create!(create_params)
|
||||
unless params[:group_ids].blank?
|
||||
params[:group_ids].each do |group_id|
|
||||
@course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance)
|
||||
end
|
||||
else
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
end
|
||||
|
||||
def update
|
||||
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
def create_params
|
||||
params.permit(:name, :mode, :attendance_date, :start_time, :end_time)
|
||||
end
|
||||
end
|
@ -0,0 +1,85 @@
|
||||
class Weapps::AttendancesController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :find_course, only: [:create, :index]
|
||||
before_action :find_attendance, except: [:create, :index]
|
||||
before_action :user_course_identity
|
||||
before_action :teacher_allowed, only: [:create]
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
attendance = @course.course_attendances.create!(create_params.merge(user_id: current_user.id))
|
||||
unless params[:group_ids].blank?
|
||||
group_ids = @course.charge_group_ids(current_user) & params[:group_ids]
|
||||
group_ids.each do |group_id|
|
||||
@course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance)
|
||||
end
|
||||
else
|
||||
@course.course_attendance_groups.create!(course_group_id: 0, course_attendance: attendance)
|
||||
end
|
||||
render_ok({attendance_id: attendance.id})
|
||||
end
|
||||
end
|
||||
|
||||
def index
|
||||
|
||||
end
|
||||
|
||||
def student_attendances
|
||||
if @user_course_identity == Course::STUDENT
|
||||
current_date = Date.current
|
||||
current_end_time = Time.current.strftime("%H:%M:%S")
|
||||
member = @course.students.find_by(user_id: current_user.id)
|
||||
|
||||
# 先算出该学生所在分班的签到id
|
||||
# 分班id为0 表示签到不限制分班
|
||||
group_ids = [member&.course_group_id.to_i, 0]
|
||||
all_attendance_ids = @course.course_attendance_groups.where(course_group_id: group_ids).pluck(:course_attendance_id)
|
||||
|
||||
@history_attendances = @course.course_attendances.where(id: all_attendance_ids.uniq).
|
||||
where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < #{current_end_time})").order("id desc")
|
||||
@current_attendance = @course.course_attendances.where(id: all_attendance_ids.uniq).
|
||||
where("attendance_date = '#{current_date}' and start_time <= #{current_end_time} and end_time > #{current_end_time}").take
|
||||
@history_count = @history_attendances.size
|
||||
|
||||
student_attendance_ids = @history_attendances.pluck(:id)
|
||||
student_attendance_ids += @current_attendance.present? ? [@current_attendance.id] : []
|
||||
|
||||
if student_attendance_ids.uniq.blank?
|
||||
@normal_count = 0
|
||||
@leave_count = 0
|
||||
@absence_count = 0
|
||||
else
|
||||
@normal_count = @course.course_member_attendances.where(course_attendance_id: student_attendance_ids, attendance_status: 1).size
|
||||
@leave_count = @course.course_member_attendances.where(course_attendance_id: student_attendance_ids, attendance_status: 2).size
|
||||
@absence_count = student_attendance_ids.uniq.size - @normal_count - @leave_count
|
||||
end
|
||||
|
||||
@all_history_count = @history_attendances.size
|
||||
@history_attendances = paginate @history_attendances.includes(:course_member_attendances)
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
end
|
||||
|
||||
def update
|
||||
tip_exception(403, "") unless @user_course_identity < Course::PROFESSOR || @attendance.user_id == current_user.id
|
||||
@attendance.update!(name: params[:name])
|
||||
render_ok
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
def create_params
|
||||
params.permit(:name, :mode, :attendance_date, :start_time, :end_time)
|
||||
end
|
||||
|
||||
def find_attendance
|
||||
@attendance = CourseAttendance.find params[:id]
|
||||
@course = @attendance.course
|
||||
end
|
||||
end
|
@ -0,0 +1,12 @@
|
||||
json.current_attendance do
|
||||
json.partial! 'student_attendance', locals: {attendance: @current_attendance}
|
||||
end
|
||||
|
||||
json.history_attendances @history_attendances do |attendance|
|
||||
json.partial! 'student_attendance', locals: {attendance: attendance}
|
||||
end
|
||||
|
||||
json.all_history_count @all_history_count
|
||||
json.normal_count @normal_count
|
||||
json.leave_count @leave_count
|
||||
json.absence_count @absence_count
|
@ -0,0 +1,17 @@
|
||||
class CreateCourseMemberAttendances < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :course_member_attendances do |t|
|
||||
t.references :course_member, index: true
|
||||
t.references :user
|
||||
t.references :course, index: true
|
||||
t.references :course_attendance
|
||||
t.references :course_group, index: true
|
||||
t.integer :attendance_mode, default: 0
|
||||
t.integer :attendance_status, default: 0
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
add_index :course_member_attendances, [:course_attendance_id, :user_id], unique: true, name: "index_on_user_attendance"
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CourseMemberAttendance, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in new issue