diff --git a/.gitignore b/.gitignore index 5ff6309..1165112 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,6 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +/database.db \ No newline at end of file diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/AdminController.java b/src/main/java/com/bib/essensbestellungsverwaltung/AdminController.java index 6494355..5092741 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/AdminController.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/AdminController.java @@ -1,4 +1,120 @@ +/*Schulte*/ + package com.bib.essensbestellungsverwaltung; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.PasswordField; +import javafx.scene.control.TextField; + public class AdminController { -} + + @FXML + TextField lastname; + @FXML + TextField firstname; + @FXML + TextField street; + @FXML + TextField number; + @FXML + TextField city; + @FXML + TextField plz; + @FXML + TextField email; + @FXML + PasswordField password; + + + + @FXML + protected void onBtSignUp(){ + + String ln = lastname.getText(); + String fn = firstname.getText(); + String st = street.getText(); + String nr = number.getText(); + String cityString = city.getText(); + String plzString = plz.getText(); + String emailString = email.getText(); + String pw = password.getText(); + + boolean userData = false; + boolean pwCorrect = false; + boolean emailCorrect = false; + + + if(ln.isEmpty() || fn.isEmpty() || st.isEmpty() ||nr.isEmpty() || cityString.isEmpty() || plzString.isEmpty()){ + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Felder"); + alert.setHeaderText("Felder nicht ausgefüllt"); + alert.setContentText("Bitte füllen sie alle Felder aus"); + alert.showAndWait(); + } + else { + userData = true; + } + + + if(!pw.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$")){ + + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Passwort"); + alert.setHeaderText("Ungültiges Passwort"); + alert.setContentText("Das Passwort benötigt mindestens: \n-8 Zeichen\n-einen Kleinbuchstaben\n-einen Großbuchstaben\n-ein Sonderzeichen\n-kein Leerzeichen"); + password.setText(""); + alert.showAndWait(); + } + else { + pwCorrect = true; + } + + if(!emailString.matches("^(.+)@(\\S+)$")){ + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("E-Mail"); + alert.setHeaderText("Ungültige E-Mail Adresse"); + alert.setContentText("Bitte geben sie eine gültige E-Mail Adresse an"); + email.setText(""); + alert.showAndWait(); + } + else{ + emailCorrect = true; + } + + //String[] userData = new String[]{ln,fn,pw,emailString}; + //String[] addressData = new String[]{st,nr,plzString,cityString}; + + + if(emailCorrect && pwCorrect && userData) { + Address address = new Address(st, nr, plzString, cityString); + Worker worker = new Worker(ln, fn, pw, emailString, address); + + + System.out.println(AccountMgr.createWorker(worker)); + + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("Bestätigung"); + alert.setHeaderText("Bestätigung"); + alert.setContentText("Mitarbeiter " + fn + " " + ln + " wurde Erfolgreich angelegt"); + alert.showAndWait(); + } + + } + + @FXML + protected void onBtCancel(){ + + lastname.setText(""); + firstname.setText(""); + street.setText(""); + number.setText(""); + city.setText(""); + plz.setText(""); + email.setText(""); + password.setText(""); + + } + + +} \ No newline at end of file diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodController.java b/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodController.java new file mode 100644 index 0000000..7370fdf --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodController.java @@ -0,0 +1,71 @@ +package com.bib.essensbestellungsverwaltung; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CreateFoodController { + @FXML + public TextField name; + @FXML + public TextArea description; + @FXML + public RadioButton isHauptgerichtRadio; + @FXML + public RadioButton isDessertRadio; + @FXML + public RadioButton isVegetarischRadio; + @FXML + public RadioButton isVeganRadio; + @FXML + public RadioButton isFleischRadio; + @FXML + public TextArea allergienTextBox; + @FXML + public Text responseText; + + @FXML + public void onAbbrechen(ActionEvent actionEvent) { + clearInputs(); + } + + @FXML + public void onHinzufügen(ActionEvent actionEvent) { + String gerichtName = name.getText(); + String beschreibung = description.getText(); + if(!isHauptgerichtRadio.isSelected() && !isDessertRadio.isSelected()){ + // art auswähelen + } + boolean isNachtisch = !isHauptgerichtRadio.isSelected(); + if(!isVegetarischRadio.isSelected() && !isVeganRadio.isSelected() && isFleischRadio.isSelected()){ + // Typ auswählen + } + int ft = isVeganRadio.isSelected() ? 1 : isVeganRadio.isSelected() ? 2 : 3; + FoodType foodType = new FoodType(ft, "Vegan"); + List allergies = new ArrayList<>(); + // TODO: allergien hinzufügen + + long id = FoodMgr.createFood(new Food(gerichtName, beschreibung, isNachtisch, foodType, allergies)); + System.out.println("Food created with id: " + id); + responseText.setText("New Food Created"); + clearInputs(); + } + + private void clearInputs(){ + name.setText(""); + description.setText(""); + isHauptgerichtRadio.setSelected(false); + isDessertRadio.setSelected(false); + isVeganRadio.setSelected(false); + isVegetarischRadio.setSelected(false); + isFleischRadio.setSelected(false); + allergienTextBox.setText(""); + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodplanController.java b/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodplanController.java new file mode 100644 index 0000000..e7290c7 --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/CreateFoodplanController.java @@ -0,0 +1,119 @@ +package com.bib.essensbestellungsverwaltung; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; + +import java.time.LocalDate; +import java.util.List; + +public class CreateFoodplanController { + @FXML + Button erstellenButton; + @FXML + DatePicker date; + + @FXML + ChoiceBox firstMeal; + + @FXML + ChoiceBox secondMeal; + + @FXML + ChoiceBox firstDessert; + + @FXML + ChoiceBox secondDessert; + + private List foods; + private List desserts; + private FoodPlan currentPlan; + + + @FXML + public void initialize() { + foods = FoodMgr.getFood(false); + desserts = FoodMgr.getFood(true); + ObservableList foodOptions = FXCollections.observableArrayList(foods.stream().map(food -> food.getId() + ": " + food.getName()).toList().toArray(new String[0])); + firstMeal.setItems(foodOptions); + secondMeal.setItems(foodOptions); + + ObservableList dessertOptions = FXCollections.observableArrayList(desserts.stream().map(dessert -> dessert.getId() + ": " + dessert.getName()).toList().toArray(new String[0])); + firstDessert.setItems(dessertOptions); + secondDessert.setItems(dessertOptions); + + date.setValue(LocalDate.now()); + onDateChange(null); + } + + @FXML + public void onPlanErstellen(ActionEvent actionEvent) { + if (date.getValue() == null || + firstMeal.getValue().toString().isBlank() || + secondMeal.getValue().toString().isBlank() || + firstDessert.getValue().toString().isBlank() || + secondDessert.getValue().toString().isBlank() + ) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Ungültige Eingabe"); + alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt"); + alert.setContentText("Es kann sein, dass Sie erst Gerichte erstellen müssen, um alle Felder auszufüllen"); + alert.showAndWait(); + return; + } + + + int firstMealId = Integer.parseInt(firstMeal.getValue().toString().split(":")[0]); + int secondMealId = Integer.parseInt(secondMeal.getValue().toString().split(":")[0]); + int firstDessertId = Integer.parseInt(firstDessert.getValue().toString().split(":")[0]); + int secondDessertId = Integer.parseInt(secondDessert.getValue().toString().split(":")[0]); + + + + Food f1 = foods.stream().filter(food -> food.getId() == firstMealId).findFirst().get(); + Food f2 = foods.stream().filter(food -> food.getId() == secondMealId).findFirst().get(); + Food d1 = desserts.stream().filter(dessert -> dessert.getId() == firstDessertId).findFirst().get(); + Food d2 = desserts.stream().filter(dessert -> dessert.getId() == secondDessertId).findFirst().get(); + + String d = date.getValue().toString(); + + if (currentPlan != null) { // update Foodplan + long id = currentPlan.getId(); + FoodPlan plan = new FoodPlan(id, d, f1, f2, d1, d2, false); + long i = FoodMgr.updateFood_plan(plan); + System.out.println("Foodplan updated: " + i); + } else { // create new Foodplan + FoodPlan plan = new FoodPlan(d, f1, f2, d1, d2); + long id = FoodMgr.createFood_plan(plan); + System.out.println("Foodplan created with id: " + id); + } + } + + @FXML + public void onAbbrechen(ActionEvent actionEvent) { + } + + @FXML + public void onDateChange(ActionEvent actionEvent) { + currentPlan = FoodMgr.getFoodPlan(date.getValue().toString()); + if (currentPlan != null) { // current FoodPlan already exists and can be edited + firstMeal.setValue(currentPlan.getFoodVegan().getId() + ": " + currentPlan.getFoodVegan().getName()); + secondMeal.setValue(currentPlan.getFoodSecond().getId() + ": " + currentPlan.getFoodSecond().getName()); + firstDessert.setValue(currentPlan.getDessertVegan().getId() + ": " + currentPlan.getDessertVegan().getName()); + secondDessert.setValue(currentPlan.getDessertSecond().getId() + ": " + currentPlan.getDessertSecond().getName()); + erstellenButton.setText("Plan updaten"); + } else { // current Foodplan does not exist + erstellenButton.setText("Plan erstellen"); + firstMeal.setValue(null); + secondMeal.setValue(null); + firstDessert.setValue(null); + secondDessert.setValue(null); + } + + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java b/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java index ac1bcc1..b1f612e 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/FoodMgr.java @@ -41,6 +41,20 @@ public class FoodMgr { return Database.insert("food_plan",food_planH,food_planD); } + /** + * updates a food_plan into the database + * @return number of rows affected or -1 on error + */ + public static long updateFood_plan(FoodPlan foodPlan){ + String[] food_planH = {"id","food1","food2","dessert1","dessert2"}; + String[] food_planD = {String.valueOf(foodPlan.getId()), + String.valueOf(foodPlan.getFoodVegan().getId()), + String.valueOf(foodPlan.getFoodSecond().getId()), + String.valueOf(foodPlan.getDessertVegan().getId()), + String.valueOf(foodPlan.getDessertSecond().getId())}; + return Database.update("food_plan",food_planH,food_planD); + } + /** * returns all non desserts or all desserts * @param isDessert true for only desserts false for non desserts @@ -84,6 +98,9 @@ public class FoodMgr { String[] food_planH = {"date"}; String[] food_planD = {date}; List entry = Database.select("food_plan",food_planH,food_planD); + if(entry.size() < 1){ + return null; + } String[] parts = entry.get(0).split(":"); Food foodVegan = getFoodById(Long.parseLong(parts[2])); Food foodSecond = getFoodById(Long.parseLong(parts[3])); diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/InvoiceController.java b/src/main/java/com/bib/essensbestellungsverwaltung/InvoiceController.java new file mode 100644 index 0000000..aebd7ba --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/InvoiceController.java @@ -0,0 +1,67 @@ +package com.bib.essensbestellungsverwaltung; + +import javafx.fxml.FXML; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Spinner; +import javafx.scene.input.MouseEvent; +import javafx.scene.text.Text; + +import java.util.Calendar; + +public class InvoiceController { + @FXML + Text responseText; + @FXML + ChoiceBox monatChoiceBox; + + @FXML + Spinner jahrSpinner; + + @FXML + public void initialize() { + monatChoiceBox.setValue(intToMonth(Calendar.getInstance().get(Calendar.MONTH) + 1)); + jahrSpinner.getValueFactory().setValue(Calendar.getInstance().get(Calendar.YEAR)); + } + + @FXML + void onRechnungErstellenClick(MouseEvent mouseEvent) { + responseText.setText(monatChoiceBox.getValue().toString() + jahrSpinner.getValue()); + // hier rechnung erstellen + } + + private int monthToInt(String month) { + return switch (month) { + case "Januar" -> 1; + case "Februar" -> 2; + case "März" -> 3; + case "April" -> 4; + case "Mai" -> 5; + case "Juni" -> 6; + case "Juli" -> 7; + case "August" -> 8; + case "September" -> 9; + case "Oktober" -> 10; + case "November" -> 11; + case "Dezember" -> 12; + default -> -1; + }; + } + + private String intToMonth(int month) { + return switch (month) { + case 1 -> "Januar"; + case 2 -> "Februar"; + case 3 -> "März"; + case 4 -> "April"; + case 5 -> "Mai"; + case 6 -> "Juni"; + case 7 -> "Juli"; + case 8 -> "August"; + case 9 -> "September"; + case 10 -> "Oktober"; + case 11 -> "November"; + case 12 -> "Dezember"; + default -> ""; + }; + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/LoginController.java b/src/main/java/com/bib/essensbestellungsverwaltung/LoginController.java index 9441666..4325d3b 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/LoginController.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/LoginController.java @@ -1,4 +1,4 @@ -/*Reshad Meher*/ +/*Richard Reiswich*/ package com.bib.essensbestellungsverwaltung; import javafx.fxml.FXML; @@ -7,8 +7,10 @@ import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; -import java.io.IOException; +import javafx.stage.Stage; +import java.io.IOException; +import java.util.HashMap; public class LoginController { @FXML @@ -16,27 +18,36 @@ public class LoginController { @FXML private PasswordField pfPassword; + + HashMap benutzerMap = new HashMap(); @FXML protected void onBtLoginClick() throws IOException { + benutzerMap.put("Reshad","1234"); String email = tfEmail.getText(); String password = pfPassword.getText(); - long loginPruefen = AccountMgr.login(email,password); - if(loginPruefen > 0){ + if(benutzerMap.containsKey(email) && benutzerMap.containsValue(password)){ FXMLLoader fxmlLoader = new FXMLLoader(StartViewApplication.class.getResource("menue-view.fxml")); Scene scene = new Scene(fxmlLoader.load(), 950,480); - StartViewApplication.primary.setScene(scene); + Stage stage = new Stage(); + stage.setTitle("Essen Bestellung im Kindergarten"); + stage.setScene(scene); + stage.show(); }else { Alert alert = new Alert(Alert.AlertType.ERROR,"Email oder Passwort ist falsch"); alert.showAndWait(); } + tfEmail.setText(""); pfPassword.setText(""); } @FXML - protected void onBtSingnupClick() throws IOException { + protected void changeToSignUp() throws IOException { FXMLLoader fxmlLoader = new FXMLLoader(StartViewApplication.class.getResource("signUp-view.fxml")); Scene scene = new Scene(fxmlLoader.load(), 950,480); - StartViewApplication.primary.setScene(scene); + Stage stage = new Stage(); + stage.setTitle("Essen Bestellung im Kindergarten"); + stage.setScene(scene); + stage.show(); } } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/MenueController.java b/src/main/java/com/bib/essensbestellungsverwaltung/MenueController.java index c52b33a..aaa7f7a 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/MenueController.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/MenueController.java @@ -17,9 +17,8 @@ import java.io.IOException; public class MenueController { - @FXML - private void onBtLoginClick(){ - Alert alert = new Alert(Alert.AlertType.ERROR, "Hi"); - alert.showAndWait(); + + private void setButtonActive(){ + } } diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/ParentMenuController.java b/src/main/java/com/bib/essensbestellungsverwaltung/ParentMenuController.java new file mode 100644 index 0000000..4f21d1b --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/ParentMenuController.java @@ -0,0 +1,77 @@ +package com.bib.essensbestellungsverwaltung; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.BorderPane; + +import java.io.IOException; + +public class ParentMenuController { + + @FXML + BorderPane contentView; + @FXML + Button essensplanButton; + @FXML + Button kinderButton; + @FXML + Button bestellungButton; + @FXML + Button einstellungenButton; + + @FXML + public void initialize() { + changePage("menue-view.fxml"); + setButtonActive(essensplanButton); + } + + + @FXML + public void onEssensplanClick(MouseEvent mouseEvent) { + setButtonActive(essensplanButton); + changePage("menue-view.fxml"); + } + + @FXML + public void onKinderClick(MouseEvent mouseEvent) { + setButtonActive(kinderButton); + changePage("child-view.fxml"); + } + + @FXML + public void onBestellungClick(MouseEvent mouseEvent) { + setButtonActive(bestellungButton); + changePage("dailyOrder-view.fxml"); + } + + @FXML + public void onEinstellungenClick(MouseEvent mouseEvent) { + setButtonActive(einstellungenButton); + changePage("menue-view.fxml"); + } + + @FXML + public void onAusloggenClick(MouseEvent mouseEvent) throws IOException { + StartViewApplication.changeScene("workerMenu-view.fxml"); + } + + private void changePage(String page) { + try { + Parent root = FXMLLoader.load(getClass().getResource(page)); + contentView.setCenter(root); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void setButtonActive(Button b) { + einstellungenButton.getStyleClass().remove("active"); + kinderButton.getStyleClass().remove("active"); + bestellungButton.getStyleClass().remove("active"); + essensplanButton.getStyleClass().remove("active"); + b.getStyleClass().add("active"); + } +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/WorkerMenuController.java b/src/main/java/com/bib/essensbestellungsverwaltung/WorkerMenuController.java new file mode 100644 index 0000000..42d7bcb --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/WorkerMenuController.java @@ -0,0 +1,95 @@ +package com.bib.essensbestellungsverwaltung; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.BorderPane; + +import java.io.IOException; + +public class WorkerMenuController { + @FXML + public BorderPane contentView; + + @FXML + Button tagesbestellungButton; + @FXML + Button wochenplanButton; + @FXML + Button monatsabrechnungButton; + @FXML + Button mitarbeiterButton; + @FXML + Button mahlzeitButton; + @FXML + Button einstellungenButton; + + @FXML + public void initialize() { + changePage("menue-view.fxml"); + setButtonActive(tagesbestellungButton); + } + + @FXML + public void onTagesbestellungenClick(MouseEvent mouseEvent) { + changePage("menue-view.fxml"); + setButtonActive(tagesbestellungButton); + } + + @FXML + public void onWochenplanClick(MouseEvent mouseEvent) { + changePage("createFoodplan-view.fxml"); + setButtonActive(wochenplanButton); + } + + @FXML + public void onMonatsabrechnungClick(MouseEvent mouseEvent) { + changePage("invoice-view.fxml"); + setButtonActive(monatsabrechnungButton); + } + + + @FXML + public void onMitarbeiterClick(MouseEvent mouseEvent) { + changePage("createCoworker-view.fxml"); + setButtonActive(mitarbeiterButton); + } + + + @FXML + public void onMahlzeitClick(MouseEvent mouseEvent) { + changePage("createFood-view.fxml"); + setButtonActive(mahlzeitButton); + } + + + public void onEinstellungenClick(MouseEvent mouseEvent) { + setButtonActive(einstellungenButton); + } + + @FXML + public void onAusloggenClick(MouseEvent mouseEvent) throws IOException { + StartViewApplication.changeScene("parentMenu-view.fxml"); + } + + private void changePage(String page) { + try { + Parent root = FXMLLoader.load(getClass().getResource(page)); + contentView.setCenter(root); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void setButtonActive(Button b) { + tagesbestellungButton.getStyleClass().remove("active"); + monatsabrechnungButton.getStyleClass().remove("active"); + wochenplanButton.getStyleClass().remove("active"); + mahlzeitButton.getStyleClass().remove("active"); + mitarbeiterButton.getStyleClass().remove("active"); + einstellungenButton.getStyleClass().remove("active"); + b.getStyleClass().add("active"); + } +} diff --git a/src/main/resources/com/bib/essensbestellungsverwaltung/adminMenue-view.fxml b/src/main/resources/com/bib/essensbestellungsverwaltung/adminMenue-view.fxml deleted file mode 100644 index 1577a9f..0000000 --- a/src/main/resources/com/bib/essensbestellungsverwaltung/adminMenue-view.fxml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -