diff --git a/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class b/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class index 915e9e4..25d3b18 100644 Binary files a/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class and b/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class differ diff --git a/Projekt_SE2/src/main/java/com/cafe/login/LoginServlet.java b/Projekt_SE2/src/main/java/com/cafe/login/LoginServlet.java index bd8939d..ef942da 100644 --- a/Projekt_SE2/src/main/java/com/cafe/login/LoginServlet.java +++ b/Projekt_SE2/src/main/java/com/cafe/login/LoginServlet.java @@ -7,76 +7,85 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; import java.sql.*; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String username = request.getParameter("username"); - String password = request.getParameter("password"); + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String username = request.getParameter("username"); + String password = request.getParameter("password"); - String userRole = authenticateUser(username, password); + String userRole = authenticateUser(username, password); - if ("Mitarbeiter".equals(userRole)) { - // Weiterleitung zur Mitarbeiter-Seite - response.sendRedirect("mitarbeiter.jsp"); - } else if ("Chef".equals(userRole)) { - // Weiterleitung zur Chef-Seite - response.sendRedirect("chef.jsp"); - } else { - // Zurück zur Login-Seite mit Fehlermeldung - request.setAttribute("errorMessage", "Ungültige Anmeldedaten!"); - request.getRequestDispatcher("startseite.jsp").forward(request, response); - } - } + if ("Mitarbeiter".equals(userRole)) { + // Weiterleitung zur Mitarbeiter-Seite + response.sendRedirect("mitarbeiter.jsp"); + } else if ("Chef".equals(userRole)) { + // Weiterleitung zur Chef-Seite + response.sendRedirect("chef.jsp"); + } else { + // Zurück zur Login-Seite mit Fehlermeldung + request.setAttribute("errorMessage", "Ungültige Anmeldedaten!"); + request.getRequestDispatcher("startseite.jsp").forward(request, response); + } + } - /** - * Authentifiziert den Benutzer in der Datenbank. - * - * @param username Der Benutzername (E-Mail in der Datenbank) - * @param password Das Passwort - * @return Die Benutzerrolle ("Mitarbeiter", "Chef") oder null, wenn ungültig - */ - private String authenticateUser(String username, String password) { - String role = null; + /** + * Authentifiziert den Benutzer in der Datenbank. + * + * @param username Der Benutzername (E-Mail in der Datenbank) + * @param password Das Passwort + * @return Die Benutzerrolle ("Mitarbeiter", "Chef") oder null, wenn ungültig + */ + private String authenticateUser(String username, String password) { + String role = null; - String mitarbeiterQuery = "SELECT 'Mitarbeiter' as role FROM mitarbeiter WHERE email = ? AND password = ?"; - String chefQuery = "SELECT 'Chef' as role FROM chef WHERE email = ? AND password = ?"; + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } - try (Connection conn = DriverManager.getConnection(DB_URL)) { - // Mitarbeiter-Check - try (PreparedStatement mitarbeiterStmt = conn.prepareStatement(mitarbeiterQuery)) { - mitarbeiterStmt.setString(1, username); - mitarbeiterStmt.setString(2, password); + String mitarbeiterQuery = "SELECT 'Mitarbeiter' as role FROM mitarbeiter WHERE email = ? AND password = ?"; + String chefQuery = "SELECT 'Chef' as role FROM chef WHERE email = ? AND password = ?"; - try (ResultSet rs = mitarbeiterStmt.executeQuery()) { - if (rs.next()) { - role = rs.getString("role"); - return role; - } - } - } + try (Connection conn = DriverManager.getConnection(DB_URL)) { + // Mitarbeiter-Check + try (PreparedStatement mitarbeiterStmt = conn.prepareStatement(mitarbeiterQuery)) { + mitarbeiterStmt.setString(1, username); + mitarbeiterStmt.setString(2, password); - // Chef-Check - try (PreparedStatement chefStmt = conn.prepareStatement(chefQuery)) { - chefStmt.setString(1, username); - chefStmt.setString(2, password); + try (ResultSet rs = mitarbeiterStmt.executeQuery()) { + if (rs.next()) { + role = rs.getString("role"); + return role; + } + } + } - try (ResultSet rs = chefStmt.executeQuery()) { - if (rs.next()) { - role = rs.getString("role"); - } - } - } + // Chef-Check + try (PreparedStatement chefStmt = conn.prepareStatement(chefQuery)) { + chefStmt.setString(1, username); + chefStmt.setString(2, password); - } catch (SQLException e) { - e.printStackTrace(); - } - return role; - } -} + try (ResultSet rs = chefStmt.executeQuery()) { + if (rs.next()) { + role = rs.getString("role"); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return role; + + } +} \ No newline at end of file diff --git a/Projekt_SE2/src/main/java/com/cafe/verwaltung/AktualisiereDatenServlet.java b/Projekt_SE2/src/main/java/com/cafe/verwaltung/AktualisiereDatenServlet.java new file mode 100644 index 0000000..49a2020 --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/verwaltung/AktualisiereDatenServlet.java @@ -0,0 +1,129 @@ +package com.cafe.verwaltung; + +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.*; + +@WebServlet("/AktualisiereDatenServlet") +public class AktualisiereDatenServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String mitarbeiterNr = request.getParameter("mitarbeiterNr"); + if (mitarbeiterNr == null || mitarbeiterNr.isEmpty()) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "MitarbeiterNr fehlt."); + return; + } + + response.setContentType("text/plain;charset=UTF-8"); + + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } + + try (Connection conn = DriverManager.getConnection(DB_URL)) { + String query = "SELECT m.mitarbeiterNr, m.vorname, m.nachname, m.telefonNr, m.email, " + + "m.strasse, m.hausnummer, m.ortsNr AS ort, m.password " + + "FROM Mitarbeiter m " + + "WHERE m.mitarbeiterNr = ?"; + + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setInt(1, Integer.parseInt(mitarbeiterNr)); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + String csvOutput = String.join(",", + rs.getString("mitarbeiterNr"), + rs.getString("vorname"), + rs.getString("nachname"), + rs.getString("telefonNr"), + rs.getString("email"), + rs.getString("strasse"), + rs.getString("hausnummer"), + rs.getString("ort"), + rs.getString("password") + ); + response.getWriter().print(csvOutput); + } else { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "Mitarbeiter nicht gefunden."); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Datenbankfehler: " + e.getMessage()); + } + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + // Parameter aus der Anfrage lesen + String mitarbeiterNr = request.getParameter("mitarbeiterNr"); + String vorname = request.getParameter("vorname"); + String nachname = request.getParameter("nachname"); + String telefonNr = request.getParameter("telefonNr"); + String email = request.getParameter("email"); + String strasse = request.getParameter("strasse"); + String hausnummer = request.getParameter("hausnummer"); + String ortsNr = request.getParameter("ort"); + String password = request.getParameter("password"); + + // Überprüfung, ob alle Felder gefüllt sind + if (mitarbeiterNr == null || mitarbeiterNr.isEmpty() || + vorname == null || vorname.isEmpty() || + nachname == null || nachname.isEmpty() || + telefonNr == null || telefonNr.isEmpty() || + email == null || email.isEmpty() || + strasse == null || strasse.isEmpty() || + hausnummer == null || hausnummer.isEmpty() || + ortsNr == null || ortsNr.isEmpty() || + password == null || password.isEmpty()) { + + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Alle Felder müssen ausgefüllt sein."); + return; + } + + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } + + try (Connection conn = DriverManager.getConnection(DB_URL)) { + String query = "UPDATE Mitarbeiter SET vorname = ?, nachname = ?, telefonNr = ?, email = ?, " + + "strasse = ?, hausnummer = ?, ortsNr = ?, password = ? WHERE mitarbeiterNr = ?"; + + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setString(1, vorname); + stmt.setString(2, nachname); + stmt.setString(3, telefonNr); + stmt.setString(4, email); + stmt.setString(5, strasse); + stmt.setString(6, hausnummer); + stmt.setInt(7, Integer.parseInt(ortsNr)); + stmt.setString(8, password); + stmt.setInt(9, Integer.parseInt(mitarbeiterNr)); + + int rowsUpdated = stmt.executeUpdate(); + if (rowsUpdated > 0) { + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().write("Mitarbeiterdaten erfolgreich aktualisiert."); + } else { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "Mitarbeiter nicht gefunden."); + } + } + } catch (SQLException e) { + e.printStackTrace(); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Datenbankfehler: " + e.getMessage()); + } + } +} diff --git a/Projekt_SE2/src/main/java/com/cafe/verwaltung/LoeschenMitarbeiterServlet.java b/Projekt_SE2/src/main/java/com/cafe/verwaltung/LoeschenMitarbeiterServlet.java new file mode 100644 index 0000000..ebff3a8 --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/verwaltung/LoeschenMitarbeiterServlet.java @@ -0,0 +1,46 @@ +package com.cafe.verwaltung; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.*; + + +@WebServlet("/LoeschenMitarbeiterServlet") +public class LoeschenMitarbeiterServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String mitarbeiterNr = request.getParameter("mitarbeiterNr"); + + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } + + if (mitarbeiterNr == null || mitarbeiterNr.isEmpty()) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Ungültige Mitarbeiter-Nr."); + return; + } + + try (Connection conn = DriverManager.getConnection(DB_URL)) { + String query = "DELETE FROM Mitarbeiter WHERE mitarbeiterNr = ?"; + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setInt(1, Integer.parseInt(mitarbeiterNr)); + stmt.executeUpdate(); + response.setStatus(HttpServletResponse.SC_OK); + } + } catch (SQLException e) { + e.printStackTrace(); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Datenbankfehler: " + e.getMessage()); + } + } +} diff --git a/Projekt_SE2/src/main/java/com/cafe/verwaltung/MitarbeiterDatenServlet.java b/Projekt_SE2/src/main/java/com/cafe/verwaltung/MitarbeiterDatenServlet.java new file mode 100644 index 0000000..81bed9c --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/verwaltung/MitarbeiterDatenServlet.java @@ -0,0 +1,63 @@ +package com.cafe.verwaltung; + +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.*; + +@WebServlet("/MitarbeiterDatenServlet") +public class MitarbeiterDatenServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws IOException { + response.setContentType("text/plain;charset=UTF-8"); + + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } + + try (PrintWriter out = response.getWriter()) { + try (Connection conn = DriverManager.getConnection(DB_URL)) { + String query = "SELECT m.mitarbeiterNr, m.vorname, m.nachname, m.telefonNr, m.email, " + + "m.strasse, m.hausnummer, o.name AS ort, o.plz, m.password " + + "FROM Mitarbeiter m " + + "JOIN Orte o ON m.ortsNr = o.ortsNr " + + "ORDER BY m.mitarbeiterNr"; + + try (PreparedStatement stmt = conn.prepareStatement(query); + ResultSet rs = stmt.executeQuery()) { + + StringBuilder csvOutput = new StringBuilder(); + csvOutput.append("mitarbeiterNr,vorname,nachname,telefonNr,email,strasse,hausNr,ort,plz,password\n"); + + while (rs.next()) { + csvOutput.append(rs.getInt("mitarbeiterNr")).append(",") + .append(rs.getString("vorname")).append(",") + .append(rs.getString("nachname")).append(",") + .append(rs.getString("telefonNr")).append(",") + .append(rs.getString("email")).append(",") + .append(rs.getString("strasse")).append(",") + .append(rs.getString("hausnummer")).append(",") + .append(rs.getString("ort")).append(",") + .append(rs.getString("plz")).append(",") + .append(rs.getString("password")).append("\n"); + } + + out.print(csvOutput.toString()); + } + } catch (SQLException e) { + e.printStackTrace(); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Datenbankfehler: " + e.getMessage()); + } + } + } +} diff --git a/Projekt_SE2/src/main/java/com/cafe/verwaltung/NeuerMitarbeiterServlet.java b/Projekt_SE2/src/main/java/com/cafe/verwaltung/NeuerMitarbeiterServlet.java new file mode 100644 index 0000000..5027bcb --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/verwaltung/NeuerMitarbeiterServlet.java @@ -0,0 +1,80 @@ +package com.cafe.verwaltung; + +import jakarta.servlet.ServletException; +import java.sql.*; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + + +@WebServlet("/NeuerMitarbeiterServlet") +public class NeuerMitarbeiterServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String vorname = request.getParameter("vorname"); + String nachname = request.getParameter("nachname"); + String telefonNr = request.getParameter("telefonNr"); + String email = request.getParameter("email"); + String strasse = request.getParameter("strasse"); + String hausNr = request.getParameter("hausnummer"); + String ortsnr = request.getParameter("ort"); + String password = request.getParameter("password"); + + /* + System.out.println("Vorname: " + vorname); + System.out.println("Nachname: " + nachname); + System.out.println("TelefonNr: " + telefonNr); + System.out.println("Email: " + email); + System.out.println("Strasse: " + strasse); + System.out.println("HausNr: " + hausNr); + System.out.println("Ort: " + ortsnr); + System.out.println("Password: " + password); + */ + + // Validierung: Überprüfe, ob Pflichtfelder null oder leer sind + if (isEmpty(vorname) || isEmpty(nachname) || isEmpty(telefonNr) || + isEmpty(email) || isEmpty(strasse) || isEmpty(hausNr) || + isEmpty(ortsnr) || isEmpty(password)) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.getWriter().write("Bitte alle Felder ausfüllen."); + return; + } + + try (Connection conn = DriverManager.getConnection(DB_URL)) { + String query = "INSERT INTO mitarbeiter (vorname, nachname, telefonNr, email, strasse, hausnummer, ortsNr, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setString(1, vorname); + stmt.setString(2, nachname); + stmt.setString(3, telefonNr); + stmt.setString(4, email); + stmt.setString(5, strasse); + stmt.setString(6, hausNr); + stmt.setInt(7, Integer.parseInt(ortsnr)); // Konvertiere Ort zu Integer + stmt.setString(8, password); + stmt.executeUpdate(); + response.setStatus(HttpServletResponse.SC_OK); + } + } catch (NumberFormatException e) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.getWriter().write("Fehler: " + e.getMessage()); + } catch (SQLException e) { + e.printStackTrace(); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.getWriter().write("Datenbankfehler: " + e.getMessage()); + } + } + + private boolean isEmpty(String value) { + return value == null || value.trim().isEmpty(); + } +} + + + diff --git a/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml b/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml index e1a30bc..cfa23fc 100644 --- a/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml +++ b/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml @@ -70,4 +70,36 @@ SchichtenDatenServlet /SchichtenDatenServlet + + + MitarbeiterDatenServlet + com.cafe.verwaltung + + + MitarbeiterDatenServlet + /MitarbeiterDatenServlet + + + LoeschenMitarbeiterServlet + com.cafe.verwaltung + + + LoeschenMitarbeiterServlet + /LoeschenMitarbeiterServlet + + + NeuerMitarbeiterServlet + com.cafe.verwaltung + + + NeuerMitarbeiterServlet + /NeuerMitarbeiterServlet + + + AktualisiereDatenServlet + com.cafe.verwaltung + + + AktualisiereDatenServlet + /AktualisiereDatenServlet \ No newline at end of file diff --git a/Projekt_SE2/src/main/webapp/chef.jsp b/Projekt_SE2/src/main/webapp/chef.jsp index a205a8b..9eff627 100644 --- a/Projekt_SE2/src/main/webapp/chef.jsp +++ b/Projekt_SE2/src/main/webapp/chef.jsp @@ -29,8 +29,7 @@ @@ -55,7 +54,7 @@ Hier kannst du alles verwalten, was dein Lokal so besonders macht.
In der vertrauten und professionellen Umgebung
hast du die Kontrolle über alle Abläufe.
- Pflege die Speise- und Getränkekarte, verwalte deine Mitarbeiter
+ Verwalte deine Mitarbeiter
und behalte den Überblick über die Schichtpläne.

Falls du Unterstützung brauchst, steht dir unser Support-Team jederzeit zur Verfügung.
Wir freuen uns, dich auf dem Weg zum Erfolg begleiten zu dürfen.
diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltung.jsp b/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltung.jsp index 52586f5..4a56d98 100644 --- a/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltung.jsp +++ b/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltung.jsp @@ -29,8 +29,7 @@ @@ -49,16 +48,96 @@ + + + + + + + + + + +

Willkommen zur Mitarbeiterverwaltung
vom EJSS Palast

- Hier kannst du alle deine Mitarbeiter verwalten, ihre Daten einsehen und deren Passwörter aktuellisieren.
+ Hier kannst du alle deine Mitarbeiter verwalten, ihre Daten einsehen und aktualisieren.
Falls du Unterstützung brauchst, steht dir unser Support-Team jederzeit zur Verfügung.
Wir freuen uns, dich auf dem Weg zum Erfolg begleiten zu dürfen.
Dein EJSS Palast Admin-Team

+ +

Mitarbeiterverwaltung

+ + + + + + + + + + + + + + + + + + +
Mitarbeiter-NrVornameNachnameTelefonEmailStraßeHaus-NrOrtPLZAktionen
+
+ +
+ +

Zurück zum Anfang

- + + diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltungScript.js b/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltungScript.js new file mode 100644 index 0000000..2e64970 --- /dev/null +++ b/Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltungScript.js @@ -0,0 +1,257 @@ +document.addEventListener("DOMContentLoaded", () => { + loadMitarbeiter(); +}); + +function loadMitarbeiter() { + fetch("/Projekt_SE2/MitarbeiterDatenServlet") + .then(response => response.text()) + .then(csv => { + const rows = csv.trim().split("\n").slice(1); // Überspringe die Kopfzeile + const tbody = document.querySelector("#mitarbeiterTabelle tbody"); + tbody.innerHTML = ""; + + rows.forEach(row => { + const columns = row.split(","); + const tr = document.createElement("tr"); + tr.innerHTML = ` + ${columns[0]} + ${columns[1]} + ${columns[2]} + ${columns[3]} + ${columns[4]} + ${columns[5]} + ${columns[6]} + ${columns[7]} + ${columns[8]} + + + + + `; + tbody.appendChild(tr); + }); + }) + .catch(error => showPopup("Fehler beim Laden der Mitarbeiter: " + error.message)); +} + +function neuerMitarbeiter() { + document.getElementById("popupOverlay").style.display = "flex"; + document.getElementById("popupMessage").innerText = "Neuen Mitarbeiter hinzufügen"; + clearPopupFields(); + + document.getElementById("popupConfirmButton").onclick = () => { + const newMitarbeiter = { + vorname: document.getElementById("vorname").value.trim(), + nachname: document.getElementById("nachname").value.trim(), + telefonNr: document.getElementById("telefonNr").value.trim(), + email: document.getElementById("email").value.trim(), + strasse: document.getElementById("strasse").value.trim(), + hausnummer: document.getElementById("hausnummer").value.trim(), + ort: document.getElementById("ort").value.trim(), + password: document.getElementById("password").value.trim() + }; + + + + if (Object.values(newMitarbeiter).some(value => value === "")) { + showPopup("Fehler: Bitte alle Felder ausfüllen."); + return; + } + + + fetch("/Projekt_SE2/NeuerMitarbeiterServlet", { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: new URLSearchParams(newMitarbeiter).toString() + }) + .then(response => { + if (response.ok) { + loadMitarbeiter(); + closePopup(); + showPopup("Neuer Mitarbeiter erfolgreich hinzugefügt!"); + } else { + showPopup("Fehler beim Hinzufügen des Mitarbeiters."); + } + }) + .catch(error => showPopup("Fehler beim Hinzufügen: " + error.message)); + }; +} + + +function bearbeitenMitarbeiter(mitarbeiterNr) { + fetch(`/Projekt_SE2/AktualisiereDatenServlet?mitarbeiterNr=${mitarbeiterNr}`) + .then(response => response.text()) + .then(csv => { + const rows = csv.trim().split("\n"); + if (rows.length === 0 || rows[0] === "") { + throw new Error("Keine Mitarbeiterdaten gefunden."); + } + + const mitarbeiterData = rows[0].split(","); + if (mitarbeiterData.length < 9) { + throw new Error("Ungültige CSV-Daten erhalten."); + } + + // Felder mit den CSV-Daten füllen + document.getElementById("vorname").value = mitarbeiterData[1]; + document.getElementById("nachname").value = mitarbeiterData[2]; + document.getElementById("telefonNr").value = mitarbeiterData[3]; + document.getElementById("email").value = mitarbeiterData[4]; + document.getElementById("strasse").value = mitarbeiterData[5]; + document.getElementById("hausnummer").value = mitarbeiterData[6]; + document.getElementById("ort").value = mitarbeiterData[7]; + document.getElementById("password").value = mitarbeiterData[8]; + + // Popup anzeigen + document.getElementById("popupOverlay").style.display = "flex"; + document.getElementById("popupMessage").innerText = "Mitarbeiter bearbeiten"; + + // Speichern-Funktion setzen + document.getElementById("popupConfirmButton").onclick = () => { + saveMitarbeiter(mitarbeiterNr); // Erfolgsmeldung wird in saveMitarbeiter angezeigt + }; + }) + .catch(error => showPopup("Fehler beim Laden der Mitarbeiterdetails: " + error.message)); +} + + +function saveMitarbeiter(mitarbeiterNr) { + // Debug-Ausgabe zur Verfolgung + // console.log("Speichern von Mitarbeiter:", mitarbeiterNr); + + // Sammeln der Formulardaten + const formData = { + vorname: document.getElementById("vorname").value.trim(), + nachname: document.getElementById("nachname").value.trim(), + telefonNr: document.getElementById("telefonNr").value.trim(), + email: document.getElementById("email").value.trim(), + strasse: document.getElementById("strasse").value.trim(), + hausnummer: document.getElementById("hausnummer").value.trim(), + ort: document.getElementById("ort").value.trim(), + password: document.getElementById("password").value.trim() + }; + + // Validierung: Überprüfen, ob alle Felder ausgefüllt sind + const unfilledFields = Object.entries(formData).filter(([key, value]) => !value); + if (unfilledFields.length > 0) { + const fehlendeFelder = unfilledFields.map(([key]) => key).join(", "); + showPopup(`Fehler: Die folgenden Felder sind leer: ${fehlendeFelder}`); + return; + } + + // URL je nach Kontext (Aktualisierung oder Neuerstellung) + const servletURL = mitarbeiterNr + ? `/Projekt_SE2/AktualisiereDatenServlet` + : "/Projekt_SE2/NeuerMitarbeiterServlet"; + + // Bei Update wird die MitarbeiterNr angehängt + if (mitarbeiterNr) { + formData.mitarbeiterNr = mitarbeiterNr; + } + + // Debug-Ausgabe der Daten + console.log("Gesendete Daten:", formData); + + fetch(servletURL, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: new URLSearchParams(formData).toString() // Daten in x-www-form-urlencoded-Format umwandeln + }) + .then(response => { + if (!response.ok) { + // Fehlertext vom Server lesen + return response.text().then((text) => { + throw new Error(text); + }); + } + const successMessage = mitarbeiterNr + ? "Mitarbeiter erfolgreich aktualisiert!" + : "Neuer Mitarbeiter erfolgreich hinzugefügt!"; + showPopup(successMessage); + closePopup(); + loadMitarbeiter(); // Tabelle neu laden + }) + .catch((error) => showPopup("Fehler beim Speichern: " + error.message)); +} + + +// Mitarbeiter löschen +function loeschenMitarbeiter(mitarbeiterNr) { + const confirmation = confirm("Möchten Sie diesen Mitarbeiter wirklich löschen?"); + if (confirmation) { + fetch(`/Projekt_SE2/LoeschenMitarbeiterServlet`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: `mitarbeiterNr=${mitarbeiterNr}` + }) + .then(response => { + if (response.ok) { + // Mitarbeiter erfolgreich gelöscht + alert("Mitarbeiter erfolgreich gelöscht!"); + loadMitarbeiter(); // Aktualisiere die Tabelle + } else { + // Fehler vom Server lesen und anzeigen + return response.text().then((errorMessage) => { + showPopup("Fehler beim Löschen des Mitarbeiters: " + errorMessage); + }); + } + }) + .catch(error => { + // Netzwerk- oder andere Fehler anzeigen + showPopup("Fehler beim Löschen des Mitarbeiters: " + error.message); + }); + } +} + +// Neuer Mitarbeiter hinzufügen + +// Popup schließen +function closePopup() { + document.getElementById("popupOverlay").style.display = "none"; + clearPopupFields(); +} + +// Felder im Popup leeren +function clearPopupFields() { + document.getElementById("vorname").value = ""; + document.getElementById("nachname").value = ""; + document.getElementById("telefonNr").value = ""; + document.getElementById("email").value = ""; + document.getElementById("strasse").value = ""; + document.getElementById("hausnummer").value = ""; + document.getElementById("ort").value = ""; + document.getElementById("password").value = ""; +} + + +// Popup-Nachricht anzeigen +function showPopup(message) { + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + + popupMessage.textContent = message; + popupOverlay.style.display = "flex"; +} + +// Popup-Nachricht mit Bestätigung anzeigen +function showPopupWithConfirmation(message, onConfirm) { + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + + popupMessage.textContent = message; + + const confirmButton = document.getElementById("popupConfirmButton"); + confirmButton.style.display = "inline-block"; + confirmButton.onclick = () => { + closePopup(); + onConfirm(); + }; + + popupOverlay.style.display = "flex"; +} diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/produktVerwaltung.jsp b/Projekt_SE2/src/main/webapp/chefFunktionen/produktVerwaltung.jsp deleted file mode 100644 index dc51a39..0000000 --- a/Projekt_SE2/src/main/webapp/chefFunktionen/produktVerwaltung.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> - - - - - - - EJSS Palast - Produktverwaltung - - - - - - - - - -
- EJS Logo -

EJSS Palast - Chef

-
- -
- - - - - -
-

- Willkommen zur Produktverwaltung
vom EJSS Palast

- Hier kannst du alle deine Produkt-Angebote verwalten, neue einfügen, löschen und aktuellisieren
- Falls du Unterstützung brauchst, steht dir unser Support-Team jederzeit zur Verfügung.
- Wir freuen uns, dich auf dem Weg zum Erfolg begleiten zu dürfen.
- Dein EJSS Palast Admin-Team -

-
-
-

Zurück zum Anfang

- - - - - diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp index 7400b84..c9f2eae 100644 --- a/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp +++ b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp @@ -29,8 +29,7 @@ diff --git a/Projekt_SE2/src/main/webapp/styles.css b/Projekt_SE2/src/main/webapp/styles.css index e2a2d68..da94206 100644 --- a/Projekt_SE2/src/main/webapp/styles.css +++ b/Projekt_SE2/src/main/webapp/styles.css @@ -363,7 +363,10 @@ footer { background-color: #333; color: #fff; text-align: center; - padding: 20px; + padding: 10px 20px; + font-size: 14px; + + } /*Öffnungszeiten */ @@ -1056,3 +1059,130 @@ footer .call-icon:hover { background-color: #6c2f3d; } +#popupMessage { + font-size: 16px; /* Standard-Schriftgröße */ + margin-bottom: 20px; +} + + +/* Popup-Overlay */ +#popupOverlay { + display: none; /* Popup ist standardmäßig ausgeblendet */ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); /* Hintergrund mit Transparenz */ + z-index: 1000; /* Sicherstellen, dass es über anderen Elementen liegt */ + justify-content: center; + align-items: center; +} + +/* Popup-Container */ +#popupContent { + background: white; + padding: 20px; + border-radius: 5px; + box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); + max-width: 400px; + width: 90%; + text-align: center; +} + +/* Popup-Fehlernachrichten */ +.popup-content { + background: white; + padding: 20px; + border-radius: 5px; + text-align: center; + max-width: 300px; + width: 90%; + margin: auto; + z-index: 1001; +} + +/* Verhindern, dass der Rest der Seite gescrollt wird */ +body.popup-open { + overflow: hidden; +} +/* Allgemeine Tabelleneinstellungen */ +#mitarbeiterTabelle { + width: 90%; + margin: 20px auto; + border-collapse: collapse; + font-family: Arial, sans-serif; + font-size: 14px; + +} + +#mitarbeiterTabelle thead { + background-color: #5b2c25; /* Dunkles Braun */ + color: white; + text-align: left; +} + +#mitarbeiterTabelle th, #mitarbeiterTabelle td { + padding: 12px; /* Gleichmäßiger Innenabstand */ + border: 1px solid #ddd; /* Dünne Rahmenlinie */ + text-align: left; +} + +#mitarbeiterTabelle tbody tr:nth-child(even) { + background-color: #f9f9f9; /* Hellgrauer Hintergrund für jede zweite Zeile */ +} + +#mitarbeiterTabelle tbody tr:hover { + background-color: #f1f1f1; /* Hellgrau beim Überfahren */ +} + +/* Styling der Buttons */ +#mitarbeiterTabelle button { + padding: 5px 12px; /* Innenabstand für die Buttons */ + font-size: 14px; + border: none; + border-radius: 4px; /* Runde Ecken */ + cursor: pointer; +} + +/* Eintragen-Button */ +#mitarbeiterTabelle button.eintragen { + background-color: #5b2c25; /* Dunkles Braun */ + color: white; + margin-right: 5px; /* Abstand zwischen Buttons */ +} + +/* Austragen-Button */ +#mitarbeiterTabelle button.austragen { + background-color: #ddd; /* Hellgrau */ + color: #333; /* Dunkle Schrift */ +} + +/* Hover-Effekt für Buttons */ +#mitarbeiterTabelle button:hover { + opacity: 0.9; /* Transparenz bei Hover */ +} + +#neuerMitarbeiterButton { + display: block; + margin: 20px auto; /* Zentriert den Button horizontal und fügt Abstand ein */ + padding: 10px 20px; /* Größe des Buttons */ + background-color: #6c3b2a; /* Dunkelbraune Farbe */ + color: #fff; /* Weißer Text */ + border: none; /* Entfernt den Rahmen */ + border-radius: 5px; /* Runde Ecken */ + font-size: 16px; /* Schriftgröße */ + font-weight: bold; + cursor: pointer; /* Zeigt einen Zeiger beim Hover */ + transition: background-color 0.3s ease; /* Animation für Hover */ +} + +#neuerMitarbeiterButton:hover { + background-color: #8a4c38; /* Hellere braune Farbe beim Hover */ +} + +#neuerMitarbeiterButton:active { + background-color: #56271a; /* Noch dunkler bei Klick */ +} + +