Schedule management
This commit is contained in:
parent
adaa828810
commit
9112004326
@ -70,7 +70,8 @@ public class ApplicationsController {
|
|||||||
authorizedApps.add(Applications.StudentsList);}
|
authorizedApps.add(Applications.StudentsList);}
|
||||||
|
|
||||||
if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){
|
if (!authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)){
|
||||||
authorizedApps.add(Applications.UsersList);}
|
authorizedApps.add(Applications.UsersList);
|
||||||
|
authorizedApps.add(Applications.ManageSchedules);}
|
||||||
return authorizedApps;
|
return authorizedApps;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,6 @@ public class LessonController {
|
|||||||
public ResponseEntity<Iterable<HashMap<String,Object>>> getOwnedLessons(@RequestHeader("Authorization") String token){
|
public ResponseEntity<Iterable<HashMap<String,Object>>> getOwnedLessons(@RequestHeader("Authorization") String token){
|
||||||
System.out.println(authServ);
|
System.out.println(authServ);
|
||||||
if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)){
|
if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token)){
|
||||||
System.out.println("problem ici");
|
|
||||||
return new UnauthorizedResponse<>(null);}
|
return new UnauthorizedResponse<>(null);}
|
||||||
return new ResponseEntity<>(ProtectionService.lessonsWithoutPassword(lessonServ.findAllOwnedLesson(authServ.getUserFromToken(token))),HttpStatus.OK);
|
return new ResponseEntity<>(ProtectionService.lessonsWithoutPassword(lessonServ.findAllOwnedLesson(authServ.getUserFromToken(token))),HttpStatus.OK);
|
||||||
}
|
}
|
||||||
@ -58,7 +57,6 @@ public class LessonController {
|
|||||||
if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
|
if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
|
||||||
return new UnauthorizedResponse<>(null);
|
return new UnauthorizedResponse<>(null);
|
||||||
Lesson createdLesson = lessonServ.save(lesson);
|
Lesson createdLesson = lessonServ.save(lesson);
|
||||||
|
|
||||||
if(createdLesson==null)
|
if(createdLesson==null)
|
||||||
return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST);
|
return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST);
|
||||||
return new ResponseEntity<>(ProtectionService.lessonWithoutPassword(createdLesson), HttpStatus.OK);
|
return new ResponseEntity<>(ProtectionService.lessonWithoutPassword(createdLesson), HttpStatus.OK);
|
||||||
|
@ -12,6 +12,8 @@ import ovh.herisson.Clyde.Services.CurriculumService;
|
|||||||
import ovh.herisson.Clyde.Tables.Curriculum;
|
import ovh.herisson.Clyde.Tables.Curriculum;
|
||||||
import ovh.herisson.Clyde.Tables.Role;
|
import ovh.herisson.Clyde.Tables.Role;
|
||||||
import ovh.herisson.Clyde.Tables.Schedule;
|
import ovh.herisson.Clyde.Tables.Schedule;
|
||||||
|
import ovh.herisson.Clyde.Tables.ScheduleLesson;
|
||||||
|
import ovh.herisson.Clyde.Services.LessonService;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -20,6 +22,7 @@ import java.util.Map;
|
|||||||
public class ScheduleController {
|
public class ScheduleController {
|
||||||
|
|
||||||
private final ScheduleService scheduleServ;
|
private final ScheduleService scheduleServ;
|
||||||
|
private final LessonService lessonServ;
|
||||||
|
|
||||||
private final UserCurriculumService userCurriculumService;
|
private final UserCurriculumService userCurriculumService;
|
||||||
|
|
||||||
@ -28,12 +31,13 @@ public class ScheduleController {
|
|||||||
|
|
||||||
private final ScheduleLessonService scheduleLessonServ;
|
private final ScheduleLessonService scheduleLessonServ;
|
||||||
|
|
||||||
public ScheduleController(ScheduleService scheduleServ, UserCurriculumService userCurriculumService, AuthenticatorService authServ, ScheduleLessonService scheduleLessonServ, CurriculumService curriculumServ) {
|
public ScheduleController(ScheduleService scheduleServ, UserCurriculumService userCurriculumService, AuthenticatorService authServ, ScheduleLessonService scheduleLessonServ, CurriculumService curriculumServ,LessonService lessonServ) {
|
||||||
this.scheduleServ = scheduleServ;
|
this.scheduleServ = scheduleServ;
|
||||||
this.userCurriculumService = userCurriculumService;
|
this.userCurriculumService = userCurriculumService;
|
||||||
this.authServ = authServ;
|
this.authServ = authServ;
|
||||||
this.scheduleLessonServ = scheduleLessonServ;
|
this.scheduleLessonServ = scheduleLessonServ;
|
||||||
this.curriculumServ = curriculumServ;
|
this.curriculumServ = curriculumServ;
|
||||||
|
this.lessonServ = lessonServ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/schedule/{id}")
|
@GetMapping("/schedule/{id}")
|
||||||
@ -76,4 +80,18 @@ public class ScheduleController {
|
|||||||
return new UnauthorizedResponse<>(null);
|
return new UnauthorizedResponse<>(null);
|
||||||
return new ResponseEntity<>(scheduleServ.save(schedule),HttpStatus.OK);
|
return new ResponseEntity<>(scheduleServ.save(schedule),HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
@PostMapping("/schedule/{id}")
|
||||||
|
public ResponseEntity<String> postLessonToSchedule(@RequestHeader("Authorization") String token,
|
||||||
|
@RequestBody Long lessonId,
|
||||||
|
@PathVariable long id)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
|
||||||
|
return new UnauthorizedResponse<>(null);
|
||||||
|
|
||||||
|
if (!scheduleLessonServ.save(new ScheduleLesson( scheduleServ.findById(id), lessonServ.findById(lessonId))))
|
||||||
|
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
||||||
|
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,11 @@ public class ScheduleLessonService {
|
|||||||
this.scheduleRepo = scheduleRepo;
|
this.scheduleRepo = scheduleRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(ScheduleLesson scheduleLesson){
|
public boolean save(ScheduleLesson scheduleLesson){
|
||||||
|
if(scheduleLesson == null)
|
||||||
|
return false;
|
||||||
scheduleLessonRepo.save(scheduleLesson);
|
scheduleLessonRepo.save(scheduleLesson);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Schedule getScheduleByCurriculum(Curriculum curriculum){
|
public Schedule getScheduleByCurriculum(Curriculum curriculum){
|
||||||
|
@ -18,6 +18,9 @@ public enum Applications {
|
|||||||
ManageCourses,
|
ManageCourses,
|
||||||
UsersList,
|
UsersList,
|
||||||
|
|
||||||
|
//Secretary authorization
|
||||||
|
ManageSchedules,
|
||||||
|
|
||||||
// InscriptionService authorization
|
// InscriptionService authorization
|
||||||
Inscription,
|
Inscription,
|
||||||
StudentsList
|
StudentsList
|
||||||
|
@ -9,7 +9,7 @@ public class Lesson {
|
|||||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
private int lessonID;
|
private int lessonID;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne(fetch = FetchType.EAGER)
|
||||||
@JoinColumn(name= "Course")
|
@JoinColumn(name= "Course")
|
||||||
private Course course;
|
private Course course;
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ app.settings=Settings
|
|||||||
app.messages=Messages
|
app.messages=Messages
|
||||||
app.forum=Forum
|
app.forum=Forum
|
||||||
app.schedules=Schedules
|
app.schedules=Schedules
|
||||||
|
app.manageSchedules=Manage Schedules
|
||||||
app.inscription.requests=Inscription Requests
|
app.inscription.requests=Inscription Requests
|
||||||
app.manage.courses=Manage Courses
|
app.manage.courses=Manage Courses
|
||||||
app.language=Language
|
app.language=Language
|
||||||
|
@ -22,6 +22,7 @@ app.settings=Options
|
|||||||
app.messages=Messages
|
app.messages=Messages
|
||||||
app.forum=Forum
|
app.forum=Forum
|
||||||
app.schedules=Horaires
|
app.schedules=Horaires
|
||||||
|
app.manageSchedules=Gérer les horaires
|
||||||
app.inscription.requests=Demandes d'Inscription
|
app.inscription.requests=Demandes d'Inscription
|
||||||
app.manage.courses=Gérer les cours
|
app.manage.courses=Gérer les cours
|
||||||
app.language=Langue
|
app.language=Langue
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
let isnull= false;
|
let isnull= false;
|
||||||
|
|
||||||
for(const [key, value] of Object.entries(toAdd)){
|
for(const [key, value] of Object.entries(toAdd)){
|
||||||
console.log(toAdd.owner);
|
|
||||||
if(value === null){
|
if(value === null){
|
||||||
isnull=true;
|
isnull=true;
|
||||||
}
|
}
|
||||||
@ -64,9 +63,6 @@
|
|||||||
|
|
||||||
async function patchCourse(course){
|
async function patchCourse(course){
|
||||||
for (let element in toModify){
|
for (let element in toModify){
|
||||||
console.log(toModify,1)
|
|
||||||
console.log(toModify[element],2)
|
|
||||||
|
|
||||||
if (element =="owner" && (toModify[element].regNo != course.owner.regNo)){
|
if (element =="owner" && (toModify[element].regNo != course.owner.regNo)){
|
||||||
await alterCourse(course.courseId,{owner:toModify[element].regNo});
|
await alterCourse(course.courseId,{owner:toModify[element].regNo});
|
||||||
}
|
}
|
||||||
|
398
frontend/src/Apps/ManageSchedule.vue
Normal file
398
frontend/src/Apps/ManageSchedule.vue
Normal file
@ -0,0 +1,398 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import i18n from '@/i18n.js'
|
||||||
|
import {getDifferenceTime,lastDateOfMonth,formatDate,getFirstDay,sortByDate,matrixFromList,sundayToTheEnd,getMarginTop,getHoursMinutes, monthFromList} from '../scheduleFunctions.js'
|
||||||
|
import {getAllSchedule, getOwnSchedule, getCurriculumSchedule,addLessonToSchedule} from "@/rest/scheduleRest.js";
|
||||||
|
import {getLessons, getOwnedLessons, createLesson } from "@/rest/lessonSchedule.js"
|
||||||
|
import {isLogged, getSelf,getTeachers} from "@/rest/Users.js"
|
||||||
|
import {getAllCurriculums, getcurriculum} from "@/rest/curriculum.js"
|
||||||
|
import {getCourse} from "@/rest/courses.js"
|
||||||
|
|
||||||
|
const trueSchedule = ref()
|
||||||
|
const schedule = ref();
|
||||||
|
const lessonFinder = ref();
|
||||||
|
const curriculum = ref();
|
||||||
|
const allSchedules = await getAllSchedule();
|
||||||
|
const filter = ref("null");
|
||||||
|
const subFilter = ref("null");
|
||||||
|
const lesson = ref();
|
||||||
|
const filters = ["Type","Teacher","Course"];
|
||||||
|
const types = ["TP","TD","Course","Exam"];
|
||||||
|
const locals = ["A0B1","A1B1","A2B1","A0B2"]
|
||||||
|
const teachers = await getTeachers() ;
|
||||||
|
const courses = ref();
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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 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)))
|
||||||
|
console.log(minDate.value)
|
||||||
|
|
||||||
|
function createLessonEvent(date,hour){
|
||||||
|
const str = date.concat(' ',hour);
|
||||||
|
return new Date(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const pattern = {
|
||||||
|
"course": null,
|
||||||
|
"day":null,
|
||||||
|
"lessonStart": null,
|
||||||
|
"lessonEnd": null,
|
||||||
|
"lessonType": null,
|
||||||
|
"local": null,
|
||||||
|
"color": null,
|
||||||
|
}
|
||||||
|
|
||||||
|
const lessonBuffer = ref(Object.assign({}, pattern));
|
||||||
|
|
||||||
|
async function setCourses(){
|
||||||
|
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortSchedule(){
|
||||||
|
schedule.value =trueSchedule.value.lessons;
|
||||||
|
if(filter.value =="Teacher"){
|
||||||
|
schedule.value = sortByTeacher(schedule.value,subFilter.value);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(filter.value =="Type"){
|
||||||
|
schedule.value = sortByType(schedule.value,subFilter.value);
|
||||||
|
}
|
||||||
|
else if(filter.value =="Course"){
|
||||||
|
schedule.value = sortByCourse(schedule.value,subFilter.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByType(lessons,type){
|
||||||
|
if(type == null){
|
||||||
|
return lessons;
|
||||||
|
}
|
||||||
|
const matrix = [];
|
||||||
|
for (let element in lessons){
|
||||||
|
if(lessons[element].lessonType == type){
|
||||||
|
matrix.push(lessons[element])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matrix
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByCourse(lessons,course){
|
||||||
|
if(course == null){
|
||||||
|
return lessons;
|
||||||
|
}
|
||||||
|
const matrix = [];
|
||||||
|
for (let element in lessons){
|
||||||
|
if(lessons[element].course.courseId == course.courseId){
|
||||||
|
matrix.push(lessons[element])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matrix
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByTeacher(lessons, teacher){
|
||||||
|
if(teacher == null){
|
||||||
|
return lessons;
|
||||||
|
}
|
||||||
|
const matrix = [];
|
||||||
|
for (let element in lessons){
|
||||||
|
if(lessons[element].course.owner.regNo == teacher.regNo){
|
||||||
|
matrix.push(lessons[element])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matrix
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function changeSchedule(){
|
||||||
|
schedule.value =trueSchedule.value.lessons;
|
||||||
|
curriculum.value = trueSchedule.value.curriculum;
|
||||||
|
|
||||||
|
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses;
|
||||||
|
filter.value = "null";
|
||||||
|
subFilter.value = "null"
|
||||||
|
}
|
||||||
|
|
||||||
|
function findCreatedLesson(){
|
||||||
|
console.log(lessonFinder.value);
|
||||||
|
for(let element in lessonFinder.value){
|
||||||
|
console.log(lessonFinder.value[element].course.courseId, lessonFinder.value[element].local);
|
||||||
|
|
||||||
|
console.log(lessonBuffer.value.course.courseId, lessonBuffer.value.local)
|
||||||
|
|
||||||
|
if((lessonFinder.value[element].course.courseId ==lessonBuffer.value.course.courseId) && (lessonFinder.value[element].local == lessonBuffer.value.local) ){
|
||||||
|
return lessonFinder.value[element];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function newLesson(){
|
||||||
|
let isnull = false;
|
||||||
|
if (lessonBuffer.value.lessonType != null){
|
||||||
|
lessonBuffer.value.color = colors[lessonBuffer.value.lessonType];
|
||||||
|
for(let element in lessonBuffer.value){
|
||||||
|
if(lessonBuffer.value[element] == null){
|
||||||
|
isnull=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!isnull){
|
||||||
|
let course = await getCourse(lessonBuffer.value.course.courseId);
|
||||||
|
console.log(course)
|
||||||
|
let start = createLessonEvent(lessonBuffer.value.day,lessonBuffer.value.lessonStart)
|
||||||
|
let end = createLessonEvent(lessonBuffer.value.day,lessonBuffer.value.lessonEnd)
|
||||||
|
await createLesson(course,
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
lessonBuffer.value.lessonType,
|
||||||
|
lessonBuffer.value.color,lessonBuffer.value.local)
|
||||||
|
|
||||||
|
lessonFinder.value = await getLessons();
|
||||||
|
lesson.value = findCreatedLesson();
|
||||||
|
trueSchedule.value = await getCurriculumSchedule(curriculum.value.curriculumId)
|
||||||
|
await addLessonToSchedule(trueSchedule.value.scheduleId,lesson.value.lessonID)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lessonBuffer.value = Object.assign({}, pattern);
|
||||||
|
trueSchedule.value = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="body">
|
||||||
|
<div class="listTitle buttonGrid"v-if="!deleteMod && !createMod" >
|
||||||
|
<button class="create" @click="createMod = true;">Create</button>
|
||||||
|
<button class="delete" @click="deleteMod = true;">Delete</button>
|
||||||
|
</div>
|
||||||
|
<div v-if="createMod">
|
||||||
|
<form class="listElement" style="width:40%; margin:0 auto 0 auto;">
|
||||||
|
<div style="margin-bottom:20px;">
|
||||||
|
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 :
|
||||||
|
<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:
|
||||||
|
<input type="date" :min="minDate" :max="maxDate" v-model="lessonBuffer.day">
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:20px;">
|
||||||
|
Start:
|
||||||
|
<input v-model="lessonBuffer.lessonStart" type="time" min="08:00" max="18:00" required />
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:20px;">
|
||||||
|
End:
|
||||||
|
<input v-model="lessonBuffer.lessonEnd" type="time" min="10:00" max="20:00" required />
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:20px;">
|
||||||
|
Type:
|
||||||
|
<select v-model="lessonBuffer.lessonType">
|
||||||
|
<option v-for="item in types" :value='item'>{{item}}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:20px;">
|
||||||
|
Local:
|
||||||
|
<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="!deleteMod && !createMod">
|
||||||
|
<select @change="changeSchedule()" v-model="trueSchedule">
|
||||||
|
<option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}}</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>
|
||||||
|
</select>
|
||||||
|
<select @change="sortSchedule()" v-if="filter == 'Teacher'" v-model="subFilter">
|
||||||
|
<option :value ="null">No Filter</option>
|
||||||
|
<option v-for="item in teachers" :value=item>{{item.lastName}}</option>
|
||||||
|
</select>
|
||||||
|
<select @change="sortSchedule()" v-if="filter == 'Course'" v-model="subFilter">
|
||||||
|
<option :value ="null">No Filter</option>
|
||||||
|
<option v-for="item in courses" :value=item>{{item.title}}</option>
|
||||||
|
</select>
|
||||||
|
<select @change="sortSchedule()" v-if="filter == 'Type'" v-model="subFilter">
|
||||||
|
<option :value ="null">No Filter</option>
|
||||||
|
<option v-for="item in types" :value='item'>{{item}}</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div v-for="element in schedule" style="width:50%;margin-left:auto; margin-right:auto;" >
|
||||||
|
<div class="listElement">
|
||||||
|
<div class="containerElement">
|
||||||
|
<div>
|
||||||
|
{{element.course.title}}
|
||||||
|
</div>
|
||||||
|
<div>{{formatDate(element.lessonStart)}}</div>
|
||||||
|
<div>{{getHoursMinutes(element.lessonStart)}}-{{getHoursMinutes(element.lessonEnd)}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<style scoped>
|
||||||
|
.body {
|
||||||
|
width:100%;
|
||||||
|
margin-top:3.5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infosContainer {
|
||||||
|
min-width:350px;
|
||||||
|
padding-bottom:50px;
|
||||||
|
border:2px solid black;
|
||||||
|
font-size:25px;
|
||||||
|
color:white;
|
||||||
|
padding:20px;
|
||||||
|
background-color:rgb(50,50,50);
|
||||||
|
border-radius:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.containerElement{
|
||||||
|
justify-content:center;
|
||||||
|
display:grid;
|
||||||
|
grid-template-columns:38.8% 38.8% 22.4%;
|
||||||
|
grid-template-areas:
|
||||||
|
"name teacher credits";
|
||||||
|
column-gap:10px; }
|
||||||
|
|
||||||
|
.name {
|
||||||
|
grid-area:name;
|
||||||
|
align-self:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.teacher{
|
||||||
|
grid-area:teacher;
|
||||||
|
align-self:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credits{
|
||||||
|
grid-area:credits;
|
||||||
|
align-self:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.listElement{
|
||||||
|
min-width:625px;
|
||||||
|
border:2px solid black;
|
||||||
|
font-size:25px;
|
||||||
|
color:white;
|
||||||
|
padding:20px;
|
||||||
|
background-color:rgb(50,50,50);
|
||||||
|
border-radius:20px;
|
||||||
|
margin-bottom:10px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.modify{
|
||||||
|
font-size:25px;
|
||||||
|
padding:10px 10px 10px 10px;
|
||||||
|
background-color: rgb(239,60,168);
|
||||||
|
cursor: pointer;
|
||||||
|
border:none;
|
||||||
|
border-radius:15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, select{
|
||||||
|
padding:10px 10px 10px 10px;
|
||||||
|
font-size:25px;
|
||||||
|
cursor: pointer;
|
||||||
|
border:none;
|
||||||
|
border-radius:15px;
|
||||||
|
}
|
||||||
|
button{
|
||||||
|
font-size:15px;
|
||||||
|
height:50px;
|
||||||
|
width:100px;
|
||||||
|
border:none;
|
||||||
|
border-radius:20px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonGrid{
|
||||||
|
display:grid;
|
||||||
|
grid-template-columns: auto auto;
|
||||||
|
column-gap:50px;
|
||||||
|
grid-template-areas:
|
||||||
|
"create delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
.create{
|
||||||
|
grid-area:create;
|
||||||
|
|
||||||
|
background-color:rgb(0,200,0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete{
|
||||||
|
grid-area:delete;
|
||||||
|
background-color:rgb(200,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.listTitle{
|
||||||
|
min-width:380px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width:25%;
|
||||||
|
margin-left:auto;
|
||||||
|
margin-right:auto;
|
||||||
|
border:2px solid black;
|
||||||
|
font-size:25px;
|
||||||
|
color:white;
|
||||||
|
padding:20px;
|
||||||
|
background-color:rgb(50,50,50);
|
||||||
|
border-radius:20px;
|
||||||
|
margin-bottom:10px;
|
||||||
|
|
||||||
|
button:hover{
|
||||||
|
opacity:0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -22,6 +22,8 @@
|
|||||||
const ownSchedule = ref();
|
const ownSchedule = ref();
|
||||||
const filter = ref("null");
|
const filter = ref("null");
|
||||||
const subFilter = ref("null");
|
const subFilter = ref("null");
|
||||||
|
const focus = ref();
|
||||||
|
const focusLessons = ref();
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
if(log){
|
if(log){
|
||||||
@ -102,6 +104,18 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function lessonFocus(element){
|
||||||
|
focus.value = element;
|
||||||
|
var lessonsList = [];
|
||||||
|
for (let element in schedule.value){
|
||||||
|
if (schedule.value[element].course.courseId == focus.value.course.courseId){
|
||||||
|
lessonsList.push(schedule.value[element]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
focusLessons.value = lessonsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function dateOfMonth(i){
|
function dateOfMonth(i){
|
||||||
|
|
||||||
return new Date(currentDate.value.getFullYear(),currentDate.value.getMonth(),i);
|
return new Date(currentDate.value.getFullYear(),currentDate.value.getMonth(),i);
|
||||||
@ -109,7 +123,6 @@
|
|||||||
|
|
||||||
function sortSchedule(){
|
function sortSchedule(){
|
||||||
schedule.value =trueSchedule.value.lessons;
|
schedule.value =trueSchedule.value.lessons;
|
||||||
console.log(filter.value)
|
|
||||||
if(filter.value =="Teacher"){
|
if(filter.value =="Teacher"){
|
||||||
schedule.value = sortByTeacher(schedule.value,subFilter.value);
|
schedule.value = sortByTeacher(schedule.value,subFilter.value);
|
||||||
scheduleByWeek.value = sundayToTheEnd(matrixFromList(schedule.value,mondayOfWeek.value));
|
scheduleByWeek.value = sundayToTheEnd(matrixFromList(schedule.value,mondayOfWeek.value));
|
||||||
@ -136,6 +149,10 @@
|
|||||||
value = 1;
|
value = 1;
|
||||||
counter=0;
|
counter=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(focus.value != null){
|
||||||
|
lessonFocus(focus.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortByType(lessons,type){
|
function sortByType(lessons,type){
|
||||||
@ -161,7 +178,7 @@
|
|||||||
}
|
}
|
||||||
const matrix = [];
|
const matrix = [];
|
||||||
for (let element in lessons){
|
for (let element in lessons){
|
||||||
if(lessons[element].course.title == course.title){
|
if(lessons[element].course.courseId == course.courseId){
|
||||||
matrix.push(lessons[element])
|
matrix.push(lessons[element])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,6 +210,8 @@
|
|||||||
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses;
|
courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses;
|
||||||
filter.value = "null";
|
filter.value = "null";
|
||||||
subFilter.value = "null"
|
subFilter.value = "null"
|
||||||
|
focus.value = null;
|
||||||
|
focusLessons.value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeWeek(i){
|
function changeWeek(i){
|
||||||
@ -271,13 +290,14 @@
|
|||||||
<div v-if="scheduleByWeek != null " class="courseGrid">
|
<div v-if="scheduleByWeek != null " class="courseGrid">
|
||||||
<div class="dayCourse" v-for="element in scheduleByWeek">
|
<div class="dayCourse" v-for="element in scheduleByWeek">
|
||||||
<template v-for="i,index in element.length">
|
<template v-for="i,index in element.length">
|
||||||
<div class="course" v-bind:style="{background:element[index].color,
|
<div class="course" @click.native="lessonFocus(element[index])" v-bind:style="{background:element[index].color,
|
||||||
|
|
||||||
height:((getDifferenceTime(element[index].lessonEnd,element[index].lessonStart)/7.2)-0.5)+'%', top:((getMarginTop(element, index, index-1)/7.20))+'%'}">
|
height:((getDifferenceTime(element[index].lessonEnd,element[index].lessonStart)/7.2)-0.5)+'%', top:((getMarginTop(element, index, index-1)/7.20))+'%'}">
|
||||||
<div class="hourStart">
|
<div class="hourStart">
|
||||||
{{getHoursMinutes(element[index].lessonStart)}}
|
{{getHoursMinutes(element[index].lessonStart)}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="infos" v-bind:style="{}">
|
<div class="infos">
|
||||||
<p class="childInfos">{{element[index].course.title}}</p>
|
<p class="childInfos">{{element[index].course.title}}</p>
|
||||||
<p class="childInfos">{{element[index].local}}</p>
|
<p class="childInfos">{{element[index].local}}</p>
|
||||||
<p class="childInfos">{{element[index].lessonType}}</p>
|
<p class="childInfos">{{element[index].lessonType}}</p>
|
||||||
@ -313,7 +333,7 @@
|
|||||||
<div v-if="isAValue()" style="top:0; right:2%; border-radius:20%;color:rgb(200,200,200) ; position:absolute;z-index:50;">{{value-shift}}</div>
|
<div v-if="isAValue()" style="top:0; right:2%; border-radius:20%;color:rgb(200,200,200) ; position:absolute;z-index:50;">{{value-shift}}</div>
|
||||||
<div v-if="month != null" style="overflow-y:scroll; height:100%;" >
|
<div v-if="month != null" style="overflow-y:scroll; height:100%;" >
|
||||||
<template v-for="element in month[value-shift]">
|
<template v-for="element in month[value-shift]">
|
||||||
<div class="course" v-bind:style="{background:element.color, height:100+'%'}">
|
<div class="course" @click.native="lessonFocus(element)" v-bind:style="{background:element.color, height:100+'%'}">
|
||||||
|
|
||||||
<div class="hourStart">
|
<div class="hourStart">
|
||||||
{{getHoursMinutes(element.lessonStart)}}
|
{{getHoursMinutes(element.lessonStart)}}
|
||||||
@ -349,7 +369,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<template v-if="scheduleByWeek != null">
|
<template v-if="scheduleByWeek != null">
|
||||||
<div class="body" style="background-color:#353535;" >
|
<div class="body" style="background-color:#353535;" >
|
||||||
<div class="containerList" v-for="n,j in scheduleByWeek[index].length">
|
<div class="containerList"v-for="n,j in scheduleByWeek[index].length" @click.native="lessonFocus(scheduleByWeek[index][j])" >
|
||||||
<div class="colorList" v-bind:style="{background:scheduleByWeek[index][j].color}"></div>
|
<div class="colorList" v-bind:style="{background:scheduleByWeek[index][j].color}"></div>
|
||||||
<div class="hoursList">{{ getHoursMinutes(scheduleByWeek[index][j].lessonStart)}}-{{getHoursMinutes(scheduleByWeek[index][j].lessonEnd)}}</div>
|
<div class="hoursList">{{ getHoursMinutes(scheduleByWeek[index][j].lessonStart)}}-{{getHoursMinutes(scheduleByWeek[index][j].lessonEnd)}}</div>
|
||||||
<div class="titleList">{{scheduleByWeek[index][j].course.title}}</div>
|
<div class="titleList">{{scheduleByWeek[index][j].course.title}}</div>
|
||||||
@ -374,7 +394,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<template v-if="scheduleByWeek != null">
|
<template v-if="scheduleByWeek != null">
|
||||||
<div class="body" style="background-color:#353535;" >
|
<div class="body" style="background-color:#353535;" >
|
||||||
<div class="containerList" v-for="n,j in month[i].length">
|
<div class="containerList" v-for="n,j in month[i].length" @click.native="lessonFocus( month[i][j])">
|
||||||
<div class="colorList" v-bind:style="{background:month[i][j].color}"></div>
|
<div class="colorList" v-bind:style="{background:month[i][j].color}"></div>
|
||||||
<div class="hoursList">{{ getHoursMinutes(month[i][j].lessonStart)}}-{{getHoursMinutes(month[i][j].lessonEnd)}}</div>
|
<div class="hoursList">{{ getHoursMinutes(month[i][j].lessonStart)}}-{{getHoursMinutes(month[i][j].lessonEnd)}}</div>
|
||||||
<div class="titleList">{{month[i][j].course.title}}</div>
|
<div class="titleList">{{month[i][j].course.title}}</div>
|
||||||
@ -391,11 +411,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="options">
|
<div class="options">
|
||||||
|
<div class="settings">
|
||||||
|
<div class="body" style="background-color:rgb(50,50,50);margin:5% 0 5% 0;">Settings</div>
|
||||||
<select @change="changeSchedule()" v-model="trueSchedule">
|
<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}}</option>
|
||||||
</select>
|
</select>
|
||||||
@ -421,9 +439,27 @@
|
|||||||
<option :value ="null">No Filter</option>
|
<option :value ="null">No Filter</option>
|
||||||
<option v-for="item in types" :value='item'>{{item}}</option>
|
<option v-for="item in types" :value='item'>{{item}}</option>
|
||||||
</select>
|
</select>
|
||||||
|
</div>
|
||||||
|
<div v-if="focus != null" class="moreInfos">
|
||||||
|
<div class="body" style="background-color:rgb(50,50,50); height:10%; font-size:2em;" >More infos</div>
|
||||||
|
<div class="body" :style="{background:focus.color,height:auto,fontSize:1.2+'em', alignItems:center}">
|
||||||
|
{{focus.course.title}}</div>
|
||||||
|
|
||||||
|
<div class="body" style="background-color:rgb(50,50,50);">Teacher(s)</div>
|
||||||
|
<div class="body" style="background-color:#484848;">
|
||||||
|
<div>{{focus.course.owner.lastName}}</div>
|
||||||
|
<div v-for="element in focus.course.owner.assistants">
|
||||||
|
{{element.lastName}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="body" style="background-color:rgb(50,50,50);">Lessons</div>
|
||||||
|
<div class="body" style="background-color:#484848;"v-for="lesson in focusLessons">
|
||||||
|
{{ getHoursMinutes(lesson.lessonStart)}}-{{getHoursMinutes(lesson.lessonEnd)}}
|
||||||
|
{{ lesson.local}}
|
||||||
|
{{lesson.lessonType}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -448,13 +484,36 @@
|
|||||||
background-color:rgba(255,255,255,0.1);
|
background-color:rgba(255,255,255,0.1);
|
||||||
}
|
}
|
||||||
.options{
|
.options{
|
||||||
display:flex;
|
display:grid;
|
||||||
flex-direction:column;
|
|
||||||
border-radius:20px;
|
border-radius:20px;
|
||||||
grid-area:options;
|
grid-area:options;
|
||||||
background-color:rgba(255,255,255,0.1);
|
background-color:rgba(255,255,255,0.1);
|
||||||
width:100%;
|
width:100%;
|
||||||
height:85vh;
|
height:85vh;
|
||||||
|
|
||||||
|
grid-template-rows:30% 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings{
|
||||||
|
display:flex;
|
||||||
|
flex-direction:column;
|
||||||
|
width:80%;
|
||||||
|
margin:0 auto 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.settings select,.settings button{
|
||||||
|
margin-top:2%;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.moreInfos{
|
||||||
|
width:90%;
|
||||||
|
display:flex;
|
||||||
|
flex-direction:column;
|
||||||
|
margin:0 auto 0 auto;
|
||||||
|
overflow-y:scroll;
|
||||||
|
overflow-x:hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table{
|
.table{
|
||||||
@ -607,9 +666,10 @@
|
|||||||
.body {
|
.body {
|
||||||
color:white;
|
color:white;
|
||||||
margin-top:2%;
|
margin-top:2%;
|
||||||
width:100%;
|
width:98%;
|
||||||
border:2px solid black;
|
border:2px solid black;
|
||||||
border-radius:9px;
|
border-radius:9px;
|
||||||
|
text-align:center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,9 +10,11 @@ import Courses from "@/Apps/ManageCourses.vue"
|
|||||||
import Users from "@/Apps/UsersList.vue"
|
import Users from "@/Apps/UsersList.vue"
|
||||||
import Students from "@/Apps/StudentsList.vue"
|
import Students from "@/Apps/StudentsList.vue"
|
||||||
import Schedule from "@/Apps/Schedule.vue"
|
import Schedule from "@/Apps/Schedule.vue"
|
||||||
|
import ManageSchedule from "@/Apps/ManageSchedule.vue"
|
||||||
|
|
||||||
const apps = {
|
const apps = {
|
||||||
'/schedule': Schedule,
|
'/schedule': Schedule,
|
||||||
|
'/manage-schedule': ManageSchedule,
|
||||||
'/login': LoginPage,
|
'/login': LoginPage,
|
||||||
'/inscription': Inscription,
|
'/inscription': Inscription,
|
||||||
'/profil': Profil,
|
'/profil': Profil,
|
||||||
@ -26,10 +28,12 @@ const appsList = {
|
|||||||
'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
|
'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
|
||||||
'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
|
'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
|
||||||
'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
|
'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
|
||||||
|
'ManageSchedules': { path: '#/manage-schedule', icon: 'fa-calendar-days', text: i18n("app.manageSchedules")},
|
||||||
'Inscription': { path: '#/inscription', icon: 'fa-users', text: i18n("app.inscription.requests") },
|
'Inscription': { path: '#/inscription', icon: 'fa-users', text: i18n("app.inscription.requests") },
|
||||||
'ManageCourses': { path: '#/manage-courses', icon: 'fa-book', text: i18n("app.manage.courses") },
|
'ManageCourses': { path: '#/manage-courses', icon: 'fa-book', text: i18n("app.manage.courses") },
|
||||||
'StudentsList':{ path: '#/students-list',icon: 'fa-users',text: i18n("app.studentList")},
|
'StudentsList':{ path: '#/students-list',icon: 'fa-users',text: i18n("app.studentList")},
|
||||||
'UsersList':{ path: '#/users-list',icon: 'fa-users',text: i18n("app.users")},
|
'UsersList':{ path: '#/users-list',icon: 'fa-users',text: i18n("app.users")},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentPath = ref(window.location.hash)
|
const currentPath = ref(window.location.hash)
|
||||||
|
@ -3,8 +3,8 @@ import {restGet,restPatch,restPost,restDelete} from "@/rest/restConsumer.js";
|
|||||||
/**
|
/**
|
||||||
* Create a new lesson
|
* Create a new lesson
|
||||||
*/
|
*/
|
||||||
export async function createLesson(course, start, end, color, local){
|
export async function createLesson(course, lessonStart, lessonEnd, lessonType, color, local){
|
||||||
return restPost("/lesson", {course: course , start: start, end: end, color : color , local : local} )
|
return restPost("/lesson", {course: course , lessonStart: lessonStart, lessonEnd: lessonEnd,lessonType:lessonType ,color : color , local : local} )
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,5 +62,5 @@ export async function getOwnedLessons(){
|
|||||||
* - assistants: should be a list and will replace all assistants
|
* - assistants: should be a list and will replace all assistants
|
||||||
*/
|
*/
|
||||||
export async function alterLesson(id, changes){
|
export async function alterLesson(id, changes){
|
||||||
return restPatch("/course/" + id, changes);
|
return restPatch("/lesson/" + id, changes);
|
||||||
}
|
}
|
||||||
|
@ -15,3 +15,7 @@ export async function createSchedule(curriculum) {
|
|||||||
export async function getCurriculumSchedule(id){
|
export async function getCurriculumSchedule(id){
|
||||||
return restGet('/schedule/curriculum/' + id)
|
return restGet('/schedule/curriculum/' + id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function addLessonToSchedule(id,lessonId){
|
||||||
|
return restPost('/schedule/' + id, lessonId)
|
||||||
|
}
|
||||||
|
@ -67,8 +67,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function monthFromList(list,month){
|
export function monthFromList(list,month){
|
||||||
console.log(month)
|
|
||||||
console.log(list)
|
|
||||||
const beginning = getFirstDay(month);
|
const beginning = getFirstDay(month);
|
||||||
const matrix = new Array(lastDateOfMonth(month))
|
const matrix = new Array(lastDateOfMonth(month))
|
||||||
for (let i = 0; i < matrix.length; i++) {
|
for (let i = 0; i < matrix.length; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user