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 @@ snacksServlet /snacksServlet + + + AustragenSchichtServlet + com.cafe.schichtenPlan + + + AustragenSchichtServlet + /AustragenSchichtServlet + + + EintragenSchichtServlet + com.cafe.schichtenPlan + + + EintragenSchichtServlet + /EintragenSchichtServlet + + + SchichtenDatenServlet + com.cafe.schichtenPlan + + + SchichtenDatenServlet + /SchichtenDatenServlet \ 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 0d99cc5..a205a8b 100644 --- a/Projekt_SE2/src/main/webapp/chef.jsp +++ b/Projekt_SE2/src/main/webapp/chef.jsp @@ -55,9 +55,8 @@ 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.
- Organisiere Veranstaltungen,
pflege Speise- und Getränkekarten,
- und behalte den Überblick über deine Buchungen
- und die Performance deines Cafés.

+ Pflege die Speise- und Getränkekarte, 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.
Dein EJSS Palast Admin-Team diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenChefScript.js b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenChefScript.js new file mode 100644 index 0000000..6ae4572 --- /dev/null +++ b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenChefScript.js @@ -0,0 +1,154 @@ +let currentSchichtId = null; // Variable zum Speichern der aktuellen Schicht-ID + +document.addEventListener("DOMContentLoaded", () => { + loadSchichten(); +}); + +// Lädt die Schichtdaten und zeigt sie in der Tabelle an +function loadSchichten() { + fetch("/Projekt_SE2/SchichtenDatenServlet") + .then(response => response.text()) + .then(csv => { + const rows = csv.trim().split("\n").slice(1); // Zeilen außer der Kopfzeile + const tbody = document.querySelector("#schichtenTabelle tbody"); + tbody.innerHTML = ""; + + rows.forEach(row => { + const columns = row.split(","); + const tr = document.createElement("tr"); + tr.innerHTML = ` + ${columns[1]} + ${columns[2]} + ${columns[3]} + ${columns[4] || "Frei"} + ${columns[5] || "Frei"} + + + + + `; + tbody.appendChild(tr); + }); + }) + .catch(error => showPopup("Fehler beim Laden der Schichten: " + error.message)); +} + +// Zeigt das Popup-Fenster zur Namenseingabe an +function showEintragenPopup(schichtId) { + currentSchichtId = schichtId; // Speichere die Schicht-ID + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + const popupInputSection = document.getElementById("popupInputSection"); + const popupCloseButton = document.getElementById("popupCloseButton"); + + popupMessage.textContent = "Bitte gib deinen Namen ein:"; + popupInputSection.style.display = "block"; // Zeige das Eingabefeld + popupCloseButton.style.display = "none"; // Verberge die Schließen-Schaltfläche + popupOverlay.style.display = "flex"; +} + +// Bestätigt die Eintragung und sendet die Daten an den Server +function confirmEintragen() { + const username = document.getElementById("popupInput").value; + + if (username) { + fetch(`/Projekt_SE2/EintragenSchichtServlet`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: `schicht=${currentSchichtId}&username=${encodeURIComponent(username)}` + }) + .then(response => { + if (!response.ok) { + return response.text().then(text => { throw new Error(text); }); + } + showPopup("Erfolgreich eingetragen!"); // Zeige Erfolgsmeldung + loadSchichten(); // Tabelle neu laden + }) + .catch(error => { + if (error.message.includes("Schicht ist bereits voll")) { + showPopup("Diese Schicht ist bereits voll. Wählen Sie eine andere Schicht!"); + } else { + showPopup("Fehler beim Eintragen: " + error.message); + } + }); + } else { + showPopup("Bitte gib einen gültigen Namen ein."); // Warnung bei leerem Namen + } +} + +// Mitarbeiter aus einer Schicht austragen +let selectedSchichtId = null; + +function austragenSchicht(schichtId) { + selectedSchichtId = schichtId; // Speichere die Schicht-ID + const positionPopupOverlay = document.getElementById("positionPopupOverlay"); + positionPopupOverlay.style.display = "flex"; // Zeige das Popup an +} + +// Wird aufgerufen, wenn der Benutzer die Position bestätigt +function submitAustragen() { + const form = document.getElementById("positionForm"); + const formData = new FormData(form); + const mitarbeiterPosition = formData.get("position"); // Hole die ausgewählte Position + + fetch(`/Projekt_SE2/AustragenSchichtServlet`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: `schicht=${selectedSchichtId}&position=${mitarbeiterPosition}` // Schicht-ID und Position übergeben + }) + .then(response => { + if (!response.ok) { + return response.text().then(text => { throw new Error(text); }); + } + showPopup("Erfolgreich ausgetragen!"); + loadSchichten(); // Tabelle neu laden + }) + .catch(error => showPopup("Fehler beim Austragen: " + error.message)) + .finally(() => closePositionPopup()); // Schließe das Popup in jedem Fall +} + +// Schließt das Austragen-Popup +function closePositionPopup() { + const positionPopupOverlay = document.getElementById("positionPopupOverlay"); + positionPopupOverlay.style.display = "none"; + selectedSchichtId = null; // Zurücksetzen der Schicht-ID +} +function closeEintragenPopup() { + const positionPopupOverlay = document.getElementById("popupOverlay"); + const popupInput = document.getElementById("popupInput"); + + // Popup ausblenden + positionPopupOverlay.style.display = "none"; + + // Eingabefeld leeren + if (popupInput) { + popupInput.value = ""; + } + + // Zurücksetzen der Schicht-ID + selectedSchichtId = null; +} + +// Zeigt das Popup-Fenster an +function showPopup(message) { + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + const popupInputSection = document.getElementById("popupInputSection"); + const popupCloseButton = document.getElementById("popupCloseButton"); + + popupMessage.textContent = message; + popupInputSection.style.display = "none"; // Verberge das Eingabefeld + popupCloseButton.style.display = "inline-block"; // Zeige die Schließen-Schaltfläche + popupOverlay.style.display = "flex"; +} + +// Schließt das Popup-Fenster +function closePopup() { + const popupOverlay = document.getElementById("popupOverlay"); + document.getElementById("popupInput").value = ""; // Eingabefeld zurücksetzen + popupOverlay.style.display = "none"; +} diff --git a/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp index 6351bfe..7400b84 100644 --- a/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp +++ b/Projekt_SE2/src/main/webapp/chefFunktionen/schichtenPlan.jsp @@ -49,16 +49,67 @@ - + + +
+
+

