Archived
Private
Public Access
1
0

Added substitution date + default courses

This commit is contained in:
2023-05-01 12:54:05 +02:00
parent 0d83e9d75e
commit e55cbfe4c6
11 changed files with 98 additions and 6 deletions

View File

@@ -30,7 +30,9 @@ export class UnitsService {
public async getSubstitutionPlan(date: "today" | "tomorrow"): Promise<UnitsData> {
if (this.schools[this.iserv.userdata.domain] == undefined) return undefined;
const url = this.schools[this.iserv.userdata.domain][date];
return await firstValueFrom(this.client.get<UnitsData>(this.iserv.backend + "/units/substitution?url=" + url));
const data = await firstValueFrom(this.client.get<UnitsData>(this.iserv.backend + "/units/substitution?url=" + url));
data.date = new Date(data.date);
return data;
}
}

View File

@@ -11,6 +11,7 @@
}
export interface UnitsData {
date: Date;
notifications: string[];
substitutions: Substitution[];
}

View File

@@ -45,6 +45,7 @@
<ion-card>
<ion-card-header>
<ion-card-title>Vertretungsplan</ion-card-title>
<ion-card-subtitle>{{subsDate?.toLocaleDateString()}}</ion-card-subtitle>
</ion-card-header>
<ion-card-content>
<ion-card *ngIf="subs?.length == 0 && subs != undefined">

View File

@@ -5,5 +5,5 @@
}
.lesson-content {
overflow-x: scroll;
overflow-x: auto;
}

View File

@@ -26,6 +26,7 @@ export class HomePage implements OnInit {
public today: Date;
public dayName: string;
public subs: Substitution[];
public subsDate: Date;
public classData: {class: string, courses: Course[]};
public lessons: Lesson[];
@@ -43,7 +44,13 @@ export class HomePage implements OnInit {
this.unreadMails = (await mailPromise).filter(mail => !mail.read);
this.classData = await classPromise;
this.subs = (await subsPromise).substitutions.filter(subs => subs.classes.includes(this.classData.class));
let unitsData = await subsPromise;
if (this.dateIsPast(unitsData.date, new Date())) {
unitsData = await this.units.getSubstitutionPlan("tomorrow");
}
this.subs = unitsData.substitutions?.filter(subs => subs.classes.includes(this.classData.class));
this.subsDate = unitsData.date;
if (this.classData.class.startsWith("Q")) {
this.subs = this.subs.filter(subs => this.classData.courses.filter(course => course.id == subs.lesson).length > 0);
@@ -54,4 +61,8 @@ export class HomePage implements OnInit {
}
}
private dateIsPast(first: Date, second: Date): boolean {
return first.setHours(0, 0, 0, 0) <= second.setHours(0, 0, 0, 0);
}
}

View File

@@ -6,7 +6,8 @@
<ion-title>Stundenplan</ion-title>
<ion-buttons slot="end">
<ion-button (click)="onEditOrAdd()"><ion-icon ios="add-circle-outline" md="add-circle-sharp"></ion-icon></ion-button>
<ion-button *ngIf="courses?.length == 0 && showCourses" (click)="loadAllCourses(); defaultModal.present()"><ion-icon ios="arrow-down-circle-outline" md="arrow-down-circle-sharp" /></ion-button>
<ion-button (click)="onEditOrAdd()"><ion-icon ios="add-circle-outline" md="add-circle-sharp" /></ion-button>
<ion-modal #courseModal (willDismiss)="updateOrCreateCourse($event)">
<ng-template>
@@ -24,7 +25,7 @@
<ion-content class="ion-padding course-content">
<ion-item>
<ion-label position="stacked">Farbe</ion-label>
<ion-select aria-label="Farbe" interface="action-sheet" [value]="iserv.colors[0].val" #color>
<ion-select aria-label="Farbe" interface="action-sheet" [value]="currentCourse?.color || iserv.colors[0].val" #color>
<ion-select-option *ngFor="let color of iserv.colors" [value]="color.val">
{{color.name}}
</ion-select-option>
@@ -107,6 +108,50 @@
</ion-content>
</ng-template>
</ion-modal>
<ion-modal #defaultModal (didDismiss)="saveCourses($event)">
<ng-template>
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-button (click)="defaultModal.dismiss(null, 'cancel')">Abbrechen</ion-button>
</ion-buttons>
<ion-title>Kurse hinzufügen</ion-title>
<ion-buttons slot="end">
<ion-button (click)="defaultModal.dismiss(null, 'confirm')">Fertig</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content class="ion-padding course-content">
<ion-list>
<ion-item *ngFor="let course of allCourses; let i = index">
<ion-label>{{course.name}}</ion-label>
<ion-buttons slot="end">
<ion-button color="danger" (click)="allCourses.splice(i, 1)"><ion-icon ios="close-outline" md="close-sharp" /></ion-button>
</ion-buttons>
</ion-item>
<ion-item>
<ion-input
label="Kürzel"
label-placement="floating"
maxlength="2"
style="width: 70px"
#newShort
/>
<ion-input
label="Name"
label-placement="floating"
#newName
/>
<ion-buttons slot="end">
<ion-button (click)="addToAll(newName.value.toString(), newShort.value.toString()); newShort.value = ''; newName.value = ''"><ion-icon ios="add-outline" md="add-sharp" /></ion-button>
</ion-buttons>
</ion-item>
</ion-list>
</ion-content>
</ng-template>
</ion-modal>
</ion-buttons>
</ion-toolbar>
</ion-header>

View File

@@ -21,6 +21,7 @@ export class SchedulePage implements OnInit {
public currentCourse: Course;
public timetable: Timetable = {mon: [], tue: [], wed: [], thu: [], fri: []};
public currentLesson: {lesson: Lesson, day: string, time: number};
public allCourses: Course[];
@ViewChild('courseModal') courseModal: IonModal;
@ViewChild('tableModal') tableModal: IonModal;
@@ -103,4 +104,27 @@ export class SchedulePage implements OnInit {
return rooms[rooms.length - 1];
}
public loadAllCourses() {
this.allCourses = [];
for (let short of Object.keys(this.iserv.courseNames)) {
const name = this.iserv.courseNames[short];
this.allCourses.push({short, name, id: short, color: this.getRandomColor()});
}
}
public getRandomColor(): string {
return this.iserv.colors[Math.floor(Math.random() * this.iserv.colors.length)].val;
}
public addToAll(name: string, short: string) {
this.allCourses.push({short, name, id: short, color: this.getRandomColor()});
}
public saveCourses(event: any) {
if (event.detail.role != "confirm") return;
this.courses = this.allCourses;
delete this.allCourses;
localStorage.setItem("courses", JSON.stringify(this.courses));
}
}

View File

@@ -3,7 +3,7 @@
<ion-buttons slot="start">
<ion-menu-button></ion-menu-button>
</ion-buttons>
<ion-title>Vertretungsplan</ion-title>
<ion-title>Vertretungsplan {{data?.date.toLocaleDateString()}}</ion-title>
</ion-toolbar>
</ion-header>