1
0
Fork 0
forked from Fuji/Fuji

Refactor sync and database functions to handle empty results and add timetable database creation

This commit is contained in:
Maarceeli 2025-04-16 11:03:46 +02:00
parent 75db8785a5
commit a09338cde4
2 changed files with 78 additions and 5 deletions

View file

@ -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 = {

View file

@ -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: