Merge remote-tracking branch 'origin/stable' into stable
# Conflicts: # src/main/resources/com/bib/essensbestellungsverwaltung/child-view.fxml
This commit is contained in:
commit
3a2288f8c8
1
.gitignore
vendored
1
.gitignore
vendored
@ -38,3 +38,4 @@ build/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
/database.db
|
/database.db
|
||||||
|
/Rechnungen/**
|
5
pom.xml
5
pom.xml
@ -45,6 +45,11 @@
|
|||||||
<artifactId>sqlite-jdbc</artifactId>
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
<version>3.40.0.0</version>
|
<version>3.40.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.controlsfx</groupId>
|
||||||
|
<artifactId>controlsfx</artifactId>
|
||||||
|
<version>11.1.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
12
readme.md
12
readme.md
@ -1,3 +1,13 @@
|
|||||||
# Essensbestellungsverwaltung
|
# Essensbestellungsverwaltung
|
||||||
|
|
||||||
test
|
---
|
||||||
|
|
||||||
|
### Anleitung zum Benutzen
|
||||||
|
Beim ersten Start des Programms wird die Datenbank erstellt und der erste Benutzer der angelegt wird, ist ein Mitarbeiter Account. Danach sind alle weiteren User für Eltern. Weitere Mitarbeiter können über das Mitarbeiter Menu erstellt werden.
|
||||||
|
|
||||||
|
##### Desweitern werden Folgende Beispiel Accounts erstellt:
|
||||||
|
Ein Eltern Account mit Kindern:
|
||||||
|
testparent@test.de/test
|
||||||
|
|
||||||
|
Ein Mitarbeiter Account:
|
||||||
|
testworker@test.de/test
|
||||||
|
@ -13,6 +13,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* A collection of functions loosely related to account management
|
* A collection of functions loosely related to account management
|
||||||
* Acts as an abstraction layer to the database
|
* Acts as an abstraction layer to the database
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public class AccountMgr {
|
public class AccountMgr {
|
||||||
@ -21,6 +22,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates a user with createUser(...) and adds its id to the 'worker' table
|
* creates a user with createUser(...) and adds its id to the 'worker' table
|
||||||
|
*
|
||||||
* @param worker the worker to be created
|
* @param worker the worker to be created
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -34,6 +36,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates a user with createUser(...) and adds its id to the 'parent' table
|
* creates a user with createUser(...) and adds its id to the 'parent' table
|
||||||
|
*
|
||||||
* @param parent the parent to be created
|
* @param parent the parent to be created
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -47,6 +50,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* adds a user to the database
|
* adds a user to the database
|
||||||
|
*
|
||||||
* @param user the user to be created
|
* @param user the user to be created
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -67,6 +71,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* adds an address to the database
|
* adds an address to the database
|
||||||
|
*
|
||||||
* @param address the address to be created
|
* @param address the address to be created
|
||||||
* @return id or -1
|
* @return id or -1
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -79,6 +84,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* adds a child and allergies to the database
|
* adds a child and allergies to the database
|
||||||
|
*
|
||||||
* @param child the child to be created
|
* @param child the child to be created
|
||||||
* @return id of child or -1
|
* @return id of child or -1
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -99,7 +105,51 @@ public class AccountMgr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a User(Worker | Parent) for a given id or null if no unique id was found
|
* update Child
|
||||||
|
*
|
||||||
|
* @param child the child to be updated
|
||||||
|
* @return id of child
|
||||||
|
* @author Johannes Kantz
|
||||||
|
*/
|
||||||
|
protected static long updateChild(Child child) {
|
||||||
|
String[] childH = { "id", "name", "firstname", "addressid" };
|
||||||
|
String[] childD = { String.valueOf(child.getId()), child.getName(), child.getFirstname(),
|
||||||
|
String.valueOf(child.getAddress().getId()) };
|
||||||
|
long updates = Database.update("child", childH, childD);
|
||||||
|
String[] child_allergyH = { "childid", "allergyid", "severityid" };
|
||||||
|
Database.select("child_allergy", new String[] { "childid" }, new String[] { String.valueOf(child.getId()) })
|
||||||
|
.stream().forEach(row -> {
|
||||||
|
String allergyId = row.split(":")[0];
|
||||||
|
Database.delete("child_allergy", Integer.parseInt(allergyId));
|
||||||
|
});
|
||||||
|
for (AllergySeverity allergy : child.getAllergies()) {
|
||||||
|
String sId = String.valueOf(child.getId());
|
||||||
|
String sAllergyId = String.valueOf(allergy.getAllergy().getId());
|
||||||
|
String sSeverityId = String.valueOf(allergy.getSeverityId());
|
||||||
|
String[] child_allergyD = { sId, sAllergyId, sSeverityId };
|
||||||
|
Database.insert("child_allergy", child_allergyH, child_allergyD);
|
||||||
|
}
|
||||||
|
return updates;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete Child
|
||||||
|
*
|
||||||
|
* @author Johannes Kantz
|
||||||
|
*/
|
||||||
|
protected static void deleteChildWithId(long id) {
|
||||||
|
Database.delete("child", id);
|
||||||
|
Database.select("child_allergy", new String[] { "childid" }, new String[] { String.valueOf(id) }).stream()
|
||||||
|
.forEach(row -> {
|
||||||
|
String allergyId = row.split(":")[0];
|
||||||
|
Database.delete("child_allergy", Integer.parseInt(allergyId));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a User(Worker | Parent) for a given id or null if no unique id was
|
||||||
|
* found
|
||||||
|
*
|
||||||
* @param id id of the User
|
* @param id id of the User
|
||||||
* @return User(Worker | Parent) or null
|
* @return User(Worker | Parent) or null
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -128,6 +178,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a Child for a given id or null if no unique id was found
|
* returns a Child for a given id or null if no unique id was found
|
||||||
|
*
|
||||||
* @param id id of child
|
* @param id id of child
|
||||||
* @return Child or null
|
* @return Child or null
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -147,13 +198,86 @@ public class AccountMgr {
|
|||||||
List<String> severity = Database.getEntryById("severity", Long.parseLong(allergyParts[3]));
|
List<String> severity = Database.getEntryById("severity", Long.parseLong(allergyParts[3]));
|
||||||
String sSeverity = severity.get(0).split(":")[1];
|
String sSeverity = severity.get(0).split(":")[1];
|
||||||
long lSeverity = Long.parseLong(severity.get(0).split(":")[0]);
|
long lSeverity = Long.parseLong(severity.get(0).split(":")[0]);
|
||||||
allergySeverities.add(new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyParts[2])),lSeverity,sSeverity));
|
allergySeverities.add(
|
||||||
|
new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyParts[2])), lSeverity, sSeverity));
|
||||||
}
|
}
|
||||||
return new Child(id, parts[1], parts[2], getAddressById(Long.parseLong(parts[3])), allergySeverities);
|
return new Child(id, parts[1], parts[2], getAddressById(Long.parseLong(parts[3])), allergySeverities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns all Children
|
||||||
|
*
|
||||||
|
* @return {List<Child} List with Childen or empty List
|
||||||
|
* @author Johannes Kantz
|
||||||
|
*/
|
||||||
|
protected static List<Child> getAllChildren() {
|
||||||
|
List<String> entry = Database.getTable("child");
|
||||||
|
if (entry.size() < 1) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
List<Child> children = new ArrayList<>();
|
||||||
|
for (String s : entry) {
|
||||||
|
String[] parts = s.split(":");
|
||||||
|
String[] child_allergyH = { "childid" };
|
||||||
|
String[] child_allergyD = { String.valueOf(parts[0]) };
|
||||||
|
List<String> entriesAllergy = Database.select("child_allergy", child_allergyH, child_allergyD);
|
||||||
|
List<AllergySeverity> allergySeverities = new ArrayList<>();
|
||||||
|
for (String entryAllergy : entriesAllergy) {
|
||||||
|
String[] allergyParts = entryAllergy.split(":");
|
||||||
|
List<String> severity = Database.getEntryById("severity", Long.parseLong(allergyParts[3]));
|
||||||
|
String sSeverity = severity.get(0).split(":")[1];
|
||||||
|
long lSeverity = Long.parseLong(severity.get(0).split(":")[0]);
|
||||||
|
allergySeverities.add(new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyParts[2])),
|
||||||
|
lSeverity, sSeverity));
|
||||||
|
}
|
||||||
|
children.add(new Child(Long.parseLong(parts[0]), parts[1], parts[2],
|
||||||
|
getAddressById(Long.parseLong(parts[3])), allergySeverities));
|
||||||
|
}
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns all Children from parent
|
||||||
|
* @param id parentid
|
||||||
|
* @return {List<Child} List with Childen or empty List
|
||||||
|
* @author Johannes Kantz
|
||||||
|
*/
|
||||||
|
protected static List<Child> getAllChildrenFromParentWithId(long id) {
|
||||||
|
List<String> entry = Database.select("parent_child", new String[] { "parentuserid" },
|
||||||
|
new String[] { String.valueOf(id) });
|
||||||
|
if (entry.size() < 1) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
List<String> childIds = new ArrayList<>();
|
||||||
|
for (String s : entry) {
|
||||||
|
String[] parts = s.split(":");
|
||||||
|
childIds.add(parts[2]);
|
||||||
|
}
|
||||||
|
List<Child> children = new ArrayList<>();
|
||||||
|
for (String s : childIds) {
|
||||||
|
List<String> child = Database.getEntryById("child", Long.parseLong(s));
|
||||||
|
String[] parts = child.get(0).split(":");
|
||||||
|
String[] child_allergyH = { "childid" };
|
||||||
|
String[] child_allergyD = { String.valueOf(parts[0]) };
|
||||||
|
List<String> entriesAllergy = Database.select("child_allergy", child_allergyH, child_allergyD);
|
||||||
|
List<AllergySeverity> allergySeverities = new ArrayList<>();
|
||||||
|
for (String entryAllergy : entriesAllergy) {
|
||||||
|
String[] allergyParts = entryAllergy.split(":");
|
||||||
|
List<String> severity = Database.getEntryById("severity", Long.parseLong(allergyParts[3]));
|
||||||
|
String sSeverity = severity.get(0).split(":")[1];
|
||||||
|
long lSeverity = Long.parseLong(severity.get(0).split(":")[0]);
|
||||||
|
allergySeverities.add(new AllergySeverity(FoodMgr.getAllergyById(Long.parseLong(allergyParts[2])),
|
||||||
|
lSeverity, sSeverity));
|
||||||
|
}
|
||||||
|
children.add(new Child(Long.parseLong(parts[0]), parts[1], parts[2],
|
||||||
|
getAddressById(Long.parseLong(parts[3])), allergySeverities));
|
||||||
|
}
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns an Address for a given id or null if no unique id was found
|
* returns an Address for a given id or null if no unique id was found
|
||||||
|
*
|
||||||
* @param id id of the address
|
* @param id id of the address
|
||||||
* @return Address or null
|
* @return Address or null
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -169,6 +293,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates entries in the database to match parent to child
|
* creates entries in the database to match parent to child
|
||||||
|
*
|
||||||
* @param parentId id of parent
|
* @param parentId id of parent
|
||||||
* @param childId id of child
|
* @param childId id of child
|
||||||
* @return id of parent_child or -1
|
* @return id of parent_child or -1
|
||||||
@ -182,6 +307,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* a simple login to check if a given email matches a password
|
* a simple login to check if a given email matches a password
|
||||||
|
*
|
||||||
* @param email email
|
* @param email email
|
||||||
* @param pw password
|
* @param pw password
|
||||||
* @return id or -1
|
* @return id or -1
|
||||||
@ -207,6 +333,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* checks if id is in worker table
|
* checks if id is in worker table
|
||||||
|
*
|
||||||
* @param id userid
|
* @param id userid
|
||||||
* @return true if id is in worker table
|
* @return true if id is in worker table
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -220,6 +347,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* checks if id is in parent table
|
* checks if id is in parent table
|
||||||
|
*
|
||||||
* @param id userid
|
* @param id userid
|
||||||
* @return true if id is in parent table
|
* @return true if id is in parent table
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -233,6 +361,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a hashed and salted password
|
* returns a hashed and salted password
|
||||||
|
*
|
||||||
* @param pw the password to hash
|
* @param pw the password to hash
|
||||||
* @return hashed and salted password
|
* @return hashed and salted password
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -256,6 +385,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* generates a secure random salt, Base64 encoded
|
* generates a secure random salt, Base64 encoded
|
||||||
|
*
|
||||||
* @return String Base64 encoded
|
* @return String Base64 encoded
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
@ -269,6 +399,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gives the invoice for one month and one child
|
* gives the invoice for one month and one child
|
||||||
|
*
|
||||||
* @param date YYYY-MM the month
|
* @param date YYYY-MM the month
|
||||||
* @param childId id of child
|
* @param childId id of child
|
||||||
* @return the invoice as a List
|
* @return the invoice as a List
|
||||||
@ -306,6 +437,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gets the price per meal from the database and converts it to double
|
* gets the price per meal from the database and converts it to double
|
||||||
|
*
|
||||||
* @return double price
|
* @return double price
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
@ -316,6 +448,7 @@ public class AccountMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* converts the price per meal to integer and updates it in the database
|
* converts the price per meal to integer and updates it in the database
|
||||||
|
*
|
||||||
* @param price double
|
* @param price double
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,141 @@
|
|||||||
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import org.controlsfx.control.CheckComboBox;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ChildController {
|
||||||
|
public TextField firstName;
|
||||||
|
public ChoiceBox childChoiceBox;
|
||||||
|
public TextField lastName;
|
||||||
|
public Button kindHinzufügenButton;
|
||||||
|
public CheckComboBox allergienComboBox;
|
||||||
|
public Button kindLoeschenButton;
|
||||||
|
|
||||||
|
private Child currentChild = null;
|
||||||
|
|
||||||
|
private long selectedChildId;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void initialize() {
|
||||||
|
kindLoeschenButton.setDisable(true);
|
||||||
|
updateChildChoiceBoxItems();
|
||||||
|
|
||||||
|
List<String> a = Database.getTable("allergy");
|
||||||
|
ObservableList<String> allergies = FXCollections.observableArrayList();
|
||||||
|
for (String allergie : a) {
|
||||||
|
allergies.add(allergie.split(":")[0] + ": " + allergie.split(":")[1]);
|
||||||
|
}
|
||||||
|
allergienComboBox.getItems().addAll(allergies);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSelectChild(ActionEvent mouseEvent) {
|
||||||
|
selectedChildId = Integer.parseInt(childChoiceBox.getValue().toString().split(":")[0]);
|
||||||
|
System.out.println("Selected Child: " + selectedChildId);
|
||||||
|
|
||||||
|
clearInputs();
|
||||||
|
|
||||||
|
if(selectedChildId == 0) {
|
||||||
|
kindHinzufügenButton.setText("Kind Hinzufügen");
|
||||||
|
kindLoeschenButton.setDisable(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected child and update fields
|
||||||
|
currentChild = AccountMgr.getChildById(selectedChildId);
|
||||||
|
firstName.setText(currentChild.getFirstname());
|
||||||
|
lastName.setText(currentChild.getName());
|
||||||
|
for (AllergySeverity a : currentChild.getAllergies()){
|
||||||
|
allergienComboBox.getCheckModel().check((int) a.getAllergy().getId() - 1);
|
||||||
|
}
|
||||||
|
kindHinzufügenButton.setText("Kind updaten");
|
||||||
|
kindLoeschenButton.setDisable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onKindHinzufügen(ActionEvent actionEvent) {
|
||||||
|
if(childChoiceBox.getValue() == null){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Sie müssen ein Kind auswählen");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lastName.getText().isBlank() || firstName.getText().isBlank()){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Address adress = AccountMgr.currentUser.getAddress();
|
||||||
|
List<AllergySeverity> allergies = new ArrayList<>();
|
||||||
|
allergienComboBox.getCheckModel().getCheckedItems().stream().forEach(a -> {
|
||||||
|
long id = Integer.parseInt(a.toString().split(":")[0]);
|
||||||
|
String name = a.toString().split(":")[1].trim();
|
||||||
|
// TODO: Allergy Severity
|
||||||
|
allergies.add(new AllergySeverity(new Allergy(id, name, ""), 2, null));
|
||||||
|
});
|
||||||
|
|
||||||
|
if(selectedChildId == 0){
|
||||||
|
long id = AccountMgr.createChild(new Child(lastName.getText(), firstName.getText(), adress, allergies));
|
||||||
|
System.out.println("Child created: " + id);
|
||||||
|
|
||||||
|
if(id <= 0){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Es ist ein fehler beim erstellen des Kinds aufgetreten");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AccountMgr.matchParentChild(String.valueOf(AccountMgr.currentUser.getId()), String.valueOf(id));
|
||||||
|
|
||||||
|
childChoiceBox.getItems().add(id + ": " + firstName.getText() + " " + lastName.getText());
|
||||||
|
childChoiceBox.setValue(childChoiceBox.getItems().get(childChoiceBox.getItems().size() - 1));
|
||||||
|
clearInputs();
|
||||||
|
onSelectChild(null);
|
||||||
|
|
||||||
|
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
alert.setTitle("Kind erstellt");
|
||||||
|
alert.setHeaderText("Es wurde ein Kind erstellt");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else {
|
||||||
|
long id = AccountMgr.updateChild(new Child(currentChild.getId(), lastName.getText(), firstName.getText(), adress, allergies));
|
||||||
|
System.out.println("Updated Child: " + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearInputs(){
|
||||||
|
firstName.setText("");
|
||||||
|
lastName.setText("");
|
||||||
|
allergienComboBox.getCheckModel().clearChecks();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateChildChoiceBoxItems(){
|
||||||
|
List<Child> childList = AccountMgr.getAllChildrenFromParentWithId(AccountMgr.currentUser.getId());
|
||||||
|
|
||||||
|
ObservableList<Object> childOptions = FXCollections.observableArrayList(childList.stream().map(c -> c.getId() + ": " + c.getFirstname() + " " + c.getName()).toList().toArray(new String[0]));
|
||||||
|
childOptions.add(0, "0: neues Kind erstellen");
|
||||||
|
childChoiceBox.setItems(childOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onKindLoeschen(ActionEvent actionEvent) {
|
||||||
|
AccountMgr.deleteChildWithId(currentChild.getId());
|
||||||
|
System.out.println("Deleted Child: " + currentChild.getId());
|
||||||
|
|
||||||
|
childChoiceBox.getItems().remove(childChoiceBox.getItems().stream().filter(v -> v.equals(currentChild.getId() + ": " + currentChild.getFirstname() + " " + currentChild.getName())).findFirst().get());
|
||||||
|
childChoiceBox.setValue(childChoiceBox.getItems().get(1));
|
||||||
|
|
||||||
|
onSelectChild(null);
|
||||||
|
|
||||||
|
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
alert.setTitle("Kind wurde gelöscht");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.RadioButton;
|
import javafx.scene.control.RadioButton;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
import org.controlsfx.control.CheckComboBox;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CreateFoodController {
|
public class CreateFoodController {
|
||||||
@ -27,9 +30,18 @@ public class CreateFoodController {
|
|||||||
@FXML
|
@FXML
|
||||||
public RadioButton isFleischRadio;
|
public RadioButton isFleischRadio;
|
||||||
@FXML
|
@FXML
|
||||||
public TextArea allergienTextBox;
|
|
||||||
@FXML
|
|
||||||
public Text responseText;
|
public Text responseText;
|
||||||
|
public CheckComboBox allergienComboBox;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void initialize() {
|
||||||
|
List<String> a = Database.getTable("allergy");
|
||||||
|
ObservableList<String> allergies = FXCollections.observableArrayList();
|
||||||
|
for (String allergie : a) {
|
||||||
|
allergies.add(allergie.split(":")[0] + ": " + allergie.split(":")[1]);
|
||||||
|
}
|
||||||
|
allergienComboBox.getItems().addAll(allergies);
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void onAbbrechen(ActionEvent actionEvent) {
|
public void onAbbrechen(ActionEvent actionEvent) {
|
||||||
@ -37,22 +49,63 @@ public class CreateFoodController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void onHinzufügen(ActionEvent actionEvent) {
|
public void onHinzufuegen(ActionEvent actionEvent) {
|
||||||
String gerichtName = name.getText();
|
String gerichtName = name.getText();
|
||||||
String beschreibung = description.getText();
|
String beschreibung = description.getText();
|
||||||
|
|
||||||
|
if(gerichtName.isBlank()){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt");
|
||||||
|
alert.setContentText("Das Feld 'Name' ist nicht ausgefüllt");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(beschreibung.isBlank()){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt");
|
||||||
|
alert.setContentText("Das Feld 'Beschreibung' ist nicht ausgefüllt");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!isHauptgerichtRadio.isSelected() && !isDessertRadio.isSelected()){
|
if(!isHauptgerichtRadio.isSelected() && !isDessertRadio.isSelected()){
|
||||||
// art auswähelen
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt");
|
||||||
|
alert.setContentText("Das Feld 'Art' ist nicht ausgefüllt");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
boolean isNachtisch = !isHauptgerichtRadio.isSelected();
|
boolean isNachtisch = !isHauptgerichtRadio.isSelected();
|
||||||
if(!isVegetarischRadio.isSelected() && !isVeganRadio.isSelected() && isFleischRadio.isSelected()){
|
if(!isVegetarischRadio.isSelected() && !isVeganRadio.isSelected() && !isFleischRadio.isSelected()){
|
||||||
// Typ auswählen
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Ungültige Eingabe");
|
||||||
|
alert.setHeaderText("Es wurden nicht alle Felder ausgefüllt");
|
||||||
|
alert.setContentText("Das Feld 'Typ' ist nicht ausgefüllt");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
int ft = isVeganRadio.isSelected() ? 1 : isVeganRadio.isSelected() ? 2 : 3;
|
int ft = isVeganRadio.isSelected() ? 1 : isVeganRadio.isSelected() ? 2 : 3;
|
||||||
FoodType foodType = new FoodType(ft, "Vegan");
|
FoodType foodType = new FoodType(ft, "Vegan");
|
||||||
List<Allergy> allergies = new ArrayList<>();
|
List<Allergy> allergies = new ArrayList<>();
|
||||||
// TODO: allergien hinzufügen
|
allergienComboBox.getCheckModel().getCheckedItems().stream().forEach(a -> {
|
||||||
|
long id = Integer.parseInt(a.toString().split(":")[0]);
|
||||||
|
String name = a.toString().split(":")[1].trim();
|
||||||
|
allergies.add((new Allergy(id, name, "")));
|
||||||
|
});
|
||||||
|
System.out.println(allergies.get(0).getName());
|
||||||
|
|
||||||
long id = FoodMgr.createFood(new Food(gerichtName, beschreibung, isNachtisch, foodType, allergies));
|
long id = FoodMgr.createFood(new Food(gerichtName, beschreibung, isNachtisch, foodType, allergies));
|
||||||
|
if(id <= 0){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Es ist ein Problem beim Erstellen des Gerichts aufgetreten");
|
||||||
|
alert.setHeaderText("Bitte überprüfen Sie ihre Eingabe");
|
||||||
|
alert.setContentText("Es besteht die Möglichkeit, dass dieses Gericht bereits existiert");
|
||||||
|
alert.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
System.out.println("Food created with id: " + id);
|
System.out.println("Food created with id: " + id);
|
||||||
responseText.setText("New Food Created");
|
responseText.setText("New Food Created");
|
||||||
clearInputs();
|
clearInputs();
|
||||||
@ -66,6 +119,6 @@ public class CreateFoodController {
|
|||||||
isVeganRadio.setSelected(false);
|
isVeganRadio.setSelected(false);
|
||||||
isVegetarischRadio.setSelected(false);
|
isVegetarischRadio.setSelected(false);
|
||||||
isFleischRadio.setSelected(false);
|
isFleischRadio.setSelected(false);
|
||||||
allergienTextBox.setText("");
|
allergienComboBox.getCheckModel().clearChecks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,20 +31,28 @@ public class CreateFoodplanController {
|
|||||||
ChoiceBox secondDessert;
|
ChoiceBox secondDessert;
|
||||||
|
|
||||||
private List<Food> foods;
|
private List<Food> foods;
|
||||||
|
private List<Food> veganFoods;
|
||||||
private List<Food> desserts;
|
private List<Food> desserts;
|
||||||
|
private List<Food> veganDesserts;
|
||||||
private FoodPlan currentPlan;
|
private FoodPlan currentPlan;
|
||||||
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
veganFoods = FoodMgr.getVeganFood(false);
|
||||||
foods = FoodMgr.getFood(false);
|
foods = FoodMgr.getFood(false);
|
||||||
|
veganDesserts = FoodMgr.getVeganFood(true);
|
||||||
desserts = FoodMgr.getFood(true);
|
desserts = FoodMgr.getFood(true);
|
||||||
|
|
||||||
ObservableList<Object> foodOptions = FXCollections.observableArrayList(foods.stream().map(food -> food.getId() + ": " + food.getName()).toList().toArray(new String[0]));
|
ObservableList<Object> foodOptions = FXCollections.observableArrayList(foods.stream().map(food -> food.getId() + ": " + food.getName()).toList().toArray(new String[0]));
|
||||||
firstMeal.setItems(foodOptions);
|
ObservableList<Object> veganFoodOptions = FXCollections.observableArrayList(veganFoods.stream().map(food -> food.getId() + ": " + food.getName()).toList().toArray(new String[0]));
|
||||||
|
ObservableList<Object> veganDessertOptions = FXCollections.observableArrayList(veganDesserts.stream().map(dessert -> dessert.getId() + ": " + dessert.getName()).toList().toArray(new String[0]));
|
||||||
|
ObservableList<Object> dessertOptions = FXCollections.observableArrayList(desserts.stream().map(dessert -> dessert.getId() + ": " + dessert.getName()).toList().toArray(new String[0]));
|
||||||
|
firstMeal.setItems(veganFoodOptions);
|
||||||
secondMeal.setItems(foodOptions);
|
secondMeal.setItems(foodOptions);
|
||||||
|
|
||||||
ObservableList<Object> dessertOptions = FXCollections.observableArrayList(desserts.stream().map(dessert -> dessert.getId() + ": " + dessert.getName()).toList().toArray(new String[0]));
|
|
||||||
firstDessert.setItems(dessertOptions);
|
firstDessert.setItems(veganDessertOptions);
|
||||||
secondDessert.setItems(dessertOptions);
|
secondDessert.setItems(dessertOptions);
|
||||||
|
|
||||||
date.setValue(LocalDate.now());
|
date.setValue(LocalDate.now());
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.DatePicker;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DailyOrderController {
|
||||||
|
public ListView listView;
|
||||||
|
public DatePicker datePicker;
|
||||||
|
public Button sendButton;
|
||||||
|
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void initialize() {
|
||||||
|
datePicker.setValue(LocalDate.now());
|
||||||
|
updatePlan(datePicker.getValue().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onChangeDate(ActionEvent actionEvent) {
|
||||||
|
updatePlan(datePicker.getValue().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void updatePlan(String date){
|
||||||
|
listView.getItems().clear();
|
||||||
|
System.out.print("Orders from " + date + " : ");
|
||||||
|
List<String> orders = new ArrayList<>();
|
||||||
|
FoodPlan food_plan = FoodMgr.getFoodPlan(date);
|
||||||
|
if(food_plan == null){
|
||||||
|
sendButton.setVisible(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sendButton.setVisible(true);
|
||||||
|
if(food_plan.isSent()){
|
||||||
|
sendButton.setDisable(true);
|
||||||
|
sendButton.setText("Bestellung wurde Gesendet");
|
||||||
|
}else {
|
||||||
|
sendButton.setDisable(false);
|
||||||
|
sendButton.setText("Bestellung senden");
|
||||||
|
}
|
||||||
|
String sId = String.valueOf(food_plan.getId());
|
||||||
|
String[] food_selectionH = {"food_planid","foodid"};
|
||||||
|
Food[] foodArray = {
|
||||||
|
food_plan.getFoodVegan(),
|
||||||
|
food_plan.getFoodSecond(),
|
||||||
|
food_plan.getDessertVegan(),
|
||||||
|
food_plan.getDessertSecond()
|
||||||
|
};
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
String foodName = foodArray[i].getName();
|
||||||
|
String[] food_selectionD = {sId, String.valueOf(foodArray[i].getId())};
|
||||||
|
int count = Database.count("food_selection",food_selectionH,food_selectionD);
|
||||||
|
orders.add(count+" X "+foodName);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(orders);
|
||||||
|
|
||||||
|
|
||||||
|
for(String order : orders){
|
||||||
|
listView.getItems().add(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSendButton(ActionEvent actionEvent) {
|
||||||
|
FoodMgr.getDayOrder(datePicker.getValue().toString());
|
||||||
|
sendButton.setDisable(true);
|
||||||
|
sendButton.setText("Bestellung wurde Gesendet");
|
||||||
|
}
|
||||||
|
}
|
@ -9,8 +9,10 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic operations on the database
|
* Basic operations on the database
|
||||||
* Use init() -> createDb() -> fillDb() to create the skeleton with some default values
|
* Use init() -> createDb() -> fillDb() to create the skeleton with some default
|
||||||
|
* values
|
||||||
* Provides select, insert, update, delete, count operations and more
|
* Provides select, insert, update, delete, count operations and more
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public class Database {
|
public class Database {
|
||||||
@ -18,6 +20,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates new database.db if it doesn't exist
|
* creates new database.db if it doesn't exist
|
||||||
|
*
|
||||||
* @return true if a new database has been created
|
* @return true if a new database has been created
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
@ -32,6 +35,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* connects to the database
|
* connects to the database
|
||||||
|
*
|
||||||
* @return Connection to the database
|
* @return Connection to the database
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
@ -47,6 +51,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates the initial structure of the db
|
* creates the initial structure of the db
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static void createDb() {
|
protected static void createDb() {
|
||||||
@ -178,10 +183,12 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts fixed values into the database
|
* inserts fixed values into the database
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static void fillDb() {
|
protected static void fillDb() {
|
||||||
List<String> sqls = new ArrayList<>();
|
List<String> sqls = new ArrayList<>();
|
||||||
|
// food_type
|
||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO food_type (id,name)
|
INSERT OR IGNORE INTO food_type (id,name)
|
||||||
VALUES ('1','Vegan');""");
|
VALUES ('1','Vegan');""");
|
||||||
@ -191,6 +198,7 @@ public class Database {
|
|||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO food_type (id,name)
|
INSERT OR IGNORE INTO food_type (id,name)
|
||||||
VALUES ('3','Fleischhaltig');""");
|
VALUES ('3','Fleischhaltig');""");
|
||||||
|
// allergy
|
||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO allergy (id,name,handle)
|
INSERT OR IGNORE INTO allergy (id,name,handle)
|
||||||
VALUES('1','Eier','a');""");
|
VALUES('1','Eier','a');""");
|
||||||
@ -257,6 +265,7 @@ public class Database {
|
|||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO allergy (id,name,handle)
|
INSERT OR IGNORE INTO allergy (id,name,handle)
|
||||||
VALUES('22','Konservierungsstoff','8');""");
|
VALUES('22','Konservierungsstoff','8');""");
|
||||||
|
// severity
|
||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO severity (id,name)
|
INSERT OR IGNORE INTO severity (id,name)
|
||||||
VALUES('1','Harmlos');""");
|
VALUES('1','Harmlos');""");
|
||||||
@ -269,6 +278,150 @@ public class Database {
|
|||||||
sqls.add("""
|
sqls.add("""
|
||||||
INSERT OR IGNORE INTO price (id,price)
|
INSERT OR IGNORE INTO price (id,price)
|
||||||
VALUES('1','500');""");
|
VALUES('1','500');""");
|
||||||
|
// user
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO address (id,street,number,plz,city)
|
||||||
|
VALUES('1','teststreet','69','1337','Mond');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO user (id,name,firstname,addressid,password,email)
|
||||||
|
VALUES('1','testparent','testparent','1','YOD+TB0twF2SrueBj26t5OjEJK/Al4G6/hq+IMRyBz4=.f4zL2UJW4POrf/xgJdNaiw==','testparent@test.de');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO parent (userid)
|
||||||
|
VALUES('1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO user (id,name,firstname,addressid,password,email)
|
||||||
|
VALUES('2','testworker','testworker','1','YOD+TB0twF2SrueBj26t5OjEJK/Al4G6/hq+IMRyBz4=.f4zL2UJW4POrf/xgJdNaiw==','testworker@test.de');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO worker (userid)
|
||||||
|
VALUES('2');""");
|
||||||
|
// food
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('1','Steak','69','0','3');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('2','Schnitzel','69','0','3');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('3','Hamburger','69','0','3');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('4','Nudeln','69','0','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('5','Salat','69','0','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('6','Pudding','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('7','Eis','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('8','Wackelpudding','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('9','Kuchen','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('10','Apfel','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('11','Banane','69','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('12','Nudelauflauf','69','0','3');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('13','Reibekuchen','69','0','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('14','Gefüllte Paprika','69','0','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('15','Suishi','69','0','2');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food (id,name,description,isdessert,food_typeid)
|
||||||
|
VALUES('16','Champignons','69','0','2');""");
|
||||||
|
// child
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO child (id,name,firstname,addressid)
|
||||||
|
VALUES('1','Lustig','Peter','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO child (id,name,firstname,addressid)
|
||||||
|
VALUES('2','Wahnsinn','Rainer','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO parent_child ('id',parentuserid,childid)
|
||||||
|
VALUES('1','1','1');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO parent_child ('id',parentuserid,childid)
|
||||||
|
VALUES('2','1','2');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO child_allergy (childid,allergyid,severityid)
|
||||||
|
VALUES('1','1','2');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO child_allergy (childid,allergyid,severityid)
|
||||||
|
VALUES('1','3','2');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO child_allergy (childid,allergyid,severityid)
|
||||||
|
VALUES('1','4','2');""");
|
||||||
|
// foodplan
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('1','2023-02-06','4','1','8','7');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('2','2023-02-07','5','2','6','7');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('3','2023-02-08','4','3','8','6');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('4','2023-02-09','16','1','11','10');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('5','2023-02-09','14','13','7','9');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_plan ('id',date,food1,food2,dessert1,dessert2)
|
||||||
|
VALUES('6','2023-02-10','13','15','8','6');""");
|
||||||
|
// food_selection
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('1','1','1','4');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('2','1','1','8');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('3','2','1','4');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('4','2','1','8');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('5','1','2','5');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('6','1','2','7');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('7','2','2','5');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('8','2','2','7');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('9','1','3','4');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('10','1','3','8');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('11','2','3','4');""");
|
||||||
|
sqls.add("""
|
||||||
|
INSERT OR IGNORE INTO food_selection ('id',childid,food_planid,foodid)
|
||||||
|
VALUES('12','2','3','6');""");
|
||||||
|
|
||||||
try (Connection conn = connect(); Statement stmt = conn.createStatement()) {
|
try (Connection conn = connect(); Statement stmt = conn.createStatement()) {
|
||||||
for (String sql : sqls) {
|
for (String sql : sqls) {
|
||||||
stmt.execute(sql);
|
stmt.execute(sql);
|
||||||
@ -281,6 +434,7 @@ public class Database {
|
|||||||
/**
|
/**
|
||||||
* inserts data into table and returns its id
|
* inserts data into table and returns its id
|
||||||
* simple duplication check
|
* simple duplication check
|
||||||
|
*
|
||||||
* @param table name of the database table
|
* @param table name of the database table
|
||||||
* @param header String[] order should match with values
|
* @param header String[] order should match with values
|
||||||
* @param values String[] order should match with header
|
* @param values String[] order should match with header
|
||||||
@ -323,6 +477,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a single id that matches the given data
|
* returns a single id that matches the given data
|
||||||
|
*
|
||||||
* @param table the table that contains the searched entry
|
* @param table the table that contains the searched entry
|
||||||
* @param header the header of the table, order should match with values
|
* @param header the header of the table, order should match with values
|
||||||
* @param values the data you want the id of, order should match witch values
|
* @param values the data you want the id of, order should match witch values
|
||||||
@ -378,6 +533,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* deletes an entry from table with matching id
|
* deletes an entry from table with matching id
|
||||||
|
*
|
||||||
* @param table the table that contains the entry you want to delete
|
* @param table the table that contains the entry you want to delete
|
||||||
* @param id the id of the entry you want to delete
|
* @param id the id of the entry you want to delete
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -398,8 +554,10 @@ public class Database {
|
|||||||
* selectMatch: returns all matching rows from table
|
* selectMatch: returns all matching rows from table
|
||||||
* insert: inserts or ignores into table
|
* insert: inserts or ignores into table
|
||||||
* count: counts exact matches from table
|
* count: counts exact matches from table
|
||||||
* update: updates table, header/values[0] is used as WHERE, using id is recommended header/values[1+] are used
|
* update: updates table, header/values[0] is used as WHERE, using id is
|
||||||
|
* recommended header/values[1+] are used
|
||||||
* as SET
|
* as SET
|
||||||
|
*
|
||||||
* @param type exists, selectMatch, insert, count, update
|
* @param type exists, selectMatch, insert, count, update
|
||||||
* @param table table
|
* @param table table
|
||||||
* @param header header
|
* @param header header
|
||||||
@ -482,12 +640,12 @@ public class Database {
|
|||||||
sb.append(" SET ");
|
sb.append(" SET ");
|
||||||
sb.append(header[1]);
|
sb.append(header[1]);
|
||||||
sb.append(" = ");
|
sb.append(" = ");
|
||||||
sb.append(values[1]);
|
sb.append("'" + values[1] + "'");
|
||||||
for (int i = 2; i < header.length; i++) {
|
for (int i = 2; i < header.length; i++) {
|
||||||
sb.append(", ");
|
sb.append(", ");
|
||||||
sb.append(header[i]);
|
sb.append(header[i]);
|
||||||
sb.append(" = ");
|
sb.append(" = ");
|
||||||
sb.append(values[i]);
|
sb.append("'" + values[i] + "'");
|
||||||
}
|
}
|
||||||
sb.append(" WHERE ");
|
sb.append(" WHERE ");
|
||||||
sb.append(header[0]);
|
sb.append(header[0]);
|
||||||
@ -501,6 +659,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a list of all entries
|
* returns a list of all entries
|
||||||
|
*
|
||||||
* @param table the table you want
|
* @param table the table you want
|
||||||
* @return a list of all entries as String with the fields separated by ":"
|
* @return a list of all entries as String with the fields separated by ":"
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
@ -530,7 +689,9 @@ public class Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* issues a select query on the database for the given table and the given values checked with LIKE
|
* issues a select query on the database for the given table and the given
|
||||||
|
* values checked with LIKE
|
||||||
|
*
|
||||||
* @param table the table you want the data from
|
* @param table the table you want the data from
|
||||||
* @param header header for the WHERE portion, order should match with values
|
* @param header header for the WHERE portion, order should match with values
|
||||||
* @param values values for the WHERE portion, order should match with header
|
* @param values values for the WHERE portion, order should match with header
|
||||||
@ -564,6 +725,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the entry from table with the given id
|
* returns the entry from table with the given id
|
||||||
|
*
|
||||||
* @param table the table you want the entry from
|
* @param table the table you want the entry from
|
||||||
* @param id the id of the entry you want
|
* @param id the id of the entry you want
|
||||||
* @return a list of String separated by ":"
|
* @return a list of String separated by ":"
|
||||||
@ -597,6 +759,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* counts the number of matching entries
|
* counts the number of matching entries
|
||||||
|
*
|
||||||
* @param table the table you want to count
|
* @param table the table you want to count
|
||||||
* @param header the properties you want to count on
|
* @param header the properties you want to count on
|
||||||
* @param values the values for the properties
|
* @param values the values for the properties
|
||||||
@ -616,6 +779,7 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* updates an entry in the database
|
* updates an entry in the database
|
||||||
|
*
|
||||||
* @param table the table you want to update
|
* @param table the table you want to update
|
||||||
* @param header [0] is used as WHERE, everything else in SET
|
* @param header [0] is used as WHERE, everything else in SET
|
||||||
* @param values [0] is used as WHERE, everything else in SET
|
* @param values [0] is used as WHERE, everything else in SET
|
||||||
|
@ -235,6 +235,9 @@ public class FoodMgr {
|
|||||||
public static List<String> getDayOrder(String date){
|
public static List<String> getDayOrder(String date){
|
||||||
List<String> orders = new ArrayList<>();
|
List<String> orders = new ArrayList<>();
|
||||||
FoodPlan food_plan = getFoodPlan(date);
|
FoodPlan food_plan = getFoodPlan(date);
|
||||||
|
if(food_plan == null){
|
||||||
|
return orders;
|
||||||
|
}
|
||||||
String sId = String.valueOf(food_plan.getId());
|
String sId = String.valueOf(food_plan.getId());
|
||||||
String[] food_selectionH = {"food_planid","foodid"};
|
String[] food_selectionH = {"food_planid","foodid"};
|
||||||
Food[] foodArray = {
|
Food[] foodArray = {
|
||||||
|
@ -5,12 +5,13 @@ import javafx.scene.control.Alert;
|
|||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
|
|
||||||
public class HelloController {
|
|
||||||
/**
|
/**
|
||||||
* @autor: Reshad Meher
|
* @author Reshad Meher
|
||||||
* Username, Passwort , login
|
* Username, Passwort , login
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
public class HelloController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextField unsernameEingabe;
|
private TextField unsernameEingabe;
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ChoiceBox;
|
import javafx.scene.control.ChoiceBox;
|
||||||
import javafx.scene.control.Spinner;
|
import javafx.scene.control.Spinner;
|
||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class InvoiceController {
|
public class InvoiceController {
|
||||||
@FXML
|
@FXML
|
||||||
@ -14,6 +22,9 @@ public class InvoiceController {
|
|||||||
@FXML
|
@FXML
|
||||||
ChoiceBox monatChoiceBox;
|
ChoiceBox monatChoiceBox;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
ChoiceBox childChoiceBox;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
Spinner jahrSpinner;
|
Spinner jahrSpinner;
|
||||||
|
|
||||||
@ -21,12 +32,35 @@ public class InvoiceController {
|
|||||||
public void initialize() {
|
public void initialize() {
|
||||||
monatChoiceBox.setValue(intToMonth(Calendar.getInstance().get(Calendar.MONTH) + 1));
|
monatChoiceBox.setValue(intToMonth(Calendar.getInstance().get(Calendar.MONTH) + 1));
|
||||||
jahrSpinner.getValueFactory().setValue(Calendar.getInstance().get(Calendar.YEAR));
|
jahrSpinner.getValueFactory().setValue(Calendar.getInstance().get(Calendar.YEAR));
|
||||||
|
|
||||||
|
List<Child> childList = AccountMgr.getAllChildren();
|
||||||
|
ObservableList<Object> childOptions = FXCollections.observableArrayList(childList.stream()
|
||||||
|
.map(c -> c.getId() + ": " + c.getFirstname() + " " + c.getName()).toList().toArray(new String[0]));
|
||||||
|
childChoiceBox.setItems(childOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void onRechnungErstellenClick(MouseEvent mouseEvent) {
|
void onRechnungErstellenClick(MouseEvent mouseEvent) {
|
||||||
responseText.setText(monatChoiceBox.getValue().toString() + jahrSpinner.getValue());
|
if (childChoiceBox.getValue() == null) {
|
||||||
// hier rechnung erstellen
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Es wurde kein Kind ausgewählt");
|
||||||
|
alert.setHeaderText("Bitte wählen sie ein Kind aus");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
String childId = childChoiceBox.getValue().toString().split(":")[0];
|
||||||
|
String date = String.format("%d-%02d", Integer.parseInt(jahrSpinner.getValue().toString()),
|
||||||
|
monthToInt(monatChoiceBox.getValue().toString()));
|
||||||
|
|
||||||
|
System.out.println("Invoice (" + date + ") from child: " + childId);
|
||||||
|
|
||||||
|
List<String> invoice = AccountMgr.getInvoice(date, childId);
|
||||||
|
|
||||||
|
responseText.setText(invoice.get(invoice.size() - 1));
|
||||||
|
|
||||||
|
// TODO: show invoice
|
||||||
|
Child child = AccountMgr.getChildById(Long.parseLong(childId));
|
||||||
|
exportInvoice("Rechnung_" + date + "_" + childId + "_" + child.getName() +"_" + child.getFirstname(), invoice);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int monthToInt(String month) {
|
private int monthToInt(String month) {
|
||||||
@ -64,4 +98,21 @@ public class InvoiceController {
|
|||||||
default -> "";
|
default -> "";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void exportInvoice(String filename, List<String> invoice) {
|
||||||
|
try {
|
||||||
|
Files.createDirectories(Path.of(Path.of("").toAbsolutePath() + "/Rechnungen"));
|
||||||
|
|
||||||
|
// TODO: save invoice to pdf or word
|
||||||
|
File file = new File(Path.of("").toAbsolutePath() + "/Rechnungen/" + filename + ".txt");
|
||||||
|
if (file.createNewFile()) {
|
||||||
|
System.out.println("File created: " + file.getName());
|
||||||
|
} else {
|
||||||
|
System.out.println("File already exists.");
|
||||||
|
}
|
||||||
|
Files.write(Path.of(file.getAbsolutePath()), invoice);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class OrderHistoryController {
|
||||||
|
public ListView listView;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void initialize() {
|
||||||
|
List<Child> children = AccountMgr.getAllChildrenFromParentWithId(AccountMgr.currentUser.getId());
|
||||||
|
|
||||||
|
List<String> orders = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Child child : children) {
|
||||||
|
List<String> selections = Database.select("food_selection", new String[] { "childid" }, new String[] { String.valueOf(child.getId()) });
|
||||||
|
for (String selection : selections) {
|
||||||
|
String[] selectionParts = selection.split(":");
|
||||||
|
String foodplanid = selectionParts[2];
|
||||||
|
String foodid = selectionParts[3];
|
||||||
|
String foodName = FoodMgr.getFoodById(Long.parseLong(foodid)).getName();
|
||||||
|
String date = FoodMgr.getFoodPlanById(Long.parseLong(foodplanid)).getDate();
|
||||||
|
orders.add(String.format("%s\t %s \t %s", date, child.getFirstname(), foodName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(orders);
|
||||||
|
Collections.reverse(orders);
|
||||||
|
for(String order : orders){
|
||||||
|
listView.getItems().add(order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,21 +4,30 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* one constructor is used to create new parents the other is used to create existing parents from database
|
* one constructor is used to create new parents the other is used to create
|
||||||
|
* existing parents from database
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public class Parent extends User {
|
public class Parent extends User {
|
||||||
List<Child> children;
|
List<Child> children;
|
||||||
|
|
||||||
public Parent(long id, String name, String firstname, String password, String email, Address address, List<Child> children) {
|
public Parent(long id, String name, String firstname, String password, String email, Address address,
|
||||||
|
List<Child> children) {
|
||||||
super(id, name, firstname, password, email, address);
|
super(id, name, firstname, password, email, address);
|
||||||
this.children = children;
|
this.children = children;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Parent(String name, String firstname, String password, String email, Address address) {
|
public Parent(String name, String firstname, String password, String email, Address address) {
|
||||||
super(name, firstname, password, email, address);
|
super(name, firstname, password, email, address);
|
||||||
this.children = new ArrayList<>();
|
this.children = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Parent(User user) {
|
||||||
|
super(user.getId(), user.getName(), user.getFirstname(), user.getPassword(), user.getEmail(), user.getAddress());
|
||||||
|
this.children = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
public List<Child> getChildren() {
|
public List<Child> getChildren() {
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public class ParentMenuController {
|
|||||||
@FXML
|
@FXML
|
||||||
public void onBestellungClick(MouseEvent mouseEvent) {
|
public void onBestellungClick(MouseEvent mouseEvent) {
|
||||||
setButtonActive(bestellungButton);
|
setButtonActive(bestellungButton);
|
||||||
changePage("dailyOrder-view.fxml");
|
changePage("orderHistory-view.fxml");
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@ -55,7 +55,8 @@ public class ParentMenuController {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void onAusloggenClick(MouseEvent mouseEvent) throws IOException {
|
public void onAusloggenClick(MouseEvent mouseEvent) throws IOException {
|
||||||
StartViewApplication.changeScene("workerMenu-view.fxml");
|
AccountMgr.currentUser = null;
|
||||||
|
StartViewApplication.changeScene("login-view.fxml");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changePage(String page) {
|
private void changePage(String page) {
|
||||||
|
@ -1,11 +1,110 @@
|
|||||||
|
/**
|
||||||
|
* @autor: Reshad Meher
|
||||||
|
*/
|
||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
import javafx.event.ActionEvent;
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.PasswordField;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public class SingUpController {
|
public class SingUpController {
|
||||||
public void onKontoErstellenBtClick(ActionEvent actionEvent) {
|
@FXML
|
||||||
|
private TextField tfLastName;
|
||||||
|
@FXML
|
||||||
|
private TextField tfFirstName;
|
||||||
|
@FXML
|
||||||
|
private TextField tfEmail;
|
||||||
|
@FXML
|
||||||
|
private PasswordField pfPassword;
|
||||||
|
@FXML
|
||||||
|
private TextField tfPostCode;
|
||||||
|
@FXML
|
||||||
|
private TextField tfCity;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField tfStreet;
|
||||||
|
@FXML
|
||||||
|
private TextField tfHouseNumber;
|
||||||
|
@FXML
|
||||||
|
private void onKontoErstellenBtClick(){
|
||||||
|
String lastName = tfLastName.getText();
|
||||||
|
String firstName = tfFirstName.getText();
|
||||||
|
String email = tfEmail.getText();
|
||||||
|
String password = pfPassword.getText();
|
||||||
|
String postCode = tfPostCode.getText();
|
||||||
|
String city = tfCity.getText();
|
||||||
|
String street = tfStreet.getText();
|
||||||
|
String houseNumber = tfHouseNumber.getText();
|
||||||
|
Alert alert;
|
||||||
|
if(lastName.isEmpty() || firstName.isEmpty() || email.isEmpty() || password.isEmpty() || postCode.isEmpty() ||
|
||||||
|
city.isEmpty() || street.isEmpty() || houseNumber.isEmpty()){
|
||||||
|
|
||||||
|
if(lastName.isEmpty()){
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Name' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (firstName.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Vorname' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (email.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'E-Mail' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (password.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Passwort' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (postCode.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Postleitzahl' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (city.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Stadt' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (street.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Straße' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else {
|
||||||
|
alert = new Alert(Alert.AlertType.ERROR," Die Eingabefeld 'Hausnummer' ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAnmeldenBtClick(ActionEvent actionEvent) {
|
}else {
|
||||||
|
Address newAdresse = new Address(street,houseNumber,postCode,city);
|
||||||
|
User newUser = new User(lastName,firstName,password,email,newAdresse);
|
||||||
|
if(StartViewApplication.firstLaunch){
|
||||||
|
long id = AccountMgr.createWorker(new Worker(newUser));
|
||||||
|
if(id < 1) {
|
||||||
|
Alert a = new Alert(Alert.AlertType.ERROR,"Es ist ein Fehler bei der Erstellung Ihres Accounts aufgetreten.");
|
||||||
|
a.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
alert = new Alert(Alert.AlertType.CONFIRMATION,"Mitarbeiter Account erfolgreich erstellt");
|
||||||
|
alert.showAndWait();
|
||||||
|
StartViewApplication.firstLaunch = false;
|
||||||
|
}else {
|
||||||
|
long id = AccountMgr.createParent(new Parent(newUser));
|
||||||
|
if(id < 1) {
|
||||||
|
Alert a = new Alert(Alert.AlertType.ERROR,"Es ist ein Fehler bei der Erstellung Ihres Accounts aufgetreten.");
|
||||||
|
a.showAndWait();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
alert = new Alert(Alert.AlertType.CONFIRMATION,"Eltern Account erfolgreich erstellt");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
tfLastName.setText("");
|
||||||
|
tfFirstName.setText("");
|
||||||
|
tfEmail.setText("");
|
||||||
|
pfPassword.setText("");
|
||||||
|
tfPostCode.setText("");
|
||||||
|
tfCity.setText("");
|
||||||
|
tfStreet.setText("");
|
||||||
|
tfHouseNumber.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void onAnmeldenBtClick() throws IOException {
|
||||||
|
StartViewApplication.changeScene("login-view.fxml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,11 @@ import java.io.IOException;
|
|||||||
|
|
||||||
public class StartViewApplication extends Application {
|
public class StartViewApplication extends Application {
|
||||||
public static Stage primary;
|
public static Stage primary;
|
||||||
|
public static boolean firstLaunch;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) throws IOException {
|
public void start(Stage stage) throws IOException {
|
||||||
FXMLLoader fxmlLoader = new FXMLLoader(StartViewApplication.class.getResource("login-view.fxml"));
|
FXMLLoader fxmlLoader = new FXMLLoader(StartViewApplication.class.getResource((firstLaunch) ? "signUp-view.fxml" : "login-view.fxml"));
|
||||||
Scene scene = new Scene(fxmlLoader.load(), 1300, 750);
|
Scene scene = new Scene(fxmlLoader.load(), 1300, 750);
|
||||||
primary = stage;
|
primary = stage;
|
||||||
stage.setTitle("Essen Bestellung im Kindergarten");
|
stage.setTitle("Essen Bestellung im Kindergarten");
|
||||||
@ -29,7 +30,7 @@ public class StartViewApplication extends Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
Database.init();
|
firstLaunch = Database.init();
|
||||||
Database.createDb();
|
Database.createDb();
|
||||||
Database.fillDb();
|
Database.fillDb();
|
||||||
//Database.printSampleQuery();
|
//Database.printSampleQuery();
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* one constructor is used to create new worker the other is used to create existing worker from database
|
* one constructor is used to create new worker the other is used to create
|
||||||
|
* existing worker from database
|
||||||
|
*
|
||||||
* @author Malte Schulze Hobeling
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public class Worker extends User {
|
public class Worker extends User {
|
||||||
public Worker(long id, String name, String firstname, String password, String email, Address address) {
|
public Worker(long id, String name, String firstname, String password, String email, Address address) {
|
||||||
super(id, name, firstname, password, email, address);
|
super(id, name, firstname, password, email, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Worker(String name, String firstname, String password, String email, Address address) {
|
public Worker(String name, String firstname, String password, String email, Address address) {
|
||||||
super(name, firstname, password, email, address);
|
super(name, firstname, password, email, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Worker(User user) {
|
||||||
|
super(user.getId(), user.getName(), user.getFirstname(), user.getPassword(), user.getEmail(), user.getAddress());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@ import java.io.IOException;
|
|||||||
public class WorkerMenuController {
|
public class WorkerMenuController {
|
||||||
@FXML
|
@FXML
|
||||||
public BorderPane contentView;
|
public BorderPane contentView;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
Button tagesbestellungButton;
|
Button tagesbestellungButton;
|
||||||
@FXML
|
@FXML
|
||||||
@ -28,13 +27,13 @@ public class WorkerMenuController {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
changePage("menue-view.fxml");
|
changePage("dailyOrder-view.fxml");
|
||||||
setButtonActive(tagesbestellungButton);
|
setButtonActive(tagesbestellungButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void onTagesbestellungenClick(MouseEvent mouseEvent) {
|
public void onTagesbestellungenClick(MouseEvent mouseEvent) {
|
||||||
changePage("menue-view.fxml");
|
changePage("dailyOrder-view.fxml");
|
||||||
setButtonActive(tagesbestellungButton);
|
setButtonActive(tagesbestellungButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +70,8 @@ public class WorkerMenuController {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void onAusloggenClick(MouseEvent mouseEvent) throws IOException {
|
public void onAusloggenClick(MouseEvent mouseEvent) throws IOException {
|
||||||
StartViewApplication.changeScene("parentMenu-view.fxml");
|
AccountMgr.currentUser = null;
|
||||||
|
StartViewApplication.changeScene("login-view.fxml");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changePage(String page) {
|
private void changePage(String page) {
|
||||||
|
@ -3,6 +3,7 @@ module com.bib.essensbestellungsverwaltung {
|
|||||||
requires javafx.fxml;
|
requires javafx.fxml;
|
||||||
requires java.sql;
|
requires java.sql;
|
||||||
requires org.xerial.sqlitejdbc;
|
requires org.xerial.sqlitejdbc;
|
||||||
|
requires org.controlsfx.controls;
|
||||||
|
|
||||||
|
|
||||||
opens com.bib.essensbestellungsverwaltung to javafx.fxml;
|
opens com.bib.essensbestellungsverwaltung to javafx.fxml;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.text.*?>
|
<?import javafx.scene.text.*?>
|
||||||
|
<?import org.controlsfx.control.*?>
|
||||||
|
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="731.0" stylesheets="@createFood.css" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.CreateFoodController">
|
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="731.0" stylesheets="@createFood.css" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.CreateFoodController">
|
||||||
<children>
|
<children>
|
||||||
@ -90,8 +91,8 @@
|
|||||||
</HBox>
|
</HBox>
|
||||||
<HBox prefHeight="76.0" prefWidth="459.0">
|
<HBox prefHeight="76.0" prefWidth="459.0">
|
||||||
<children>
|
<children>
|
||||||
<Label prefHeight="41.0" prefWidth="171.0" text="Allergien mit Komma getrennt" />
|
<Label prefHeight="25.0" prefWidth="171.0" text="Allergien" />
|
||||||
<TextArea fx:id="allergienTextBox" prefHeight="76.0" prefWidth="246.0" />
|
<CheckComboBox fx:id="allergienComboBox" prefHeight="25.0" prefWidth="200.0" />
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<Text fx:id="responseText" fill="RED" strokeType="OUTSIDE" strokeWidth="0.0" textAlignment="CENTER" wrappingWidth="459.13673400878906">
|
<Text fx:id="responseText" fill="RED" strokeType="OUTSIDE" strokeWidth="0.0" textAlignment="CENTER" wrappingWidth="459.13673400878906">
|
||||||
@ -101,7 +102,7 @@
|
|||||||
</Text>
|
</Text>
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<Button id="btCreateFood" layoutX="484.0" layoutY="481.0" mnemonicParsing="false" onAction="#onHinzufügen" prefHeight="34.0" prefWidth="146.0" text="Hinzufügen" />
|
<Button id="btCreateFood" layoutX="484.0" layoutY="481.0" mnemonicParsing="false" onAction="#onHinzufuegen" prefHeight="34.0" prefWidth="146.0" text="Hinzufügen" />
|
||||||
<Button id="btCancelFood" layoutX="102.0" layoutY="473.0" mnemonicParsing="false" onAction="#onAbbrechen" prefHeight="50.0" prefWidth="162.0" text="Abbrechen" />
|
<Button id="btCancelFood" layoutX="102.0" layoutY="473.0" mnemonicParsing="false" onAction="#onAbbrechen" prefHeight="50.0" prefWidth="162.0" text="Abbrechen" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -1,14 +1,23 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import java.lang.*?>
|
|
||||||
<?import java.util.*?>
|
|
||||||
<?import javafx.scene.*?>
|
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import javafx.scene.text.*?>
|
||||||
|
|
||||||
<AnchorPane xmlns="http://javafx.com/javafx"
|
<AnchorPane prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.DailyOrderController">
|
||||||
xmlns:fx="http://javafx.com/fxml"
|
<children>
|
||||||
fx:controller="com.bib.essensbestellungsverwaltung.AdminController"
|
<HBox alignment="CENTER" layoutX="58.0" layoutY="221.0" prefHeight="349.0" prefWidth="683.0">
|
||||||
prefHeight="400.0" prefWidth="600.0">
|
<children>
|
||||||
|
<ListView fx:id="listView" prefHeight="349.0" prefWidth="300.0" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<Text layoutX="88.0" layoutY="68.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Tagesbestellung">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<DatePicker fx:id="datePicker" layoutX="88.0" layoutY="142.0" onAction="#onChangeDate" />
|
||||||
|
<Label layoutX="88.0" layoutY="121.0" text="Datum" />
|
||||||
|
<Button fx:id="sendButton" layoutX="374.0" layoutY="617.0" mnemonicParsing="false" onAction="#onSendButton" text="Bestellung senden" />
|
||||||
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -17,14 +17,10 @@
|
|||||||
</font></Text>
|
</font></Text>
|
||||||
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="122.0" spacing="20.0">
|
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="122.0" spacing="20.0">
|
||||||
<children>
|
<children>
|
||||||
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
|
<VBox alignment="CENTER" layoutX="150.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0">
|
||||||
<children>
|
<children>
|
||||||
<Label text="Jahr" />
|
<Label text="Kind" />
|
||||||
<Spinner fx:id="jahrSpinner">
|
<ChoiceBox fx:id="childChoiceBox"></ChoiceBox>
|
||||||
<valueFactory>
|
|
||||||
<SpinnerValueFactory.IntegerSpinnerValueFactory initialValue="2023" max="2100" min="2020" />
|
|
||||||
</valueFactory>
|
|
||||||
</Spinner>
|
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
|
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
|
||||||
@ -50,6 +46,16 @@
|
|||||||
</ChoiceBox>
|
</ChoiceBox>
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
|
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Jahr" />
|
||||||
|
<Spinner fx:id="jahrSpinner">
|
||||||
|
<valueFactory>
|
||||||
|
<SpinnerValueFactory.IntegerSpinnerValueFactory initialValue="2023" max="2100" min="2020" />
|
||||||
|
</valueFactory>
|
||||||
|
</Spinner>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<Button mnemonicParsing="false" onMouseClicked="#onRechnungErstellenClick" text="Rechnung erstellen" />
|
<Button mnemonicParsing="false" onMouseClicked="#onRechnungErstellenClick" text="Rechnung erstellen" />
|
||||||
|
@ -31,3 +31,6 @@
|
|||||||
-fx-background-color: rgba(97, 97, 232, 0.3);
|
-fx-background-color: rgba(97, 97, 232, 0.3);
|
||||||
-fx-background-radius: 25;
|
-fx-background-radius: 25;
|
||||||
}
|
}
|
||||||
|
.sidebar-nav_button.active {
|
||||||
|
-fx-background-color: #4e92b4;
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import javafx.scene.text.*?>
|
||||||
|
|
||||||
|
|
||||||
|
<AnchorPane prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.OrderHistoryController">
|
||||||
|
<children>
|
||||||
|
<Text layoutX="91.0" layoutY="84.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Bestellungen">
|
||||||
|
<font>
|
||||||
|
<Font name="System Bold" size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Text>
|
||||||
|
<ListView fx:id="listView" layoutX="91.0" layoutY="135.0" prefHeight="428.0" prefWidth="499.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
@ -29,9 +29,9 @@
|
|||||||
<Circle fill="#67b5ff2e" layoutX="-23.0" layoutY="368.0" radius="100.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<Circle fill="#67b5ff2e" layoutX="-23.0" layoutY="368.0" radius="100.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
||||||
<Circle fill="#69b6ffb0" layoutX="235.0" layoutY="310.0" radius="158.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<Circle fill="#69b6ffb0" layoutX="235.0" layoutY="310.0" radius="158.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
||||||
<Circle fill="#93c4f23d" layoutY="258.0" radius="106.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<Circle fill="#93c4f23d" layoutY="258.0" radius="106.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
||||||
<VBox alignment="CENTER" layoutX="263.0" prefHeight="400.0" prefWidth="338.0" style="-fx-background-color: white;">
|
<VBox layoutX="262.0" prefHeight="400.0" prefWidth="364.0" style="-fx-background-color: white;">
|
||||||
<children>
|
<children>
|
||||||
<TextField promptText="Email" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="tfEmail">
|
<TextField fx:id="tfLastName" alignment="TOP_LEFT" prefHeight="26.0" prefWidth="282.0" promptText="Name" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
<effect>
|
<effect>
|
||||||
<Blend />
|
<Blend />
|
||||||
</effect>
|
</effect>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<TextField promptText="Email bestätigen" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="tfBestätigungEmail">
|
<TextField fx:id="tfFirstName" promptText="Vorname" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
<effect>
|
<effect>
|
||||||
<Blend />
|
<Blend />
|
||||||
</effect>
|
</effect>
|
||||||
@ -53,7 +53,18 @@
|
|||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<PasswordField promptText="Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="pfPasswort">
|
<TextField fx:id="tfEmail" promptText="Email" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<effect>
|
||||||
|
<Blend />
|
||||||
|
</effect>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
<PasswordField fx:id="pfPassword" accessibleRole="TEXT_FIELD" promptText="Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -67,27 +78,53 @@
|
|||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</PasswordField>
|
</PasswordField>
|
||||||
<PasswordField promptText="Passwort bestätigen" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="pfBestätigungPassowrt">
|
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="tfPostCode" prefHeight="35.0" prefWidth="92.0" promptText="PLZ" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</HBox.margin>
|
||||||
<font>
|
<font>
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
</font>
|
</font>
|
||||||
<opaqueInsets>
|
</TextField>
|
||||||
<Insets />
|
<TextField fx:id="tfCity" prefHeight="35.0" prefWidth="182.0" promptText="Stadt" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
</opaqueInsets>
|
<HBox.margin>
|
||||||
<effect>
|
|
||||||
<Blend />
|
|
||||||
</effect>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
</VBox.margin>
|
</HBox.margin>
|
||||||
</PasswordField>
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="tfStreet" prefHeight="27.0" prefWidth="134.0" promptText="Straße" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField fx:id="tfHouseNumber" prefHeight="27.0" prefWidth="99.0" promptText="Hausnummer" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
||||||
<children>
|
<children>
|
||||||
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="106.0" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Konto erstellen" textFill="WHITE" onAction="#onKontoErstellenBtClick">
|
<Button mnemonicParsing="false" onAction="#onKontoErstellenBtClick" prefHeight="25.0" prefWidth="106.0" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Konto erstellen" textFill="WHITE">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
||||||
</font></Button>
|
</font></Button>
|
||||||
<Button id="btSignUp" mnemonicParsing="false" prefHeight="25.0" prefWidth="101.0" style="-fx-background-color: tranparent;" text="Anmelden" textFill="#7c7b7b" underline="true" onAction="#onAnmeldenBtClick"/>
|
<Button id="btSignUp" mnemonicParsing="false" onAction="#onAnmeldenBtClick" prefHeight="25.0" prefWidth="101.0" style="-fx-background-color: tranparent;" text="Anmelden" textFill="#7c7b7b" underline="true" />
|
||||||
</children>
|
</children>
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<Insets top="15.0" />
|
<Insets top="15.0" />
|
||||||
|
@ -1,20 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.*?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.image.*?>
|
<?import javafx.scene.image.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.text.*?>
|
<?import javafx.scene.text.*?>
|
||||||
<BorderPane fx:id="contentView" prefHeight="750.0" prefWidth="1200.0" stylesheets="@menue.css"
|
|
||||||
xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1"
|
<BorderPane fx:id="contentView" prefHeight="750.0" prefWidth="1200.0" stylesheets="@menue.css" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.WorkerMenuController">
|
||||||
fx:controller="com.bib.essensbestellungsverwaltung.WorkerMenuController">
|
|
||||||
<left>
|
<left>
|
||||||
<VBox alignment="TOP_CENTER" prefHeight="750.0" prefWidth="350.0" spacing="10.0"
|
<VBox alignment="TOP_CENTER" prefHeight="750.0" prefWidth="350.0" spacing="10.0" style="-fx-background-color: #69b6ff; -fx-padding: 20;" BorderPane.alignment="CENTER">
|
||||||
style="-fx-background-color: #69b6ff; -fx-padding: 20;" BorderPane.alignment="CENTER">
|
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="tagesbestellungButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="tagesbestellungButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onTagesbestellungenClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Tagesbestellung">
|
||||||
onMouseClicked="#onTagesbestellungenClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Tagesbestellung">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -26,9 +22,7 @@
|
|||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="monatsabrechnungButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="monatsabrechnungButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onMonatsabrechnungClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Monatsabrechnung">
|
||||||
onMouseClicked="#onMonatsabrechnungClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Monatsabrechnung">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -40,9 +34,7 @@
|
|||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="wochenplanButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="wochenplanButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onWochenplanClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Wochenplan">
|
||||||
onMouseClicked="#onWochenplanClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Wochenplan">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -54,9 +46,7 @@
|
|||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="mahlzeitButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="mahlzeitButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onMahlzeitClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Mahlzeit">
|
||||||
onMouseClicked="#onMahlzeitClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Mahlzeit">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -68,9 +58,7 @@
|
|||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="mitarbeiterButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="mitarbeiterButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onMitarbeiterClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Mitarbeiter">
|
||||||
onMouseClicked="#onMitarbeiterClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Mitarbeiter">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -87,9 +75,7 @@
|
|||||||
<Insets />
|
<Insets />
|
||||||
</opaqueInsets>
|
</opaqueInsets>
|
||||||
</Region>
|
</Region>
|
||||||
<Button fx:id="einstellungenButton" alignment="CENTER_LEFT" layoutX="10.0" layoutY="130.0"
|
<Button fx:id="einstellungenButton" alignment="CENTER_LEFT" layoutX="10.0" layoutY="130.0" mnemonicParsing="false" onMouseClicked="#onEinstellungenClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Einstellungen">
|
||||||
mnemonicParsing="false" onMouseClicked="#onEinstellungenClick" prefHeight="60.0"
|
|
||||||
prefWidth="250.0" styleClass="sidebar-nav_button" text="Einstellungen">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
@ -108,11 +94,9 @@
|
|||||||
</VBox>
|
</VBox>
|
||||||
</left>
|
</left>
|
||||||
<top>
|
<top>
|
||||||
<HBox alignment="CENTER_RIGHT" prefHeight="50.0" prefWidth="1200.0" style="-fx-background-color: #69b6ff;"
|
<HBox alignment="CENTER_RIGHT" prefHeight="50.0" prefWidth="1200.0" style="-fx-background-color: #69b6ff;" BorderPane.alignment="CENTER">
|
||||||
BorderPane.alignment="CENTER">
|
|
||||||
<children>
|
<children>
|
||||||
<Button mnemonicParsing="false" onMouseClicked="#onAusloggenClick" styleClass="sidebar-nav_button"
|
<Button mnemonicParsing="false" onMouseClicked="#onAusloggenClick" styleClass="sidebar-nav_button" text="Ausloggen">
|
||||||
text="Ausloggen">
|
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<Insets />
|
<Insets />
|
||||||
</opaqueInsets>
|
</opaqueInsets>
|
||||||
|
Loading…
Reference in New Issue
Block a user