70 lines
3.2 KiB
Python
70 lines
3.2 KiB
Python
from app.models import db
|
|
from datetime import datetime
|
|
|
|
|
|
class WeeklyAttendance(db.Model):
|
|
__tablename__ = 'weekly_attendance'
|
|
|
|
record_id = db.Column(db.Integer, primary_key=True)
|
|
student_number = db.Column(db.String(20), db.ForeignKey('students.student_number'), nullable=False)
|
|
name = db.Column(db.String(50), nullable=False)
|
|
week_start_date = db.Column(db.Date, nullable=False, index=True)
|
|
week_end_date = db.Column(db.Date, nullable=False, index=True)
|
|
actual_work_hours = db.Column(db.Numeric(5, 1), default=0)
|
|
class_work_hours = db.Column(db.Numeric(5, 1), default=0)
|
|
absent_days = db.Column(db.Integer, default=0)
|
|
overtime_hours = db.Column(db.Numeric(5, 1), default=0)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
# 学生关系
|
|
student_info = db.relationship('Student', backref='weekly_attendance',
|
|
foreign_keys=[student_number],
|
|
primaryjoin="WeeklyAttendance.student_number==Student.student_number")
|
|
|
|
def __repr__(self):
|
|
return f'<WeeklyAttendance {self.name} {self.week_start_date}>'
|
|
|
|
|
|
class DailyAttendanceDetail(db.Model):
|
|
__tablename__ = 'daily_attendance_details'
|
|
|
|
detail_id = db.Column(db.Integer, primary_key=True)
|
|
weekly_record_id = db.Column(db.Integer, db.ForeignKey('weekly_attendance.record_id'))
|
|
student_number = db.Column(db.String(20), db.ForeignKey('students.student_number'), nullable=False)
|
|
attendance_date = db.Column(db.Date, nullable=False, index=True)
|
|
status = db.Column(db.String(20), default='正常')
|
|
check_in_time = db.Column(db.Time)
|
|
check_out_time = db.Column(db.Time)
|
|
remarks = db.Column(db.Text)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
# 关系
|
|
weekly_record = db.relationship('WeeklyAttendance', backref='daily_details')
|
|
student_info = db.relationship('Student', backref='daily_attendance',
|
|
foreign_keys=[student_number],
|
|
primaryjoin="DailyAttendanceDetail.student_number==Student.student_number")
|
|
|
|
def __repr__(self):
|
|
return f'<DailyAttendance {self.student_number} {self.attendance_date}>'
|
|
|
|
|
|
class LeaveRecord(db.Model):
|
|
__tablename__ = 'leave_records'
|
|
|
|
leave_id = db.Column(db.Integer, primary_key=True)
|
|
student_number = db.Column(db.String(20), db.ForeignKey('students.student_number'), nullable=False)
|
|
leave_start_date = db.Column(db.Date, nullable=False)
|
|
leave_end_date = db.Column(db.Date, nullable=False)
|
|
leave_reason = db.Column(db.Text)
|
|
status = db.Column(db.Enum('待审批', '已批准', '已拒绝'), default='待审批')
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
# 学生关系
|
|
student_info = db.relationship('Student', backref='leave_records',
|
|
foreign_keys=[student_number],
|
|
primaryjoin="LeaveRecord.student_number==Student.student_number")
|
|
|
|
def __repr__(self):
|
|
return f'<LeaveRecord {self.student_number} {self.leave_start_date}>'
|