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