diff --git a/src/components/Courses.vue b/src/components/Courses.vue index 2b756c35746df7b47e1e1b2476b16c8e7f48e584..d9608028d3a545113f6aac4b8cb48973f47cd546 100644 --- a/src/components/Courses.vue +++ b/src/components/Courses.vue @@ -4,7 +4,7 @@ <div class="entry_box-inner"> <a id="editbutton" class="button" href="./editcourse" style="visibility: hidden">Eintrag bearbeiten</a> <a id="addbutton" class="button" href="./createcourse">neuen Eintrag hinzufügen</a> - <a id="deletebutton" class="button" href="./deletecourse">ausgewählte Einträge löschen</a> + <a id="deletebutton" class="button" @click="deleterows">ausgewählte Einträge löschen</a> <a id="exportbutton" class="button" href="./exporttablecourse">Tabelle exportieren</a> </div> <div class="search_box-inner"> @@ -80,6 +80,22 @@ export default { methods: { + deleterows(){ + let x = 0; + for (x; x < this.checkedBoxes.length; x++){ + this.$store.dispatch('course/delete', this.checkedBoxes[x]).then( + data => { + this.message = data.message; + this.successful = true; + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + } + }, + checkAllBoxes(){ var headercheckbox = document.getElementById('checkbox_headerline'); var headercheckboxvalue = headercheckbox.checked; @@ -584,7 +600,7 @@ export default { return angebotsnummer.includes(searchTerm) || angebot.includes(searchTerm) || kursname.includes(searchTerm) || veranstaltungsart.includes(searchTerm) || kursdatum.includes(searchTerm) || thema.includes(searchTerm) || kursort.includes(searchTerm) || begleitendeLehrkraft.includes(searchTerm) || betreuendeStudenten.includes(searchTerm) || betreuendeStudenten.includes(searchTerm) || anzahlderAnwesenden.includes(searchTerm) || anzahlderAngemeldeten.includes(searchTerm) || kursleiter.includes(searchTerm) || notiz.includes(searchTerm); }); - } + }, } } </script> diff --git a/src/components/CreateEditComponents/CreateCourse.vue b/src/components/CreateEditComponents/CreateCourse.vue index d65d13e97d133d92f08a0059b569a06e6ee11060..2d05987e5ed9223b225d692a202419851c92f0ea 100644 --- a/src/components/CreateEditComponents/CreateCourse.vue +++ b/src/components/CreateEditComponents/CreateCourse.vue @@ -37,7 +37,7 @@ </div> <div class="form-row"> <div class="col-md-11 mb-3"> - <h1 class="formTitle" style="margin-top: 10px">Kursdatum (yyyy-mm-dd)</h1> + <h1 class="formTitle" style="margin-top: 10px">Kursdatum (dd.mm.yyyy)</h1> <div class="input_container"> <input name="coursedate" v-model="course.coursedate" class="form-control inputField" placeholder="Kursdatum" aria-label="coursedate" required> </div> @@ -142,6 +142,7 @@ console.log("isvalid") this.$store.dispatch('course/insert', this.course).then( data => { + this.$router.push('/courses'); this.message = data.message; this.successful = true; }, diff --git a/src/components/CreateEditComponents/CreateTeacher.vue b/src/components/CreateEditComponents/CreateTeacher.vue index 59d9f4adaee8f33735d0e35b72f65d22cbfd0147..1f5ff6bbe778c771339b274c39b0c5e3e953608b 100644 --- a/src/components/CreateEditComponents/CreateTeacher.vue +++ b/src/components/CreateEditComponents/CreateTeacher.vue @@ -1,13 +1,204 @@ <template> -<div></div> +<div> + <div class="row col-md-12"> + <div id="content" class="content col-md-12"> + <form @submit="validateBeforeSubmit" class="col-md-10" style="margin-bottom: 20px"> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 30px">Anrede</h1> + <div class="input_container"> + <input v-model="teacher.anrede" type="text" class="form-control inputField" placeholder="Anrede" aria-label="anrede" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle">Grad</h1> + <div class="input_container"> + <input v-model="teacher.grad" type="text" class="form-control inputField" placeholder="Grad" aria-label="grad" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Vorname</h1> + <div class="input_container"> + <input v-model="teacher.firstname" type="text" class="form-control inputField" placeholder="Vorname" aria-label="firstname" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 30px">Nachname</h1> + <div class="input_container"> + <input v-model="teacher.lastname" type="text" class="form-control inputField" placeholder="Nachname" aria-label="lastname" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Straße</h1> + <div class="input_container"> + <input name="street" v-model="teacher.street" class="form-control inputField" placeholder="Straße" aria-label="street" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Postleitzahl</h1> + <div class="input_container"> + <input name="zip" v-model="teacher.zip" class="form-control inputField" placeholder="Postleitzahl" aria-label="zip" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Ort</h1> + <div class="input_container"> + <input name="city" v-model="teacher.city" class="form-control inputField" placeholder="Ort" aria-label="city" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">zusätzliche Adresse</h1> + <div class="input_container"> + <input name="addaddress" v-model="teacher.addaddress" class="form-control inputField" placeholder="zusätzliche Adresse" aria-label="addaddress" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">persönlicher Fragebogen</h1> + <div class="input_container"> + <input name="personal_questionnaire" v-model="teacher.personal_questionnaire" class="form-control inputField" placeholder="persönlicher Fragebogen" aria-label="personal_questionnaire" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 17</h1> + <div class="input_container"> + <input name="sommeruni_17" v-model="teacher.summeruni_17" class="form-control inputField" placeholder="SommerUni 17" aria-label="summeruni_17" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 18</h1> + <div class="input_container"> + <input name="sommeruni_18" v-model="teacher.summeruni_18" class="form-control inputField" placeholder="SommerUni 18" aria-label="summeruni_18" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 19</h1> + <div class="input_container"> + <input name="sommeruni_19" v-model="teacher.summeruni_19" class="form-control inputField" placeholder="SommerUni 19" aria-label="summeruni_19" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 20</h1> + <div class="input_container"> + <input name="sommeruni_20" v-model="teacher.summeruni_20" class="form-control inputField" placeholder="SommerUni 20" aria-label="summeruni_20" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">NatLab 20</h1> + <div class="input_container"> + <input name="natlab_20" v-model="teacher.natlab_20" class="form-control inputField" placeholder="NatLab 20" aria-label="natlab_20" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <button class="btn btn-primary btn-lg btn-block" style="margin-top: 20px; border-radius: 10px" type="button" @click="validateBeforeSubmit">Eintrag hinzufügen</button> + </div> + </div> + <div class="row"> + <div class="col-md-12 mb-3"> + </div> + </div> + </form> + </div> + </div> +</div> </template> <script> +import Teacher from "@/models/teacher"; + export default { - name: "CreateTeacher" + name: "CreateTeacher.vue", + + data(){ + return { + message: "", + teacher: new Teacher('', '', '', '', '', '', '', '', '', '', '', '', '', ''), + } + }, + + methods: { + validateBeforeSubmit() { + this.$validator.validate().then(isValid => { + if (isValid) { + console.log("isvalid") + this.$store.dispatch('teacher/insert', this.teacher).then( + data => { + this.$router.push('/teachers'); + this.message = data.message; + this.successful = true; + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + } else { + + console.log("not isvalid") + } + }); + } + } } </script> <style scoped> +div.content { + background-color: whitesmoke; + position: fixed; + padding: 1px 16px; + height: 1000px; + overflow-y: auto; +} + +.formTitle { + font-size: 14px; + font-weight: 500; + color: #6B6C6F; +} + +.inputField { + height: 44px; + margin-top: 10px; + padding-left: 70px; + padding-right: 70px; + border-color: #DFE2E6; + border-width: 2px; + border-radius: 10px; +} -</style> \ No newline at end of file +.input_container { + position:relative; +} + +.btn { + margin-bottom: 200px; +} +</style> diff --git a/src/components/CreateEditComponents/DeleteCourse.vue b/src/components/CreateEditComponents/DeleteCourse.vue deleted file mode 100644 index 81789f42278bacff85b3f18889c5ed1aeef2686f..0000000000000000000000000000000000000000 --- a/src/components/CreateEditComponents/DeleteCourse.vue +++ /dev/null @@ -1,13 +0,0 @@ -<template> -<div></div> -</template> - -<script> -export default { - name: "DeleteCourse" -} -</script> - -<style scoped> - -</style> \ No newline at end of file diff --git a/src/components/CreateEditComponents/DeleteTeacher.vue b/src/components/CreateEditComponents/DeleteTeacher.vue deleted file mode 100644 index d5e1e810219e4131151b232e607203393cd7e207..0000000000000000000000000000000000000000 --- a/src/components/CreateEditComponents/DeleteTeacher.vue +++ /dev/null @@ -1,13 +0,0 @@ -<template> - <div></div> -</template> - -<script> -export default { - name: "DeleteTeacher" -} -</script> - -<style scoped> - -</style> \ No newline at end of file diff --git a/src/components/CreateEditComponents/EditCourse.vue b/src/components/CreateEditComponents/EditCourse.vue index 4e1de2b1d621b6c3e1b832fb668fb9fed03a70ea..a92b96cc983368964c537b96489a937e49ee275a 100644 --- a/src/components/CreateEditComponents/EditCourse.vue +++ b/src/components/CreateEditComponents/EditCourse.vue @@ -37,7 +37,7 @@ </div> <div class="form-row"> <div class="col-md-11 mb-3"> - <h1 class="formTitle" style="margin-top: 10px">Kursdatum (yyyy-mm-dd)</h1> + <h1 class="formTitle" style="margin-top: 10px">Kursdatum (dd.mm.yyyy)</h1> <div class="input_container"> <input name="coursedate" v-model="course.coursedate" class="form-control inputField" placeholder="Kursdatum" aria-label="coursedate" required> </div> @@ -174,6 +174,7 @@ export default { this.course.id = this.id; this.$store.dispatch('course/update', this.course).then( data => { + this.$router.push('/courses'); this.message = data.message; this.successful = true; }, diff --git a/src/components/CreateEditComponents/EditTeacher.vue b/src/components/CreateEditComponents/EditTeacher.vue index bd66b23cc7a60c3d9d4bbadea4e3de268a3c2202..00b6f6c7a9af9fc464994248147c238f995d384d 100644 --- a/src/components/CreateEditComponents/EditTeacher.vue +++ b/src/components/CreateEditComponents/EditTeacher.vue @@ -1,13 +1,228 @@ <template> - <div></div> + <div> + <div class="row col-md-12"> + <div id="content" class="content col-md-12"> + <form @submit="validateBeforeSubmit" class="col-md-10" style="margin-bottom: 20px"> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 30px">Anrede</h1> + <div class="input_container"> + <input v-model="teacher.anrede" type="text" class="form-control inputField" placeholder="Anrede" aria-label="anrede" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle">Grad</h1> + <div class="input_container"> + <input v-model="teacher.grad" type="text" class="form-control inputField" placeholder="Grad" aria-label="grad" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Vorname</h1> + <div class="input_container"> + <input v-model="teacher.firstname" type="text" class="form-control inputField" placeholder="Vorname" aria-label="firstname" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 30px">Nachname</h1> + <div class="input_container"> + <input v-model="teacher.lastname" type="text" class="form-control inputField" placeholder="Nachname" aria-label="lastname" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Straße</h1> + <div class="input_container"> + <input name="street" v-model="teacher.street" class="form-control inputField" placeholder="Straße" aria-label="street" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Postleitzahl</h1> + <div class="input_container"> + <input name="zip" v-model="teacher.zip" class="form-control inputField" placeholder="Postleitzahl" aria-label="zip" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">Ort</h1> + <div class="input_container"> + <input name="city" v-model="teacher.city" class="form-control inputField" placeholder="Ort" aria-label="city" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">zusätzliche Adresse</h1> + <div class="input_container"> + <input name="addaddress" v-model="teacher.addaddress" class="form-control inputField" placeholder="zusätzliche Adresse" aria-label="addaddress" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">persönlicher Fragebogen</h1> + <div class="input_container"> + <input name="personal_questionnaire" v-model="teacher.personal_questionnaire" class="form-control inputField" placeholder="persönlicher Fragebogen" aria-label="personal_questionnaire" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 17</h1> + <div class="input_container"> + <input name="sommeruni_17" v-model="teacher.summeruni_17" class="form-control inputField" placeholder="SommerUni 17" aria-label="summeruni_17" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 18</h1> + <div class="input_container"> + <input name="sommeruni_18" v-model="teacher.summeruni_18" class="form-control inputField" placeholder="SommerUni 18" aria-label="summeruni_18" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 19</h1> + <div class="input_container"> + <input name="sommeruni_19" v-model="teacher.summeruni_19" class="form-control inputField" placeholder="SommerUni 19" aria-label="summeruni_19" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">SommerUni 20</h1> + <div class="input_container"> + <input name="sommeruni_20" v-model="teacher.summeruni_20" class="form-control inputField" placeholder="SommerUni 20" aria-label="summeruni_20" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <h1 class="formTitle" style="margin-top: 10px">NatLab 20</h1> + <div class="input_container"> + <input name="natlab_20" v-model="teacher.natlab_20" class="form-control inputField" placeholder="NatLab 20" aria-label="natlab_20" required> + </div> + </div> + </div> + <div class="form-row"> + <div class="col-md-11 mb-3"> + <button class="btn btn-primary btn-lg btn-block" style="margin-top: 20px; border-radius: 10px" type="button" @click="validateBeforeSubmit">Eintrag hinzufügen</button> + </div> + </div> + <div class="row"> + <div class="col-md-12 mb-3"> + </div> + </div> + </form> + </div> + </div> + </div> </template> <script> +import Teacher from "@/models/teacher"; + export default { - name: "EditTeacher" + name: "EditTeacher.vue", + + data(){ + return { + id: JSON.parse(localStorage.getItem('checkedBoxID')), + message: "", + teacher: new Teacher('','', '', '', '', '', '', '', '', '', '', '', '', ''), + } + }, + + created() { + //this.loadData(); + this.getData(); + }, + + methods: { + + getData(){ + this.$store.dispatch('teacher/getByID', this.id).then( + (data) => { + //this.teacher.anrede = data.courseNumber; + + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + }, + + validateBeforeSubmit() { + this.$validator.validate().then(isValid => { + if (isValid) { + this.teacher.id = this.id; + this.$store.dispatch('teacher/update', this.teacher).then( + data => { + this.$router.push('/teachers'); + this.message = data.message; + this.successful = true; + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + } else { + + console.log("not isvalid") + } + }); + }, + + loadData(){ + + } + } } </script> <style scoped> +div.content { + background-color: whitesmoke; + position: fixed; + padding: 1px 16px; + height: 1000px; + overflow-y: auto; +} +.formTitle { + font-size: 14px; + font-weight: 500; + color: #6B6C6F; +} + +.inputField { + height: 44px; + margin-top: 10px; + padding-left: 70px; + padding-right: 70px; + border-color: #DFE2E6; + border-width: 2px; + border-radius: 10px; +} + +.input_container { + position:relative; +} + +.btn { + margin-bottom: 200px; +} </style> \ No newline at end of file diff --git a/src/router.js b/src/router.js index 3e1c35996db4606ee37e06b82917a2970fff2909..db389b1c141fb68091607ef8d5541ed6ca138886 100644 --- a/src/router.js +++ b/src/router.js @@ -11,10 +11,8 @@ import Layouts from "./components/Layouts"; import Teachers from "./components/Teachers"; import CreateCourse from "@/components/CreateEditComponents/CreateCourse"; import EditCourse from "@/components/CreateEditComponents/EditCourse"; -import DeleteCourse from "@/components/CreateEditComponents/DeleteCourse"; import CreateTeacher from "@/components/CreateEditComponents/CreateTeacher"; import EditTeacher from "@/components/CreateEditComponents/EditTeacher"; -import DeleteTeacher from "@/components/CreateEditComponents/DeleteTeacher"; Vue.use(Router) @@ -35,8 +33,7 @@ const router = new Router({ }, { path: '/deletecourse', - name: 'Eintrag löschen', - component: DeleteCourse + name: 'Eintrag löschen' }, // Button from Teachers @@ -52,8 +49,7 @@ const router = new Router({ }, { path: '/deleteteacher', - name: 'Eintrag löschen', - component: DeleteTeacher + name: 'Eintrag löschen' }, // LOGIN / REGISTER diff --git a/src/services/course.service.js b/src/services/course.service.js index fe8f030b08502383e2ec5a8c3f29adb601637acc..c13729355fc751b46cd8524a8b78fd72a7d50158 100644 --- a/src/services/course.service.js +++ b/src/services/course.service.js @@ -53,10 +53,10 @@ class CourseService { }); } - delete() { + delete(id) { return axios .post(API_URL + 'deleteCourse', { - id:8 + id: id } ,{headers: authHeader() }) .then(response => { diff --git a/src/services/teacher.service.js b/src/services/teacher.service.js index 1015cf88caedf001027168e3f2bf006cccfcc1b1..a20b323c3434e078dd0c10e7a5e76b6c95863d03 100644 --- a/src/services/teacher.service.js +++ b/src/services/teacher.service.js @@ -8,7 +8,20 @@ class TeacherService { insert(teacher) { return axios .post(API_URL + 'insertTeacher', { - //angebotsnummer: course.coursenumber, + anrede: teacher.anrede, + grad: teacher.grad, + firstname: teacher.firstname, + lastname: teacher.lastname, + street: teacher.street, + zip: teacher.zip, + city: teacher.city, + addaddress: teacher.addaddress, + personal_questionnaire: teacher.personal_questionnaire, + summeruni_17: teacher.summeruni_17, + summeruni_18: teacher.summeruni_18, + summeruni_19: teacher.summeruni_19, + summeruni_20: teacher.summeruni_20, + natlab_20: teacher.natlab_20, } ,{headers: authHeader() }) @@ -17,6 +30,41 @@ class TeacherService { }); } + update(teacher) { + return axios + .post(API_URL + 'updateTeacher', { + anrede: teacher.anrede, + grad: teacher.grad, + firstname: teacher.firstname, + lastname: teacher.lastname, + street: teacher.street, + zip: teacher.zip, + city: teacher.city, + addaddress: teacher.addaddress, + personal_questionnaire: teacher.personal_questionnaire, + summeruni_17: teacher.summeruni_17, + summeruni_18: teacher.summeruni_18, + summeruni_19: teacher.summeruni_19, + summeruni_20: teacher.summeruni_20, + natlab_20: teacher.natlab_20, + } + ,{headers: authHeader() }) + .then(response => { + return response.data; + }); + } + + delete(id) { + return axios + .post(API_URL + 'deleteTeacher', { + id: id + } + ,{headers: authHeader() }) + .then(response => { + return response.data; + }); + } + getAll() { return axios .get(API_URL + 'getTeachers', { diff --git a/src/store/course.module.js b/src/store/course.module.js index 13a1f8ce9714365b2442d378c15ce396ffe965b5..42ab54f9765be9eb567c6be2f7a5e0869d8b0019 100644 --- a/src/store/course.module.js +++ b/src/store/course.module.js @@ -34,8 +34,8 @@ export const course = { ); }, - delete({ commit }) { - return CourseService.update().then( + delete({ commit }, id) { + return CourseService.delete(id).then( response => { commit('insertSuccess', response); return Promise.resolve(response);