From c0d33f1aa99d2b0f402fab6371d3cd94a91c566a Mon Sep 17 00:00:00 2001 From: Eldar <3009675@stud.hs-mannheim.de> Date: Sat, 11 Jan 2025 14:12:50 +0100 Subject: [PATCH] Finale-Version --- .../classes/com/cafe/login/LoginServlet.class | Bin 4037 -> 4293 bytes .../java/com/cafe/login/LoginServlet.java | 125 +++++---- .../verwaltung/AktualisiereDatenServlet.java | 129 +++++++++ .../LoeschenMitarbeiterServlet.java | 46 ++++ .../verwaltung/MitarbeiterDatenServlet.java | 63 +++++ .../verwaltung/NeuerMitarbeiterServlet.java | 80 ++++++ .../src/main/webapp/WEB-INF/lib/web.xml | 32 +++ Projekt_SE2/src/main/webapp/chef.jsp | 5 +- .../chefFunktionen/mitarbeiterVerwaltung.jsp | 88 +++++- .../mitarbeiterVerwaltungScript.js | 257 ++++++++++++++++++ .../chefFunktionen/produktVerwaltung.jsp | 80 ------ .../webapp/chefFunktionen/schichtenPlan.jsp | 3 +- Projekt_SE2/src/main/webapp/styles.css | 132 ++++++++- 13 files changed, 892 insertions(+), 148 deletions(-) create mode 100644 Projekt_SE2/src/main/java/com/cafe/verwaltung/AktualisiereDatenServlet.java create mode 100644 Projekt_SE2/src/main/java/com/cafe/verwaltung/LoeschenMitarbeiterServlet.java create mode 100644 Projekt_SE2/src/main/java/com/cafe/verwaltung/MitarbeiterDatenServlet.java create mode 100644 Projekt_SE2/src/main/java/com/cafe/verwaltung/NeuerMitarbeiterServlet.java create mode 100644 Projekt_SE2/src/main/webapp/chefFunktionen/mitarbeiterVerwaltungScript.js delete mode 100644 Projekt_SE2/src/main/webapp/chefFunktionen/produktVerwaltung.jsp diff --git a/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class b/Projekt_SE2/build/classes/com/cafe/login/LoginServlet.class index 915e9e463b0595fb382caf74fa1ca4618c78a6b4..25d3b18eb0efb5765afbed2b16ab963faefd6813 100644 GIT binary patch delta 1654 zcmb_b?N3`}6#t#umwVgZwpv)1%R~y>z&Qa8Gr@~YrG+iPDpDpgUuNwt6;@hyTcA!| z73X9+oN$#f-*rxWO=d`N^@I4q`9TvCm+TKP@tfZk7o#TPxt9TEiyxNQ-20s0InVDo z=XXw@d#>VKrThE8zxo=$-T3?q_i@La{*0ci%N|G#NK4p_hp|`0BLx3od^BF4 zil>wH;Z!`EmGLOz1hGG(N8>{pVY4wMlo(xt++poExsiY-Vjm%N#nEUc*OnPc?`zE` zwBg)9CM}~Mel9Vr52SOkTs*PAM~^2o36C2m95EU+es#2NN+B&`h!C{0vBvs{J}|23 zyW;71QqyH*Fl_WVw^!=OiO3R4R*B(EI;|y^D~({(n0M}U=5bKO69$PDwkPqFu~Dp% z@;D@;fM<+u@#exf4vTn>5LnI9tz}12xtNxd@jQ+Y>}f5ZBiL@*vPZ%M`+6p&c`%L_ zWxRyV1XohyZn&qU8J(2zve~60k;-J5m&c?BIwswi#;YQX6~WesdyKzCx9v5|7?M=G zbJiT>Ny55SEwTGLSEol1v^=4z)7oA8hprlP)BK=xl*niN<~p?{2p86)1PX4z22`UQ zb+{2t2qBD0v|%H(TDxM;qCa6BeSH!b~lW0(U zfftH6Dj-^`_`ZXicN%ew_@wDD|2SjG#8MHj5YCvaX7fCg=Fp(ZE5~rm_|X%pm{R0L z^KkR!!zRbImd*G{4rx=0YjIVyN*X6}V*CGE57ln1vyfTGqz53pj)dUTdQyttjkHX?{SP{#MI2F>hk$33_U?Y#D(g_{Ut2oY|ijYaQZp}YAbiEt}zIFB84 zJ=&>Ig$~+^PTGbjg>f(KLKpR-n`RKB3)n3Lalfzu51^FGALg=rd9jYm@{dsk&x$Nm z!$^R@+zCcDW;*aX-hdrJLByLJv!hI~;VniE)X)!j8}C3Wu<9@IF5csCA9{J@r{JS1 zOyL7F#*%JZjLoL$2oh1h{FpG|TtX85e}`B0r$z9iTPuUS1qzJD ztsEW9Ghak`<4<^7*m%8vK)BLhLhCgYu=4+R&cM}0j0t~vXx7QooHK`vkMJ>DAJ6#{ Mem{K>l*MQN03P#UXaE2J delta 1385 zcmb`G-ES0S6vlsNc6Vk!X12J1byBd!6e(z_q(S3o0fF)%(ugG*fr3jNm$qwL+HI*+ z-P)E4Rz)1~6F(9Xh*#E_sOyDINa}@LnRsVn3<-aP#E56cO4S=fVlwkS&pG?N?|I%c zXXjST)uzAy{hM!rO?>is`g9_A$lN0xL14C;hsawz75r@0#17LL{AO-2eF_%O1e>he zVn^r-_FFs59-g%*2A^8Bv0nOu%hsx74@YeV7!0miYsy0$vltd~-TC2s)8Nr!(_{YN zP_fkRmuyCOPKfvVBPAi$uzFvTQH=-sihhP6Ua)zQl|riEm)c7MUA=`cJ7)6|RYIb( z*f*%U9>y~GjHNlj%NA3@;;2+H-&<(f>l_*AJC;9O^leUZDws(&uAk;Li&urEHypL^ zd8Bou)9){J_4V4k9-dy+ul2NQzO!fVK)%!eVrA--h!cF4KEHYiDVDOBYL?-0CpD~9 z_5ioDg<7_;f=9W7L(~VOnL@ctj4Ci3Y0K^N;<*D}LOfGED`$VrK`$v@O1!k2bmJAC zHt;fTCVp3i?ig++ad$+-v&D1VOoe{I%evVL+OYR%cC)$T6`nU}Yjm^Ukq&<;i*5|L z%EyHUHyH-W3KPOisA`#4U8LEw7q$f*PF?M!YtM$eTjqC%n$*H^!8xbSpLA2RH%upP z+O)G^`hRevj#IPY6}Qe`@gkmQF5Efz$*C((y5_7V%`bVSafVyi$wA(XX1<&AiW9nq z*g!WwMDe8vmovmz*Q(~ z;%Z1pGj7D0X2OU^7}F_2|0>ILU5mjzn5$Jc2+aI*#e^U%K)2~I9rUN>!Ouig(^$OoKL%xV`u)c2$P$RHp80S62Y A>Hq)$ 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

@@ -74,7 +153,8 @@
- + + 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

-
- -

- Anschrift:
- Musterstrasse 10
- 68163 Mannheim
-

-
- - - -
-
- - - - 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 */ +} + +