diff --git a/package-lock.json b/package-lock.json index 7bc71711e3314c14c37deb1b6013a78529a4abee..6c4e69a1e451fd10822c9f2d5b5b3441fa98393f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6962,6 +6962,11 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" }, + "js-file-download": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==" + }, "js-message": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", @@ -9245,10 +9250,9 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" }, "query-string": { "version": "4.3.4", diff --git a/package.json b/package.json index 39cc8154eb5c792d590b0a13b7ac515edee63838..786ce3c9469b14d2cde94f0f0fa3ce0709413454 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "dayjs": "^1.9.1", "file-saver": "^2.0.2", "jquery": "^3.5.1", + "js-file-download": "^0.4.12", "kalendar-vue": "^2.1.1", "lodash.trim": "^4.5.1", "popper.js": "^1.16.1", diff --git a/src/components/Courses.vue b/src/components/Courses.vue index 8e92918ecf974c00f83a1f83c49aaa9570dc865c..9da2ecd76a9d456b32263528bc9d9320db8a59c4 100644 --- a/src/components/Courses.vue +++ b/src/components/Courses.vue @@ -3,6 +3,7 @@ <div class="content col-md-12"> <div id="search_box" class="search_box col-md-4"> <div class="entry_box-inner"> + {{checkedBoxes}} <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" @click="deleterows">ausgewählte Einträge löschen</a> @@ -112,18 +113,17 @@ export default { var headercheckboxvalue = headercheckbox.checked; let checkboxes = document.getElementsByName('checkbox_tablerow'); - for(var i=0, n=checkboxes.length;i<n;i++) { + this.checkedBoxes = []; + for(var i=0, n = checkboxes.length;i<n;i++) { if (headercheckboxvalue){ this.checkedBoxes.push(this.rows[i].id); - } else { - this.checkedBoxes.pop(this.rows[i].id); } checkboxes[i].checked = headercheckboxvalue; } }, - loadData(){ - this.$store.dispatch('course/getAll').then( + async loadData(){ + await this.$store.dispatch('course/getAll').then( (data) => { let x; for(x = 0; x < data.length; x++){ @@ -138,28 +138,7 @@ export default { }, exportExcel(){ - this.$store.dispatch('event/get').then( - (data) => { - data.forEach(row => { - console.log("loop") - let title = row.title; - let description = row.description; - let from = row.startTime; - let to = row.endTime; - - let payload = { - from, - to, - data: { - title, - description - } - } - this.events.push(payload); - }) - console.log(this.events); - } - ) + this.$store.dispatch('course/exportExcel', this.checkedBoxes); }, "sortTable": function sortTable(col) { @@ -245,7 +224,9 @@ export default { return Object.keys(this.rows[0]) }, filteredRows() { - return this.rows.filter(row => { + return this.rows.filter(() => { + return true; + /* const angebotsnummer = row.coursenumber.toLowerCase(); const angebot = row.courseoffer.toLowerCase(); const kursname = row.coursename.toLowerCase(); @@ -265,7 +246,7 @@ export default { const searchTerm = this.filter.toLowerCase(); 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) || anzahlung.includes(searchTerm) || honorar.includes(searchTerm) || status.includes(searchTerm); - }); + */ }); }, } } diff --git a/src/components/Teachers.vue b/src/components/Teachers.vue index 4bf7fe62d485dedc95a4e61e3761d1c1254d379d..1c11526959e527c43c0961a00f85808a97e6e788 100644 --- a/src/components/Teachers.vue +++ b/src/components/Teachers.vue @@ -5,7 +5,7 @@ <a id="editbutton" class="button" href="./editteacher" style="visibility: hidden">Eintrag bearbeiten</a> <a id="addbutton" class="button" href="./createteacher">neuen Eintrag hinzufügen</a> <a id="deletebutton" class="button" @click="deleterows">ausgewählte Einträge löschen</a> - <a id="exportbutton" class="button" href="./exporttableteacher">Tabelle exportieren</a> + <a id="exportbutton" class="button" @click="exportExcel">Tabelle exportieren</a> </div> <div class="search_box-inner"> <i><img src="../assets/search.svg"></i> @@ -34,7 +34,6 @@ <th v-on:click="sortTable('school_branch')"><img id="imgsortschoolbranch" :src="require('../assets/'+sortImg)">Schulart</th> <th v-on:click="sortTable('school_name')"><img id='imgsortschoolname' :src="require('../assets/'+sortImg)">Schulname</th> <th v-on:click="sortTable('school_number')"><img id='imgsortschoolnumber' :src="require('../assets/'+sortImg)">Schulnummer</th> - <th v-on:click="sortTable('status')"><img id='imgsortstatus' :src="require('../assets/'+sortImg)">Status</th> </tr> <tr v-for="row in filteredRows" :key="row.id"> <td scope="row"> @@ -89,11 +88,10 @@ export default { var headercheckboxvalue = headercheckbox.checked; let checkboxes = document.getElementsByName('checkbox_tablerow'); - for(var i=0, n=checkboxes.length;i<n;i++) { + this.checkedBoxes = []; + for(var i=0, n = checkboxes.length;i<n;i++) { if (headercheckboxvalue){ this.checkedBoxes.push(this.rows[i].id); - } else { - this.checkedBoxes.pop(this.rows[i].id); } checkboxes[i].checked = headercheckboxvalue; } @@ -114,6 +112,11 @@ export default { ); }, + exportExcel(){ + this.$store.dispatch('teacher/exportExcel', this.checkedBoxes); + }, + + deleterows(){ let x = 0; for (x; x < this.checkedBoxes.length; x++){ @@ -710,8 +713,7 @@ export default { return Object.keys(this.rows[0]) }, filteredRows() { - return this.rows.filter(row => { - console.log(row) + return this.rows.filter(() => { /*const personal_number = row.personal_number.toLowerCase(); const gender = row.gender.toLowerCase(); const grad = row.grad.toLowerCase(); diff --git a/src/services/course.service.js b/src/services/course.service.js index f61e1ca945c58debd2c4a5a228048e873da56de9..bfdb5d2979eaa7edd576e3e3e69a1e7cf4f6b362 100644 --- a/src/services/course.service.js +++ b/src/services/course.service.js @@ -1,5 +1,6 @@ import axios from 'axios'; import authHeader from "@/services/auth-header"; +import fileDownload from 'js-file-download'; const API_URL = 'http://localhost:9192/'; @@ -89,6 +90,30 @@ class CourseService { return response.data; }); } + + exportExcel(ids) { + let idsArray = "" + if (ids.length > 0) + idsArray = "/"; + + for (let i = 0; i < ids.length; i++) { + if (i === ids.length-1) + idsArray += ids[i]; + else + idsArray += ids[i]+","; + } + + return axios + .get(API_URL + 'exportCourseExcel' + idsArray, { + headers: authHeader(), + responseType: 'blob', + }) + .then(response => { + fileDownload(response.data, "Kurse.xlsx"); + return response.data; + }); + } + } diff --git a/src/services/teacher.service.js b/src/services/teacher.service.js index cfe6a9d2a5f052ccc5be50e276d32f6c7e6bce35..a234a677ccf341fce3f6299996b7eccfb6203787 100644 --- a/src/services/teacher.service.js +++ b/src/services/teacher.service.js @@ -1,5 +1,6 @@ import axios from 'axios'; import authHeader from "@/services/auth-header"; +import fileDownload from "js-file-download"; const API_URL = 'http://localhost:9192/'; @@ -86,6 +87,30 @@ class TeacherService { return response.data; }); } + + + exportExcel(ids) { + let idsArray = "" + if (ids.length > 0) + idsArray = "/"; + + for (let i = 0; i < ids.length; i++) { + if (i === ids.length-1) + idsArray += ids[i]; + else + idsArray += ids[i]+","; + } + + return axios + .get(API_URL + 'exportTeacherExcel' + idsArray, { + headers: authHeader(), + responseType: 'blob', + }) + .then(response => { + fileDownload(response.data, "Lehrkräfte.xlsx"); + return response.data; + }); + } } diff --git a/src/store/course.module.js b/src/store/course.module.js index 42ab54f9765be9eb567c6be2f7a5e0869d8b0019..dfe98134713c05301cc5e6d21f86f99e4e190e97 100644 --- a/src/store/course.module.js +++ b/src/store/course.module.js @@ -71,6 +71,19 @@ export const course = { return Promise.reject(error); } ); + }, + + exportExcel({ commit },ids) { + return CourseService.exportExcel(ids).then( + response => { + commit('insertSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('insertFailure'); + return Promise.reject(error); + } + ); } }, diff --git a/src/store/teacher.module.js b/src/store/teacher.module.js index 65d5621669d186bf35a140cebd673403d34e0ec2..fea7f1d83780bcc4f7659b7f9ef77ea1a43b7d05 100644 --- a/src/store/teacher.module.js +++ b/src/store/teacher.module.js @@ -1,4 +1,5 @@ import TeacherService from '../services/teacher.service'; +import CourseService from "@/services/course.service"; const initialState = null; @@ -71,6 +72,19 @@ export const teacher = { return Promise.reject(error); } ); + }, + + exportExcel({ commit }, ids) { + return TeacherService.exportExcel(ids).then( + response => { + commit('insertSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('insertFailure'); + return Promise.reject(error); + } + ); } },