CHM_attendance/app/models/attendance.py
superlishunqin e7fa4bc030 first commit
2025-06-11 19:56:34 +08:00

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}>'