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()
|
notes = interface.get_notes()
|
||||||
|
|
||||||
grades = interface.get_grades(1)
|
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)
|
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()
|
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):
|
def change_page(route):
|
||||||
routes = {
|
routes = {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from sqlmodel import *
|
from sqlmodel import *
|
||||||
from datetime import datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from sdk.src.models.lesson import LessonDate, Room, Subject, Teacher, Clazz, Change, Distribution, Substitution, TimeSlot
|
||||||
|
|
||||||
class Grades(SQLModel, table=True):
|
class Grades(SQLModel, table=True):
|
||||||
id: int = Field(default=None, primary_key=True) # Add an auto-incrementing id
|
id: int = Field(default=None, primary_key=True) # Add an auto-incrementing id
|
||||||
|
@ -24,6 +25,67 @@ class Notes(SQLModel, table=True):
|
||||||
creator: str
|
creator: str
|
||||||
created_at: datetime
|
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")
|
engine = create_engine("sqlite:///database.db")
|
||||||
SQLModel.metadata.create_all(engine)
|
SQLModel.metadata.create_all(engine)
|
||||||
|
|
||||||
|
@ -47,6 +109,16 @@ def create_grades_database(grades_list, smstr):
|
||||||
session.add(grade_obj)
|
session.add(grade_obj)
|
||||||
session.commit()
|
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):
|
def add_grades_to_database(grades_list, smstr):
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
for grade in grades_list:
|
for grade in grades_list:
|
||||||
|
|
Loading…
Add table
Reference in a new issue