Refactor sync and database functions to handle empty results and add timetable database creation
This commit is contained in:
parent
75db8785a5
commit
a09338cde4
2 changed files with 78 additions and 5 deletions
|
@ -54,17 +54,18 @@ def sync(page: ft.Page):
|
|||
notes = interface.get_notes()
|
||||
|
||||
grades = interface.get_grades(1)
|
||||
create_grades_database(grades_list=grades, smstr=1)
|
||||
if grades: create_grades_database(grades_list=grades, smstr=1)
|
||||
grades = interface.get_grades(2)
|
||||
add_grades_to_database(grades_list=grades, smstr=2)
|
||||
if grades: add_grades_to_database(grades_list=grades, smstr=2)
|
||||
|
||||
|
||||
create_notes_database(notes_list=notes)
|
||||
if notes: create_notes_database(notes_list=notes)
|
||||
|
||||
|
||||
start, end = get_current_month_dates()
|
||||
|
||||
interface.get_timetable(from_=start, to=end)
|
||||
timetable = interface.get_timetable(from_=start, to=end)
|
||||
create_timetable_database(lesson_list=timetable)
|
||||
|
||||
def change_page(route):
|
||||
routes = {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from sqlmodel import *
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import date, datetime, timedelta
|
||||
from sqlalchemy import func
|
||||
from typing import Optional
|
||||
from sdk.src.models.lesson import LessonDate, Room, Subject, Teacher, Clazz, Change, Distribution, Substitution, TimeSlot
|
||||
|
||||
class Grades(SQLModel, table=True):
|
||||
id: int = Field(default=None, primary_key=True) # Add an auto-incrementing id
|
||||
|
@ -24,6 +25,67 @@ class Notes(SQLModel, table=True):
|
|||
creator: str
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class Timetable(SQLModel, table=True):
|
||||
id: int = Field(default=None, primary_key=True)
|
||||
MergeChangeId: int | None
|
||||
Event: str | None
|
||||
Date: date # Ensure this is a date object
|
||||
RoomId: int
|
||||
RoomCode: str
|
||||
TimeSlotId: int
|
||||
TimeSlotStart: str
|
||||
TimeSlotEnd: str
|
||||
TimeSlotDisplay: str
|
||||
TimeSlotPosition: int
|
||||
SubjectId: int
|
||||
SubjectName: str
|
||||
SubjectKod: str
|
||||
TeacherPrimaryId: int
|
||||
TeacherPrimaryName: str
|
||||
TeacherSecondaryId: int | None = None
|
||||
TeacherSecondaryName: str | None = None
|
||||
ChangeId: int | None = None
|
||||
ChangeType: int | None = None
|
||||
ClazzId: int
|
||||
ClazzDisplayName: str
|
||||
DistributionName: str | None = None
|
||||
PupilAlias: str | None = None
|
||||
Visible: bool
|
||||
SubstitutionDate: date | None = None
|
||||
|
||||
@staticmethod
|
||||
def from_lesson(lesson: "Lesson") -> "Timetable":
|
||||
return Timetable(
|
||||
MergeChangeId=lesson.MergeChangeId,
|
||||
Event=lesson.Event,
|
||||
Date=lesson.Date,
|
||||
RoomId=lesson.Room.Id,
|
||||
RoomCode=lesson.Room.Code,
|
||||
TimeSlotId=lesson.TimeSlot.Id,
|
||||
TimeSlotStart=lesson.TimeSlot.Start,
|
||||
TimeSlotEnd=lesson.TimeSlot.End,
|
||||
TimeSlotDisplay=lesson.TimeSlot.Display,
|
||||
TimeSlotPosition=lesson.TimeSlot.Position,
|
||||
SubjectId=lesson.Subject.Id,
|
||||
SubjectName=lesson.Subject.Name,
|
||||
SubjectKod=lesson.Subject.Kod,
|
||||
TeacherPrimaryId=lesson.TeacherPrimary.Id,
|
||||
TeacherPrimaryName=lesson.TeacherPrimary.DisplayName,
|
||||
TeacherSecondaryId=lesson.TeacherSecondary.Id if lesson.TeacherSecondary else None,
|
||||
TeacherSecondaryName=lesson.TeacherSecondary.DisplayName if lesson.TeacherSecondary else None,
|
||||
ChangeId=lesson.Change.Id if lesson.Change else None,
|
||||
ChangeType=lesson.Change.Type if lesson.Change else None,
|
||||
ClazzId=lesson.Clazz.Id,
|
||||
ClazzDisplayName=lesson.Clazz.DisplayName,
|
||||
DistributionName=lesson.Distribution.Name if lesson.Distribution else None,
|
||||
PupilAlias=lesson.PupilAlias,
|
||||
Visible=lesson.Visible,
|
||||
SubstitutionDate=lesson.Substitution.LessonDate.Date if lesson.Substitution else None,
|
||||
)
|
||||
|
||||
|
||||
|
||||
engine = create_engine("sqlite:///database.db")
|
||||
SQLModel.metadata.create_all(engine)
|
||||
|
||||
|
@ -46,6 +108,16 @@ def create_grades_database(grades_list, smstr):
|
|||
|
||||
session.add(grade_obj)
|
||||
session.commit()
|
||||
|
||||
def create_timetable_database(lesson_list):
|
||||
with Session(engine) as session:
|
||||
session.execute(delete(Timetable))
|
||||
for lesson in lesson_list:
|
||||
timetable_obj = Timetable.from_lesson(lesson)
|
||||
session.add(timetable_obj)
|
||||
session.commit()
|
||||
|
||||
|
||||
|
||||
def add_grades_to_database(grades_list, smstr):
|
||||
with Session(engine) as session:
|
||||
|
|
Loading…
Add table
Reference in a new issue