Nachricht

+ + +
+
+ + +
+
+

Wähle den Mitarbeiter zum Austragen

+
+
+

+ + +
+
+
+

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

+ +

Schichtenübersicht

+ + + + + + + + + + + + + + +
DatumTagZeitraumMitarbeiter 1 (12:00 - 17:00)Mitarbeiter 2 (17:00 - Ende)Aktionen
+

Zurück zum Anfang

+ diff --git a/Projekt_SE2/src/main/webapp/mitarbeiter.jsp b/Projekt_SE2/src/main/webapp/mitarbeiter.jsp index 59570b8..7f01cbe 100644 --- a/Projekt_SE2/src/main/webapp/mitarbeiter.jsp +++ b/Projekt_SE2/src/main/webapp/mitarbeiter.jsp @@ -29,8 +29,7 @@ @@ -49,8 +48,7 @@

Willkommen im Mitarbeiterbereich
vom EJSS Palast

- Du bist eingeloggt als: ...
- Plane deine Schichten,
und behalte den Überblick über deine persönliche Daten

+ Plane deine Schichten,
und behalte den Überblick über deine Arbeitszeiten

Deine Arbeit macht den Unterschied und trägt dazu bei, unseren Gästen unvergessliche Momente zu bereiten.
Solltest du Unterstützung benötigen, steht dir unser Team jederzeit zur Seite.
Vielen Dank für deinen Einsatz!
diff --git a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/datenMitarbeiter.jsp b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/datenMitarbeiter.jsp deleted file mode 100644 index 240d11b..0000000 --- a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/datenMitarbeiter.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> - - - - - - - EJSS Palast - Pers. Daten - - - - - - - - - -

- EJS Logo -

EJSS Palast - Mitarbeiter

-
- -
- - - - -
-

Willkommen zum Persönlichem-Bereich
vom EJSS Palast

- Du bist eingeloggt als: ....
- Hier kannst du deine persönliche Daten einsehen und verwalten.
- Vielen Dank für deinen Einsatz!
- Dein EJSS Palast Team
-

-
-
-

Zurück zum Anfang

-
- -

- Anschrift:
- Musterstrasse 10
- 68163 Mannheim
-

