diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java index 40b1e0f..b11a075 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java @@ -76,7 +76,7 @@ public class CourseController { { if (authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)) return new UnauthorizedResponse<>(null); - + System.out.println(course.getOwner().getRegNo()); Course createdCourse = courseServ.save(course); if (createdCourse == null) return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST); diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java index 63d7e24..8074abd 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LessonController.java @@ -52,11 +52,14 @@ public class LessonController { @PostMapping("/lesson") - public ResponseEntity<HashMap<String, Object>> postLesson(@RequestHeader("Authorization")String token, - @RequestBody Lesson lesson){ + public ResponseEntity<HashMap<String, Object>> postLesson(@RequestHeader("Authorization") String token, + @RequestBody Map<String, Object> lessonInfos){ if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token)) return new UnauthorizedResponse<>(null); - Lesson createdLesson = lessonServ.save(lesson); + + + Lesson lesson = lessonServ.createLesson(lessonInfos); + Lesson createdLesson = lessonServ.save(lesson); if(createdLesson==null) return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST); return new ResponseEntity<>(ProtectionService.lessonWithoutPassword(createdLesson), HttpStatus.OK); @@ -68,8 +71,22 @@ public class LessonController { @PathVariable long id){ if(authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) return new UnauthorizedResponse<>(null); - if(!lessonServ.modifyData(id, updates, authServ.getUserFromToken(token).getRole())) + if(!lessonServ.modifyData(id, updates)){ return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } return new ResponseEntity<>(HttpStatus.OK); } + + @DeleteMapping("lesson/{id}") + public ResponseEntity<String> deleteLesson(@RequestHeader("Authorization") String token, + @PathVariable Long id){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token)) + return new UnauthorizedResponse<>(null); + Lesson toDelete = lessonServ.findById(id); + if(toDelete == null) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + lessonServ.delete(toDelete); + return new ResponseEntity<>(HttpStatus.OK); + + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java index 835ddfe..5a69a82 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java @@ -107,7 +107,7 @@ public class MockController { //Schedule part - Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 01 2024 08:15", "Mon Apr 01 2024 10:15","rgb(0,50,100)","A0B2","Course"); + Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 22 2024 08:15", "Mon Apr 22 2024 10:15","rgb(0,50,100)","A0B2","Course"); Lesson lesson_0_chemistry1 = new Lesson(chemistry1, "Wed Mar 27 2024 08:15", "Wed Mar 27 2024 09:15","rgb(100,50,0)","A0B2","TP"); Lesson lesson_0_psycho1 = new Lesson(psycho1, "Sun Mar 24 2024 10:30 ","Sun Mar 24 2024 12:30 ","rgb(100,50,100)", "A0B2","TD"); Lesson lesson_1_progra1 = new Lesson(progra1, "Mon Apr 02 2024 13:30", "Mon Apr 02 2024 15:30","rgb(0,50,100)","A0B2","TP"); diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java index 6cfaa01..4c21684 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScheduleController.java @@ -1,5 +1,6 @@ package ovh.herisson.Clyde.EndPoints; +import ch.qos.logback.core.net.SyslogOutputStream; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -9,10 +10,7 @@ import ovh.herisson.Clyde.Services.ScheduleLessonService; import ovh.herisson.Clyde.Services.ScheduleService; import ovh.herisson.Clyde.Services.UserCurriculumService; import ovh.herisson.Clyde.Services.CurriculumService; -import ovh.herisson.Clyde.Tables.Curriculum; -import ovh.herisson.Clyde.Tables.Role; -import ovh.herisson.Clyde.Tables.Schedule; -import ovh.herisson.Clyde.Tables.ScheduleLesson; +import ovh.herisson.Clyde.Tables.*; import ovh.herisson.Clyde.Services.LessonService; import java.util.Map; @@ -94,4 +92,16 @@ public class ScheduleController { return new ResponseEntity<>(HttpStatus.OK); } + @DeleteMapping("/schedule/lesson/{id}") + public ResponseEntity<String> deleteLessonFromSchedule(@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.delete(lessonId)) + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java index 81fec17..db1b0c2 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScheduleLessonRepository.java @@ -1,5 +1,7 @@ package ovh.herisson.Clyde.Repositories; +import jakarta.transaction.Transactional; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.Curriculum; @@ -20,4 +22,10 @@ public interface ScheduleLessonRepository extends CrudRepository<ScheduleLesson, @Query("select distinct sl.lesson from ScheduleLesson sl where sl.schedule = ?1") Iterable<Lesson> findLessonBySchedule(Schedule schedule); + + @Modifying + @Transactional + @Query("delete from ScheduleLesson sl where sl.lesson =?1") + void delete(Lesson lesson); + } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java index 8637a45..e873699 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/LessonService.java @@ -8,6 +8,7 @@ import ovh.herisson.Clyde.Tables.Lesson; import ovh.herisson.Clyde.Tables.Role; import ovh.herisson.Clyde.Tables.User; +import java.lang.reflect.GenericSignatureFormatError; import java.util.ArrayList; import java.util.Map; @@ -38,15 +39,11 @@ public class LessonService { return toReturn; } - public boolean modifyData(long id, Map<String ,Object> updates, Role role){ - Lesson target = lessonRepo.findById(id); + public Lesson createLesson(Map<String,Object> lessonInfos) { + Lesson target = new Lesson(); - if(target == null || role != Role.Secretary) - return false; - - - for (Map.Entry<String , Object> entry: updates.entrySet()){ - switch (entry.getKey()){ + for (Map.Entry<String, Object> entry : lessonInfos.entrySet()) { + switch (entry.getKey()) { case "lessonStart": target.setLessonStart((String) entry.getValue()); break; @@ -61,6 +58,40 @@ public class LessonService { case "lessonType": target.setLessonType((String) entry.getValue()); break; + case "courseId": + target.setCourse(courseRepo.findById((int) entry.getValue())); + } + + } + return target; + } + + public boolean modifyData(long id, Map<String ,Object> updates){ + Lesson target = lessonRepo.findById(id); + System.out.println(target); + + if(target == null) + return false; + + + System.out.println("test"); + System.out.println(updates.entrySet()); + + for (Map.Entry<String , Object> entry: updates.entrySet()){ + System.out.println(entry); + switch (entry.getKey()){ + case "lessonStart": + target.setLessonStart((String) entry.getValue()); + break; + case "lessonEnd": + target.setLessonEnd((String) entry.getValue()); + break; + case "local": + target.setLocal((String) entry.getValue()); + break; + case "lessonType": + target.setLessonType((String) entry.getValue()); + break; } } lessonRepo.save(target); diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java index 05d5eb7..0fde2fe 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ScheduleLessonService.java @@ -30,6 +30,14 @@ public class ScheduleLessonService { return true; } + public boolean delete(long lessonId){ + if(lessonId == 0) + return false; + scheduleLessonRepo.delete(lessonRepo.findById(lessonId)); + return true; + } + + public Schedule getScheduleByCurriculum(Curriculum curriculum){ return scheduleLessonRepo.findScheduleByCurriculum(curriculum); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java index df0421d..af6ac77 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java @@ -8,7 +8,7 @@ import org.hibernate.annotations.OnDeleteAction; public class Course { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private int courseID; + private int courseId; private int credits; private String title; @@ -26,8 +26,11 @@ public class Course { public Course() {} public int getCourseID() { - return courseID; + return courseId; } + public void setCourseID(int courseId){ + this.courseId = courseId; + } public int getCredits() { return credits; diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java index 67465a8..af75921 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Lesson.java @@ -1,6 +1,8 @@ package ovh.herisson.Clyde.Tables; import jakarta.persistence.*; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @@ -10,7 +12,8 @@ public class Lesson { private int lessonID; @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name= "Course") + @OnDelete(action = OnDeleteAction.SET_NULL) + @JoinColumn(name = "Course") private Course course; private String lessonStart; diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java index 993c38c..c34222e 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Schedule.java @@ -13,6 +13,7 @@ public class Schedule { @OneToOne @JoinColumn(name = "Curriculum") + @OnDelete(action = OnDeleteAction.SET_NULL) private Curriculum curriculum; public Schedule(Curriculum curriculum){ diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java index 3b7b6a4..895cef1 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScheduleLesson.java @@ -14,10 +14,12 @@ public class ScheduleLesson{ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "Schedule") + @OnDelete(action = OnDeleteAction.SET_NULL) private Schedule schedule; @ManyToOne(fetch = FetchType.EAGER) + @OnDelete(action = OnDeleteAction.SET_NULL) @JoinColumn(name = "Lesson") private Lesson lesson; diff --git a/frontend/src/Apps/ManageCourses.vue b/frontend/src/Apps/ManageCourses.vue index a9f1f66..44cd187 100644 --- a/frontend/src/Apps/ManageCourses.vue +++ b/frontend/src/Apps/ManageCourses.vue @@ -155,11 +155,11 @@ </div> <div class="containerElement"v-else> <input style="max-width:200px;" class="name" v-model="toModify.title"> - <select v-if="self.role === 'Secretary'" style="max-width:200px;" class="teacher" v-model="toModify.owner"> + <select v-if="self.role != 'Secretary'" style="max-width:200px;" class="teacher" v-model="toModify.owner"> <option v-for="(item,index) in profList" :value='item'>{{item.lastName}}</option> </select> <div v-else class="teacher">{{item.owner.lastName}}</div> - <input v-if="self.role==='Secretary'"style="max-width:100px;"class="credits" v-model="toModify.credits"> + <input v-if="self.role !='Secretary'"style="max-width:100px;"class="credits" v-model="toModify.credits"> <div v-else class="credits">{{i18n("Credits")}}:{{item.credits}}</div> </div> </div> diff --git a/frontend/src/Apps/ManageSchedule.vue b/frontend/src/Apps/ManageSchedule.vue index 905e6d7..dcfa93b 100644 --- a/frontend/src/Apps/ManageSchedule.vue +++ b/frontend/src/Apps/ManageSchedule.vue @@ -1,18 +1,17 @@ <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" - + 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" + const trueSchedule = ref() const schedule = ref(); const lessonFinder = ref(); const curriculum = ref(); - const allSchedules = await getAllSchedule(); + const allSchedules = ref(await getAllSchedule()); const filter = ref("null"); const subFilter = ref("null"); const lesson = ref(); @@ -28,7 +27,11 @@ import i18n from '@/i18n.js' 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 editItem(id){ + editElementID.value = id; +} function invertedFormatDate(date) { var d = new Date(date), @@ -47,7 +50,6 @@ function invertedFormatDate(date) { 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); @@ -66,7 +68,41 @@ function createLessonEvent(date,hour){ "color": null, } + const lessonCreator = { + "courseId" : null, + "lessonStart":null, + "lessonEnd":null, + "lessonType":null, + "local":null, + "color":null, + } + + const patternModify = { + "day": null, + "lessonStart": null, + "lesssonEnd": null, + "local":null, + "lessonType":null, + } + +const toModify = ref(Object.assign({}, pattern)); const lessonBuffer = ref(Object.assign({}, pattern)); + const lessonCreatorBuffer = ref(Object.assign({},lessonCreator)); + + + function setModify(lesson){ + toModify.value.day = invertedFormatDate(new Date(lesson.lessonStart)); + toModify.value.lessonStart = getHoursMinutes(lesson.lessonStart); + toModify.value.lessonEnd = getHoursMinutes(lesson.lessonEnd); + toModify.value.local = lesson.local + toModify.value.lessonType = lesson.lessonType + } + + function inFuture(lesson){ + let toCompare = new Date(lesson.lessonStart); + let current = new Date(); + return (current < toCompare) +} async function setCourses(){ courses.value = (await getcurriculum(curriculum.value.curriculumId)).courses @@ -136,12 +172,7 @@ async function setCourses(){ } 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]; } @@ -160,35 +191,86 @@ async function setCourses(){ } } 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) + + lessonCreatorBuffer.value.lessonStart = start; + lessonCreatorBuffer.value.lessonEnd = end; + lessonCreatorBuffer.value.color = lessonBuffer.value.color; + lessonCreatorBuffer.value.lessonType =lessonBuffer.value.lessonType; + lessonCreatorBuffer.value.local = lessonBuffer.value.local; + lessonCreatorBuffer.value.courseId = lessonBuffer.value.course.courseId; + + await createLesson(lessonCreatorBuffer.value); 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); + lessonFinder.value = null; + lessonCreatorBuffer.value = Object.assign({},lessonCreator) trueSchedule.value = null; - } + } + +async function patchLesson(lesson){ + + for (let element in toModify.value){ + if (element =="lessonType" && (toModify.value[element] != lesson[element])){ + await alterLesson(lesson.lessonID,{lessonType:toModify.value[element]}); + } + if (element =="local" && (toModify.value[element] != lesson[element])){ + await alterLesson(lesson.lessonID,{local:toModify.value[element]}); + } + if (element =="lessonStart" && (toModify.value[element] != lesson[element])){ + await alterLesson(lesson.lessonID,{lessonStart:createLessonEvent(toModify.value.day,toModify.value[element]) +}); + } + if (element =="lessonEnd" && (toModify.value[element] != lesson[element])){ + await alterLesson(lesson.lessonID,{lessonEnd:createLessonEvent(toModify.value.day,toModify.value[element]) +}); + } + if(element == "day" && (toModify.value[element] != invertedFormatDate(new Date(lesson.lessonStart))) ){ + + if(toModify.value.lessonStart == lesson.lessonStart){ + await alterLesson(lesson.lessonID,{lessonStart:createLessonEvent(toModify.value.day,lesson.lessonStart) + });} + if(toModify.value.lessonEnd == lesson.lessonEnd){ + await alterLesson(lesson.lessonID,{lessonStart:createLessonEvent(toModify.value.day,lesson.lessonStart)}); + } + } + } + toModify.value= Object.assign({},patternModify); + trueSchedule.value = await getSchedule(trueSchedule.value.scheduleId); + schedule.value =trueSchedule.value.lessons; + editElementID.value= ''; +} + + + + async function removeLesson() { + await deleteLessonFromSchedule(trueSchedule.value.scheduleId, editElementID.value) + await deleteLesson(editElementID.value); + trueSchedule.value = await getSchedule(trueSchedule.value.scheduleId); + schedule.value =trueSchedule.value.lessons; + editElementID.value= ''; + +} </script> <template> <div class="body"> - <div class="listTitle buttonGrid"v-if="!deleteMod && !createMod" > + <div class="listTitle buttonGrid"v-if="!createMod" > <button class="create" @click="createMod = true;">Create</button> - <button class="delete" @click="deleteMod = true;">Delete</button> + <button class="delete" @click="deleteMod = !deleteMod;">{{!deleteMod ? "Delete" : "Remove Delete"}}</button> + </div> <div v-if="createMod"> <form class="listElement" style="width:40%; margin:0 auto 0 auto;"> @@ -241,7 +323,7 @@ async function setCourses(){ - <div v-if="!deleteMod && !createMod"> + <div v-if="!createMod"> <select @change="changeSchedule()" v-model="trueSchedule"> <option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}}</option> </select> @@ -263,14 +345,58 @@ async function setCourses(){ </select> </div> - <div v-for="element in schedule" style="width:50%;margin-left:auto; margin-right:auto;" > + <div v-if="!createMod " :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")}} + </button> + </div> + <div v-else> + <button @click="patchLesson(element);"> {{i18n("courses.confirm")}} </button> + <button @click="editElementID= '';"> {{i18n("courses.back")}} </button> + </div> <div class="listElement"> - <div class="containerElement"> + <div v-if="editElementID != element.lessonID"> <div> {{element.course.title}} </div> <div>{{formatDate(element.lessonStart)}}</div> - <div>{{getHoursMinutes(element.lessonStart)}}-{{getHoursMinutes(element.lessonEnd)}}</div> + <div>{{getHoursMinutes(element.lessonStart)}}-{{getHoursMinutes(element.lessonEnd)}} + </div> + <div>{{element.local}}</div> + <div>{{element.lessonType}}</div> + </div> + + <div v-else> + <div>{{element.course.title}}</div> + <div style="margin-bottom:20px;"> + Day: + <input type="date" :min="minDate" :max="maxDate" v-model="toModify.day"> + </div> + <div style="margin-bottom:20px;"> + Start: + <input v-model="toModify.lessonStart" type="time" min="8:00" max="20:00"/> + </div> + <div style="margin-bottom:20px;"> + 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> + </select> + </div> + <div style="margin-bottom:20px;"> + Local: + <select v-model="toModify.local"> + <option v-for="item in locals" :value='item'>{{item}}</option> + </select> + <div v-if="deleteMod" style="float:right;"> + <button class="delete" @click="removeLesson(element);"> {{i18n("courses.deleteCourse")}} </button> + </div> + + </div> </div> </div> </div> @@ -286,6 +412,7 @@ async function setCourses(){ .infosContainer { min-width:350px; + width:70%; padding-bottom:50px; border:2px solid black; font-size:25px; @@ -295,29 +422,6 @@ async function setCourses(){ 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; diff --git a/frontend/src/rest/lessonSchedule.js b/frontend/src/rest/lessonSchedule.js index 148af17..dfa1573 100644 --- a/frontend/src/rest/lessonSchedule.js +++ b/frontend/src/rest/lessonSchedule.js @@ -3,8 +3,8 @@ import {restGet,restPatch,restPost,restDelete} from "@/rest/restConsumer.js"; /** * Create a new lesson */ -export async function createLesson(course, lessonStart, lessonEnd, lessonType, color, local){ - return restPost("/lesson", {course: course , lessonStart: lessonStart, lessonEnd: lessonEnd,lessonType:lessonType ,color : color , local : local} ) +export async function createLesson(datas){ + return restPost("/lesson", datas ) } /** diff --git a/frontend/src/rest/restConsumer.js b/frontend/src/rest/restConsumer.js index 2ac4cc3..fdb0ad0 100644 --- a/frontend/src/rest/restConsumer.js +++ b/frontend/src/rest/restConsumer.js @@ -20,6 +20,10 @@ export async function restDelete(endPoint) { return await _rest(endPoint, {method: "DELETE"}); } +export async function restDeleteItem(endPoint, data){ + return await _rest(endPoint, {method: "DELETE", credentials: 'include', body: JSON.stringify(data)}); +} + export async function restPatch(endPoint, data) { return await _rest(endPoint, {method: "PATCH", credentials: 'include', body: JSON.stringify(data)}); } @@ -41,8 +45,9 @@ async function _rest(endPoint, config){ 'Content-Type': 'application/json', }); config['headers'] = config['headers'] == null ? headers : config['headers']; + console.log(config) return toast.promise(fetch(restURL + endPoint, config), - { + { pending: config['pending'] != null ? config['pending'] : 'pending', error: config['error'] != null ? config['error'] : 'Network Failure...', success: config['success'] != null ? config['success'] : {render(res){ diff --git a/frontend/src/rest/scheduleRest.js b/frontend/src/rest/scheduleRest.js index 617a237..342d717 100644 --- a/frontend/src/rest/scheduleRest.js +++ b/frontend/src/rest/scheduleRest.js @@ -1,4 +1,4 @@ -import {restGet,restPost,restPatch} from "@/rest/restConsumer.js"; +import {restGet, restPost, restPatch, restDelete, restDeleteItem} from "@/rest/restConsumer.js"; export async function getAllSchedule(){ return restGet('/schedules'); @@ -19,3 +19,12 @@ export async function getCurriculumSchedule(id){ export async function addLessonToSchedule(id,lessonId){ return restPost('/schedule/' + id, lessonId) } + +export async function getSchedule(id){ + return restGet('/schedule/' + id); + +} + +export async function deleteLessonFromSchedule(id,lessonId){ + return restDeleteItem('/schedule/lesson/'+ id, lessonId) +} diff --git a/frontend/src/scheduleFunctions.js b/frontend/src/scheduleFunctions.js index a9a4c95..1815b3b 100644 --- a/frontend/src/scheduleFunctions.js +++ b/frontend/src/scheduleFunctions.js @@ -1,4 +1,5 @@ import {ref} from 'vue' + export function formatDate(date) { var d = new Date(date), month = '' + (d.getMonth() + 1), @@ -108,6 +109,7 @@ export function getHoursMinutes(date){ const d = new Date(date); - return d.getHours()+ ":" + d.getMinutes(); + let hours = [d.getHours().toString().length == 1 ? "0" + d.getHours().toString() : d.getHours()]; + return hours+ ":" + d.getMinutes(); }