1
0
forked from PGL/Clyde

Final Schedule - merge

This commit is contained in:
2024-04-21 18:10:00 +02:00
52 changed files with 1688 additions and 629 deletions

View File

@ -1,7 +1,14 @@
<!----------------------------------------------------
File: LessonRequests.vue
Author: William Karpinski
Scope: Extension Horaire
Description: Lessons Management Page for the teachers
----------------------------------------------------->
<script setup>
import { ref } from 'vue'
import i18n from '@/i18n.js'
import {formatDate,getHoursMinutes,sortByDate} from '../scheduleFunctions.js'
import {formatDate,invertedFormatDate,getHoursMinutes,sortByDate, createLessonEvent} from '../scheduleFunctions.js'
import {getOwnedLessons} from "@/rest/lessonSchedule.js";
import {getSelf} from "@/rest/Users.js";
import {createRequest} from "@/rest/LessonRequests.js"
@ -21,6 +28,14 @@ const currentDate = new Date();
const types = ["TP","TD","Course","Exam"];
const colors = {"TP":"rgb(36,175,255)","TD":"rgb(255,36,175)","Exam":"rgb(175,255,36)","Course":"rgb(255,36,175)"}
const courses = ref();
const maxDate = ref(invertedFormatDate(new Date([currentDate.getMonth()<7 ? currentDate.getFullYear() : (currentDate.getFullYear())+1],7,31)));
const minDate = ref(invertedFormatDate((new Date()).setDate(currentDate.getDate()+1)))
/*
* Checks if a lesson is in the future or not
*/
function inFuture(lesson){
let toCompare = new Date(lesson.lessonStart);
let current = new Date();
@ -31,28 +46,6 @@ function inFuture(lesson){
async function setCourses(){
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses
}
function invertedFormatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
function createLessonEvent(date,hour){
const str = date.concat(' ',hour);
return new Date(str);
}
const maxDate = ref(invertedFormatDate(new Date([currentDate.getMonth()<7 ? currentDate.getFullYear() : (currentDate.getFullYear())+1],7,31)));
const minDate = ref(invertedFormatDate((new Date()).setDate(currentDate.getDate()+1)))
const pattern = {
"lessonId":null,
@ -62,8 +55,6 @@ const pattern = {
"lessonEnd": null,
"lessonType": null,
}
const patternRequest ={
"user": user.regNo,
"state": "Pending",
@ -91,6 +82,9 @@ function setCreate(){
createMod.value = !createMod.value;
}
/*
* Constructs a request and posts it
*/
async function createLessonRequest(){
if(requestType.value === 0 || requestType.value === 1){
//modify
@ -121,7 +115,12 @@ async function createLessonRequest(){
editElementID.value = '';
}
/*
* Creates a request of a certain type
* 0 = CREATE REQUEST
* 1 = MODIFY REQUEST
* 2 = DELETE REQUEST
*/
async function askChanges(i){
requestType.value= i;
await createLessonRequest()
@ -135,33 +134,33 @@ async function askChanges(i){
<div v-if="createMod">
<form class="listElement" style="width:40%; margin:0 auto 0 auto;">
<div style="margin-bottom:20px;">
Schedule :
{{i18n("schedule")}} :
<select @change="setCourses()"v-model="curriculum">
<option v-for="item in allSchedules" :value='item.curriculum'>{{item.curriculum.option}}</option>
</select>
</div>
<div style="margin-bottom:20px;">
Lesson :
{{i18n("course")}}:
<select v-if="curriculum != null" v-model="toModify.course">
<option v-for="item in courses" :value='item.courseId'>{{item.title}}</option>
</select>
</div>
<div style="margin-bottom:20px;">
Day:
{{i18n("day")}}:
<input type="date" :min="minDate" :max="maxDate" v-model="toModify.day">
</div>
<div style="margin-bottom:20px;">
Start:
{{i18n("start")}}:
<input v-model="toModify.lessonStart" type="time" min="08:00" max="18:00" required />
</div>
<div style="margin-bottom:20px;">
End:
{{i18n("end")}}:
<input v-model="toModify.lessonEnd" type="time" min="10:00" max="20:00" required />
</div>
<div style="margin-bottom:20px;">
Type:
<select v-model="toModify.lessonType">
<option v-for="item in types" :value='item'>{{item}}</option>
<option v-for="item in types" :value='item'>{{i18n(item)}}</option>
</select>
</div>
@ -174,11 +173,11 @@ async function askChanges(i){
<button v-if="!createMod" @click="setCreate()" style="display:flex; margin:0 auto 0 auto;">Ask Create Request</button>
<button v-if="!createMod" @click="setCreate()" style="display:flex; margin:0 auto 0 auto;">{{i18n("schedule.askCreate")}}</button>
<div v-if="!createMod"v-for="element in schedule" style="width:50%;margin-left:auto; margin-right:auto;" >
<div v-if="editElementID !== element.lessonID" style ="padding:15px 15px 15px 15px;">
<button v-if="inFuture(element)" @click="editElementID = element.lessonID;setModify(element);">
Ask Changes
{{i18n("schedule.askChanges")}}
</button>
</div>
<div v-else>
@ -194,34 +193,34 @@ async function askChanges(i){
<div>{{getHoursMinutes(element.lessonStart)}}-{{getHoursMinutes(element.lessonEnd)}}
</div>
<div>{{element.local}}</div>
<div>{{element.lessonType}}</div>
<div>{{i18n(element.lessonType)}}</div>
</div>
<div v-else>
<div>{{element.course.title}}</div>
<div style="margin-bottom:20px;">
Day:
{{i18n("day")}}:
<input type="date" :min="minDate" :max="maxDate" v-model="toModify.day">
</div>
<div style="margin-bottom:20px;">
Start:
{{i18n("start")}}:
<input v-model="toModify.lessonStart" type="time" min="8:00" max="20:00"/>
</div>
<div style="margin-bottom:20px;">
End:
{{i18n("end")}}:
<input v-model="toModify.lessonEnd" type="time" min="10:00" max="20:00" required />
</div>
<div style="margin-bottom:20px;">
Type:
{{i18n("Type")}}:
<select v-model="toModify.lessonType">
<option v-for="item in types" :value='item'>{{item}}</option>
<option v-for="item in types" :value='item'>{{i18n(item)}}</option>
</select>
</div>
<div style="margin-bottom:20px;">
Local:
{{element.local}}
<div style="float:right;">
<button @click="askChanges(2)" class="delete"> ask Deletion </button>
<button @click="askChanges(2)" class="delete"> {{i18n("schedule.askDeletion")}} </button>
</div>
</div>
@ -260,7 +259,7 @@ input, select{
}
button{
font-size:15px;
height:50px;
height:auto;
width:100px;
border:none;
border-radius:20px;