-
- - - -
-
- - - - diff --git a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/mitarbeiterScript.js b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/mitarbeiterScript.js index 2c8701a..1dd94b5 100644 --- a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/mitarbeiterScript.js +++ b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/mitarbeiterScript.js @@ -1,3 +1,4 @@ + // Öffnet das Logout-Popup function openLogoutPopup() { const popup = document.getElementById("logoutPopup"); @@ -17,4 +18,4 @@ function closeLogoutPopup() { // Bestätigt die Abmeldung und leitet zur Startseite weiter function confirmLogout() { window.location.href = "/Projekt_SE2/startseite.jsp"; // Weiterleitung zur Startseite -} +} \ No newline at end of file diff --git a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenMAscript.js b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenMAscript.js new file mode 100644 index 0000000..51c8908 --- /dev/null +++ b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenMAscript.js @@ -0,0 +1,114 @@ +let currentSchichtId = null; // Variable zum Speichern der aktuellen Schicht-ID + +document.addEventListener("DOMContentLoaded", () => { + loadSchichten(); +}); + +// Lädt die Schichtdaten und zeigt sie in der Tabelle an +function loadSchichten() { + fetch("/Projekt_SE2/SchichtenDatenServlet") + .then(response => response.text()) + .then(csv => { + const rows = csv.trim().split("\n").slice(1); // Zeilen außer der Kopfzeile + const tbody = document.querySelector("#schichtenTabelle tbody"); + tbody.innerHTML = ""; + + rows.forEach(row => { + const columns = row.split(","); + const tr = document.createElement("tr"); + tr.innerHTML = ` + ${columns[1]} + ${columns[2]} + ${columns[3]} + ${columns[4] || "Frei"} + ${columns[5] || "Frei"} + + + + `; + tbody.appendChild(tr); + }); + }) + .catch(error => showPopup("Fehler beim Laden der Schichten: " + error.message)); +} + +// Zeigt das Popup-Fenster zur Namenseingabe an +function showEintragenPopup(schichtId) { + currentSchichtId = schichtId; // Speichere die Schicht-ID + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + const popupInputSection = document.getElementById("popupInputSection"); + const popupCloseButton = document.getElementById("popupCloseButton"); + + popupMessage.textContent = "Bitte gib deinen Namen ein:"; + popupInputSection.style.display = "block"; // Zeige das Eingabefeld + popupCloseButton.style.display = "none"; // Verberge die Schließen-Schaltfläche + popupOverlay.style.display = "flex"; +} + +// Bestätigt die Eintragung und sendet die Daten an den Server +function confirmEintragen() { + const username = document.getElementById("popupInput").value; + + if (username) { + fetch(`/Projekt_SE2/EintragenSchichtServlet`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + body: `schicht=${currentSchichtId}&username=${encodeURIComponent(username)}` + }) + .then(response => { + if (!response.ok) { + return response.text().then(text => { throw new Error(text); }); + } + showPopup("Erfolgreich eingetragen!"); // Zeige Erfolgsmeldung + loadSchichten(); // Tabelle neu laden + }) + .catch(error => { + if (error.message.includes("Schicht ist bereits voll")) { + showPopup("Diese Schicht ist bereits voll. Wählen Sie eine andere Schicht!"); + } else { + showPopup("Fehler beim Eintragen: " + error.message); + } + }); + } else { + showPopup("Bitte gib einen gültigen Namen ein."); // Warnung bei leerem Namen + } +} + +function closeEintragenPopup() { + const positionPopupOverlay = document.getElementById("popupOverlay"); + const popupInput = document.getElementById("popupInput"); + + // Popup ausblenden + positionPopupOverlay.style.display = "none"; + + // Eingabefeld leeren + if (popupInput) { + popupInput.value = ""; + } + + // Zurücksetzen der Schicht-ID + selectedSchichtId = null; +} + +// Zeigt das Popup-Fenster an +function showPopup(message) { + const popupOverlay = document.getElementById("popupOverlay"); + const popupMessage = document.getElementById("popupMessage"); + const popupInputSection = document.getElementById("popupInputSection"); + const popupCloseButton = document.getElementById("popupCloseButton"); + + popupMessage.textContent = message; + popupInputSection.style.display = "none"; // Verberge das Eingabefeld + popupCloseButton.style.display = "inline-block"; // Zeige die Schließen-Schaltfläche + popupOverlay.style.display = "flex"; +} + +// Schließt das Popup-Fenster +function closePopup() { + const popupOverlay = document.getElementById("popupOverlay"); + document.getElementById("popupInput").value = ""; // Eingabefeld zurücksetzen + popupOverlay.style.display = "none"; +} diff --git a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenPlanMitarbeiter.jsp b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenPlanMitarbeiter.jsp index a17469d..cdcc879 100644 --- a/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenPlanMitarbeiter.jsp +++ b/Projekt_SE2/src/main/webapp/mitarbeiterFunktionen/schichtenPlanMitarbeiter.jsp @@ -29,14 +29,13 @@
- + + + +
+
+

