Final Schedule - merge
This commit is contained in:
@ -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 {
|
||||
|
Reference in New Issue
Block a user