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,11 +1,20 @@
<!----------------------------------------------------
File: LessonRequests.vue
Author: William Karpinski
Scope: Extension Horaire
Description: Lessons Management Page for the secretary
----------------------------------------------------->
<script setup>
import { ref } from 'vue'
import i18n from '@/i18n.js'
import {formatDate,getHoursMinutes} from '../scheduleFunctions.js'
import {getAllSchedule, deleteLessonFromSchedule ,getSchedule, getCurriculumSchedule,addLessonToSchedule} from "@/rest/scheduleRest.js";
import {getLessons , createLesson, alterLesson , deleteLesson} from "@/rest/lessonSchedule.js"
import {getTeachers} from "@/rest/Users.js"
import { getcurriculum} from "@/rest/curriculum.js"
import {formatDate,getHoursMinutes, invertedFormatDate, createLessonEvent} from '../scheduleFunctions.js'
import {getAllSchedule, deleteLessonFromSchedule ,getSchedule, createSchedule} from "@/rest/scheduleRest.js";
import {getLessons, createLesson, alterLesson, deleteLesson} from "@/rest/lessonSchedule.js"
import {getTeachers} from "@/rest/Users.js"
import {getcurriculum, getAllCurriculums} from "@/rest/curriculum.js"
const trueSchedule = ref()
const schedule = ref();
@ -18,41 +27,22 @@ import i18n from '@/i18n.js'
const types = ["TP","TD","Course","Exam"];
const locals = ["A0B1","A1B1","A2B1","A0B2"]
const teachers = await getTeachers() ;
const allCurriculum = ref();
const courses = ref();
const createScheduleMod = ref(false);
const createMod = ref(false);
const deleteMod = ref(false);
const colors = {"TP":"rgb(36,175,255)","TD":"rgb(255,36,175)","Exam":"rgb(175,255,36)","Course":"rgb(255,36,175)"}
const currentDate = new Date();
const editElementID = ref()
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('-');
}
const editElementID = 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)))
function createLessonEvent(date,hour){
const str = date.concat(' ',hour);
return new Date(str);
}
const pattern = {
"course": null,
@ -80,7 +70,34 @@ function createLessonEvent(date,hour){
"local":null,
"lessonType":null,
}
/*
* Sets up allCurriculum to contain only the curriculums that don't have any schedule
*/
async function setCurriculum(){
const temp = await getAllCurriculums();
let isIn = false;
let toReturn =[] ;
for (let element in temp){
for (let item in allSchedules.value){
console.log(allSchedules.value[item])
console.log(temp[element])
if((allSchedules.value[item].curriculum.option == temp[element].option) && (allSchedules.value[item].curriculum.year == temp[element].year)){
isIn = true;
break;
}
}
if(!isIn){
toReturn.push(temp[element])
}
isIn = false;
}
allCurriculum.value = toReturn.slice();
}
const toModify = ref(Object.assign({}, pattern));
const lessonBuffer = ref(Object.assign({}, pattern));
const lessonCreatorBuffer = ref(Object.assign({},lessonCreator));
@ -104,6 +121,9 @@ async function setCourses(){
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses
}
/*
* Sort the lessons via a criteria
*/
function sortSchedule(){
schedule.value =trueSchedule.value.lessons;
if(filter.value =="Teacher"){
@ -157,7 +177,9 @@ async function setCourses(){
return matrix
}
/*
* Change the schedule filter
*/
async function changeSchedule(){
schedule.value =trueSchedule.value.lessons;
curriculum.value = trueSchedule.value.curriculum;
@ -203,6 +225,10 @@ async function setCourses(){
}
/*
* Modify a lesson
*/
async function patchLesson(lesson){
for (let element in toModify.value){
@ -246,44 +272,53 @@ async function patchLesson(lesson){
editElementID.value= '';
}
/*
* Create a new Schedule
*/
async function newSchedule(){
await createSchedule(curriculum.value);
allSchedules.value = await getAllSchedule();
setCurriculum();
}
</script>
<template>
<div class="body">
<div class="listTitle buttonGrid"v-if="!createMod" >
<button class="create" @click="createMod = true;">Create</button>
<button class="delete" @click="deleteMod = !deleteMod;">{{!deleteMod ? "Delete" : "Remove Delete"}}</button>
<div class="listTitle buttonGrid"v-if="!createMod && !createScheduleMod" >
<button class="create" @click="setCurriculum();createScheduleMod = true"> {{i18n("schedule.createSchedule")}}</button>
<button class="create" @click="createMod = true;">{{i18n("schedule.createLesson")}}</button>
<button class="delete" @click="deleteMod = !deleteMod;">{{!deleteMod ? i18n("schedule.deleteMod") : i18n("schedule.noDeleteMod")}}</button>
</div>
<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>
<option v-for="item in allSchedules" :value='item.curriculum'>{{item.curriculum.option}} - {{item.curriculum.year}}</option>
</select>
</div>
<div style="margin-bottom:20px;">
Lesson :
{{i18n("Course")}} :
<select v-if="curriculum != null" v-model="lessonBuffer.course">
<option v-for="item in courses" :value='item'>{{item.title}}</option>
</select>
</div>
<div style="margin-bottom:20px;">
Day:
{{i18n("day")}}:
<input type="date" :min="minDate" :max="maxDate" v-model="lessonBuffer.day">
</div>
<div style="margin-bottom:20px;">
Start:
{{i18n("start")}}:
<input v-model="lessonBuffer.lessonStart" type="time" min="08:00" max="18:00" required />
</div>
<div style="margin-bottom:20px;">
End:
{{i18n("end")}}:
<input v-model="lessonBuffer.lessonEnd" type="time" min="10:00" max="20:00" required />
</div>
<div style="margin-bottom:20px;">
Type:
Type:
<select v-model="lessonBuffer.lessonType">
<option v-for="item in types" :value='item'>{{item}}</option>
</select>
@ -293,27 +328,35 @@ async function patchLesson(lesson){
<select v-model="lessonBuffer.local">
<option v-for="item in locals" :value='item'>{{item}}</option>
</select>
</div>
<div></div>
<button class="create" @click="createMod=!createMod; newLesson();"> {{i18n("courses.confirm")}} </button>
<button style="float:right;" @click="createMod=!createMod">{{i18n("courses.back")}}</button>
</form>
</div>
<div v-if="createScheduleMod">
<form class="listElement" style="width:40%; margin:0 auto 0 auto;">
<div style="margin-bottom:20px;">
{{i18n("schedule")}} :
<select v-model="curriculum">
<option v-for="item in allCurriculum" :value='item'>{{item.option}} - {{item.year}}</option>
</select>
</div>
<button class="create" @click="createScheduleMod=!createScheduleMod ;newSchedule();"> {{i18n("courses.confirm")}} </button>
<button style="float:right;" @click="createScheduleMod=!createScheduleMod;">{{i18n("courses.back")}}</button>
</form>
</div>
<div v-if="!createMod">
<div v-if="!createMod && !createScheduleMod">
<select @change="changeSchedule()" v-model="trueSchedule">
<option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}}</option>
<option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}} - {{item.curriculum.year}}</option>
</select>
<select v-if="schedule != null" @change="subFilter = 'null'" v-model="filter">
<option :value ="null">No Filter</option>
<option v-for="item in filters" :value="item">{{item}}</option>
<option v-for="item in filters" :value="item">{{i18n(item.toString())}}</option>
</select>
<select @change="sortSchedule()" v-if="filter == 'Teacher'" v-model="subFilter">
<option :value ="null">No Filter</option>
@ -329,7 +372,7 @@ async function patchLesson(lesson){
</select>
</div>
<div v-if="!createMod " :key="element.lessonID" v-for="element in schedule" style="width:50%;margin-left:auto; margin-right:auto;" >
<div v-if="!createMod && !createScheduleMod" :key="element.lessonID" 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);">
{{i18n("courses.modify")}}
@ -385,8 +428,6 @@ async function patchLesson(lesson){
</div>
</div>
</div>
</template>
<style scoped>
.body {