Nachricht

+ + +
+
+

Willkommen zur Schichtplanung
vom EJSS Palast

- Du bist eingeloggt als: ....
Hier kannst du deine Schichten einsehen und auswählen,
um deinen Beitrag zu unserem Team zu planen.

Bitte beachte, dass du dich nicht selbst aus einer Schicht austragen kannst.
Falls du dich abmelden möchtest,
kontaktiere bitte den Chef oder die zuständige Person.

+ Achtung: Der erste Eintrag entspricht Mitarbeiter 1 und der zweite Eintrag Mitarbeiter 2.
Vielen Dank für deinen Einsatz!
Dein EJSS Palast Team

+ +

Schichtenübersicht

+ + + + + + + + + + + + + + +
DatumTagZeitraumMitarbeiter 1 (12:00 - 17:00)Mitarbeiter 2 (17:00 - Ende)Aktionen

Zurück zum Anfang

+ diff --git a/Projekt_SE2/src/main/webapp/startseite.jsp b/Projekt_SE2/src/main/webapp/startseite.jsp index 4c42731..c6357ec 100644 --- a/Projekt_SE2/src/main/webapp/startseite.jsp +++ b/Projekt_SE2/src/main/webapp/startseite.jsp @@ -111,7 +111,7 @@ 12:00 - 22:00 12:00 - 23:00 12:00 - 23:00 - 13:00 - 22:00 + 12:00 - 22:00 diff --git a/Projekt_SE2/src/main/webapp/styles.css b/Projekt_SE2/src/main/webapp/styles.css index 76c7331..e2a2d68 100644 --- a/Projekt_SE2/src/main/webapp/styles.css +++ b/Projekt_SE2/src/main/webapp/styles.css @@ -933,3 +933,126 @@ footer .call-icon:hover { } } + /* Tabelle stylen */ + #schichtenTabelle { + width: 90%; + margin: 20px auto; + border-collapse: collapse; + font-family: Arial, sans-serif; + } + + #schichtenTabelle th, #schichtenTabelle td { + border: 1px solid #ddd; + padding: 12px; + text-align: center; + } + + #schichtenTabelle th { + background-color: #623c3d; + color: white; + font-weight: bold; + } + + #schichtenTabelle tr:nth-child(even) { + background-color: #f9f9f9; + } + + #schichtenTabelle tr:hover { + background-color: #f1f1f1; + } + + button { + padding: 8px 12px; + border: none; + border-radius: 4px; + cursor: pointer; + } + + button:hover { + background-color: #ddd; + } + + /* Popup-Styling */ + #popupOverlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: none; + align-items: center; + justify-content: center; + z-index: 1000; + } + + #popupContent { + background: white; + padding: 20px; + border-radius: 10px; + width: 50%; + max-width: 400px; + text-align: center; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); + } + + #popupContent h3 { + margin-bottom: 20px; + color: #333; + } + + #popupContent button { + background-color: #623c3d; + color: white; + border: none; + padding: 10px 20px; + border-radius: 5px; + cursor: pointer; + } + + #popupContent button:hover { + background-color: #6c2f3d; + } + +#positionPopupOverlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: none; + align-items: center; + justify-content: center; + z-index: 1000; +} + +#positionPopupContent { + background: white; + padding: 20px; + border-radius: 10px; + width: 50%; + max-width: 400px; + text-align: center; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); +} + +#positionPopupContent h3 { + margin-bottom: 20px; + color: #333; +} + +#positionPopupContent button { + background-color: #623c3d; + color: white; + border: none; + padding: 10px 20px; + border-radius: 5px; + cursor: pointer; + margin: 5px; +} + +#positionPopupContent button:hover { + background-color: #6c2f3d; +} +