From 1741131f7b4440495cf87780a33389001450d160 Mon Sep 17 00:00:00 2001 From: Eldar <3009675@stud.hs-mannheim.de> Date: Fri, 10 Jan 2025 01:10:18 +0100 Subject: [PATCH] Schichtenplan-Funktion --- .../AustragenSchichtServlet.java | 48 ++++++ .../EintragenSchichtServlet.java | 64 ++++++++ .../schichtenPlan/SchichtenDatenServlet.java | 59 +++++++ .../src/main/webapp/WEB-INF/lib/web.xml | 24 +++ Projekt_SE2/src/main/webapp/chef.jsp | 5 +- .../chefFunktionen/schichtenChefScript.js | 154 ++++++++++++++++++ .../webapp/chefFunktionen/schichtenPlan.jsp | 56 ++++++- Projekt_SE2/src/main/webapp/mitarbeiter.jsp | 6 +- .../datenMitarbeiter.jsp | 77 --------- .../mitarbeiterScript.js | 3 +- .../schichtenMAscript.js | 114 +++++++++++++ .../schichtenPlanMitarbeiter.jsp | 38 ++++- Projekt_SE2/src/main/webapp/startseite.jsp | 2 +- Projekt_SE2/src/main/webapp/styles.css | 123 ++++++++++++++ 14 files changed, 682 insertions(+), 91 deletions(-) create mode 100644 Projekt_SE2/src/main/java/com/cafe/schichtenPlan/AustragenSchichtServlet.java create mode 100644 Projekt_SE2/src/main/java/com/cafe/schichtenPlan/EintragenSchichtServlet.java create mode 100644 Projekt_SE2/src/main/java/com/cafe/schichtenPlan/SchichtenDatenServlet.java create mode 100644 Projekt_SE2/src/main/webapp/chefFunktionen/schichtenChefScript.js delete mode 100644 Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/datenMitarbeiter.jsp create mode 100644 Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenMAscript.js diff --git a/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/AustragenSchichtServlet.java b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/AustragenSchichtServlet.java new file mode 100644 index 0000000..055670e --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/AustragenSchichtServlet.java @@ -0,0 +1,48 @@ +package com.cafe.schichtenPlan; + +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("/AustragenSchichtServlet") +public class AustragenSchichtServlet extends HttpServlet { + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String schichtId = request.getParameter("schicht"); + String position = request.getParameter("position"); + + // Überprüfe die Position + if (position == null || (!position.equals("1") && !position.equals("2"))) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Ungültige Position."); + return; + } + + String query = position.equals("1") + ? "UPDATE Schichten SET mitarbeiter1 = NULL WHERE id = ?" + : "UPDATE Schichten SET mitarbeiter2 = NULL WHERE id = ?"; + + try (Connection conn = DriverManager.getConnection(DB_URL); + PreparedStatement updateStmt = conn.prepareStatement(query)) { + + updateStmt.setInt(1, Integer.parseInt(schichtId)); + int rowsAffected = updateStmt.executeUpdate(); + + if (rowsAffected > 0) { + System.out.println("Mitarbeiter erfolgreich ausgetragen aus Position: " + position); + } else { + System.out.println("Keine Änderungen vorgenommen. Position war bereits leer."); + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Die ausgewählte Position ist bereits leer."); + } + } 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/schichtenPlan/EintragenSchichtServlet.java b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/EintragenSchichtServlet.java new file mode 100644 index 0000000..7267524 --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/EintragenSchichtServlet.java @@ -0,0 +1,64 @@ +package com.cafe.schichtenPlan; + +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("/EintragenSchichtServlet") +public class EintragenSchichtServlet extends HttpServlet { + private static final String DB_URL = "jdbc:sqlite:C:/Users/asus/personal.db"; + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String schichtId = request.getParameter("schicht"); // Automatisch übergeben + String username = request.getParameter("username"); // Nur der Name des Mitarbeiters + + // Überprüfe, ob die Eingaben gültig sind + if (schichtId == null || username == null || schichtId.isEmpty() || username.isEmpty()) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Ungültige Eingabe."); + return; + } + + try (Connection conn = DriverManager.getConnection(DB_URL)) { + + + // Überprüfe, ob die Schicht bereits voll ist + String query = "SELECT mitarbeiter1, mitarbeiter2 FROM Schichten WHERE id = ?"; + try (PreparedStatement stmt = conn.prepareStatement(query)) { + stmt.setInt(1, Integer.parseInt(schichtId)); + ResultSet rs = stmt.executeQuery(); + + if (rs.next()) { + String mitarbeiter1 = rs.getString("mitarbeiter1"); + String mitarbeiter2 = rs.getString("mitarbeiter2"); + + if (mitarbeiter1 == null) { + query = "UPDATE Schichten SET mitarbeiter1 = ? WHERE id = ?"; + } else if (mitarbeiter2 == null) { + query = "UPDATE Schichten SET mitarbeiter2 = ? WHERE id = ?"; + } else { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Schicht ist bereits voll."); + return; + } + + try (PreparedStatement updateStmt = conn.prepareStatement(query)) { + updateStmt.setString(1, username); // Nur der Name wird eingefügt + updateStmt.setInt(2, Integer.parseInt(schichtId)); + updateStmt.executeUpdate(); + System.out.println("Mitarbeiter erfolgreich eingetragen: " + username); + } + } else { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Schicht-ID 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/schichtenPlan/SchichtenDatenServlet.java b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/SchichtenDatenServlet.java new file mode 100644 index 0000000..b9cb281 --- /dev/null +++ b/Projekt_SE2/src/main/java/com/cafe/schichtenPlan/SchichtenDatenServlet.java @@ -0,0 +1,59 @@ +package com.cafe.schichtenPlan; + +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.io.PrintWriter; +import java.sql.*; + +@WebServlet("/SchichtenDatenServlet") +public class SchichtenDatenServlet 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 (PrintWriter out = response.getWriter()) { + try { + Class.forName("org.sqlite.JDBC"); + } catch (ClassNotFoundException ex) { + ex.printStackTrace(); + out.println("
Error: SQLite JDBC Driver not found.
"); + return; + } + + String query = "SELECT * FROM Schichten ORDER BY id"; + + try (Connection conn = DriverManager.getConnection(DB_URL); + PreparedStatement stmt = conn.prepareStatement(query)) { + + ResultSet rs = stmt.executeQuery(); + + StringBuilder csvOutput = new StringBuilder(); + + // Spaltenüberschriften hinzufügen (optional) + csvOutput.append("id,datum,tag,zeitraum,mitarbeiter1,mitarbeiter2\n"); + + while (rs.next()) { + csvOutput.append(rs.getInt("id")).append(",") + .append(rs.getString("datum")).append(",") + .append(rs.getString("tag")).append(",") + .append(rs.getString("zeitraum")).append(",") + .append(rs.getString("mitarbeiter1") != null ? rs.getString("mitarbeiter1") : "").append(",") + .append(rs.getString("mitarbeiter2") != null ? rs.getString("mitarbeiter2") : "").append("\n"); + } + + response.getWriter().print(csvOutput.toString()); + + } catch (SQLException e) { + e.printStackTrace(); + } + } +} +} \ No newline at end of file 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 cb55dc4..e1a30bc 100644 --- a/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml +++ b/Projekt_SE2/src/main/webapp/WEB-INF/lib/web.xml @@ -46,4 +46,28 @@
Willkommen zum Schichtenplan
vom EJSS Palast
- Hier kannst du alle Schichten von deinen Mitarbeiter einsehen.
+ Hier kannst du alle Schichten von deinen Mitarbeiter einsehen,
+ Mitarbeiter in die Schichten eintragen oder bei Bedarf austragen.
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.
+ Achtung: Der erste Eintrag entspricht Mitarbeiter 1 und der zweite Eintrag Mitarbeiter 2.
Dein EJSS Palast Admin-Team
Datum | +Tag | +Zeitraum | +Mitarbeiter 1 (12:00 - 17:00) | +Mitarbeiter 2 (17:00 - Ende) | +Aktionen | +
---|