Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
02b578a7ce | |||
04285ed7b7 | |||
87fa0f9b69 | |||
c3b47d5c36 | |||
58f61a71c2 | |||
7b7889fee4 | |||
a4ce206ec4 | |||
a03a294260 | |||
a7b192f256 | |||
|
3a2288f8c8 | ||
|
6ca54aa026 | ||
6fc28a0827 | |||
13bc9ae1dd | |||
|
f64dc7751f | ||
|
30cc971aa2 | ||
|
2475547787 | ||
|
166e516c67 | ||
|
57b5301208 | ||
|
1dadd23ffb | ||
|
941e76e05b | ||
|
b66cb3e9bc | ||
|
c4e720b9f3 | ||
|
47905bc8d0 | ||
|
c49d3cb699 | ||
|
e33e3d8ccb | ||
|
4c9a3343d2 | ||
|
745eddea31 | ||
|
cd8e4c9b3d | ||
|
b37cd2ad38 | ||
|
5f5480bf5c | ||
|
07050a5809 | ||
|
944ddbff60 | ||
|
7534df3263 | ||
|
9d3e035a20 | ||
|
e87c7b480a | ||
|
681f039b5c | ||
0fed0fb12b | |||
dbe98686bd | |||
106b97e105 | |||
d2df46eaa6 | |||
3643f44afb | |||
c022d68b92 | |||
b9101e4a55 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -37,4 +37,5 @@ build/
|
|||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.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
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import javax.crypto.SecretKeyFactory;
|
import javax.crypto.SecretKeyFactory;
|
||||||
import javax.crypto.spec.PBEKeySpec;
|
import javax.crypto.spec.PBEKeySpec;
|
||||||
@ -13,185 +10,366 @@ import java.util.ArrayList;
|
|||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of functions loosely related to account management
|
||||||
|
* Acts as an abstraction layer to the database
|
||||||
|
*
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class AccountMgr {
|
public class AccountMgr {
|
||||||
protected static double price = 5.0;
|
|
||||||
|
static User currentUser = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long createWorker(Worker worker){
|
protected static long createWorker(Worker worker) {
|
||||||
long id = createUser(worker);
|
long id = createUser(worker);
|
||||||
String sId = String.valueOf(id);
|
String sId = String.valueOf(id);
|
||||||
Database.insert("worker", new String[]{"userid"}, new String[]{sId});
|
Database.insert("worker", new String[] { "userid" }, new String[] { sId });
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long createParent(Parent parent){
|
protected static long createParent(Parent parent) {
|
||||||
long id = createUser(parent);
|
long id = createUser(parent);
|
||||||
String sId = String.valueOf(id);
|
String sId = String.valueOf(id);
|
||||||
Database.insert("parent", new String[]{"userid"}, new String[]{sId});
|
Database.insert("parent", new String[] { "userid" }, new String[] { sId });
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* adds a user to the database
|
* adds a user to the database
|
||||||
|
*
|
||||||
|
* @param user the user to be created
|
||||||
* @return userid or -1
|
* @return userid or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long createUser(User user) {
|
protected static long createUser(User user) {
|
||||||
String[] userH = {"name", "firstname", "addressid", "password", "email"};
|
String[] userH = { "name", "firstname", "addressid", "password", "email" };
|
||||||
String name = user.getName();
|
String name = user.getName();
|
||||||
String firstname = user.getFirstname();
|
String firstname = user.getFirstname();
|
||||||
String pw = hashAndSalt(user.getPassword(), getSalt());
|
String pw = hashAndSalt(user.getPassword(), getSalt());
|
||||||
String email = user.getEmail();
|
String email = user.getEmail();
|
||||||
long addressId = user.getAddress().getId();
|
long addressId = user.getAddress().getId();
|
||||||
if(addressId < 1){
|
if (addressId < 1) {
|
||||||
addressId = createAddress(user.getAddress());
|
addressId = createAddress(user.getAddress());
|
||||||
}
|
}
|
||||||
String[] userD = {name, firstname, String.valueOf(addressId), pw, email};
|
String[] userD = { name, firstname, String.valueOf(addressId), pw, email };
|
||||||
return Database.insert("user", userH, userD);
|
return Database.insert("user", userH, userD);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static long createAddress(Address address){
|
/**
|
||||||
String[] addressH = {"street", "number", "plz", "city"};
|
* adds an address to the database
|
||||||
String[] addressD = {address.getStreet(),address.getNumber(),address.getPlz(),address.getCity()};
|
*
|
||||||
return Database.insert("address",addressH,addressD);
|
* @param address the address to be created
|
||||||
|
* @return id or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static long createAddress(Address address) {
|
||||||
|
String[] addressH = { "street", "number", "plz", "city" };
|
||||||
|
String[] addressD = { address.getStreet(), address.getNumber(), address.getPlz(), address.getCity() };
|
||||||
|
return Database.insert("address", addressH, addressD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* adds a child and allergies to the database
|
* adds a child and allergies to the database
|
||||||
|
*
|
||||||
|
* @param child the child to be created
|
||||||
* @return id of child or -1
|
* @return id of child or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long createChild(Child child){
|
protected static long createChild(Child child) {
|
||||||
String[] childH = {"name","firstname","addressid"};
|
String[] childH = { "name", "firstname", "addressid" };
|
||||||
String[] childD = {child.getName(), child.getFirstname(), String.valueOf(child.getAddress().getId())};
|
String[] childD = { child.getName(), child.getFirstname(), String.valueOf(child.getAddress().getId()) };
|
||||||
long id = Database.insert("child", childH, childD);
|
long id = Database.insert("child", childH, childD);
|
||||||
String[] child_allergyH = {"childid","allergyid","severityid"};
|
String[] child_allergyH = { "childid", "allergyid", "severityid" };
|
||||||
for (AllergySeverity allergy: child.getAllergies()) {
|
for (AllergySeverity allergy : child.getAllergies()) {
|
||||||
String sId = String.valueOf(id);
|
String sId = String.valueOf(id);
|
||||||
String sAllergyId = String.valueOf(allergy.getAllergy().getId());
|
String sAllergyId = String.valueOf(allergy.getAllergy().getId());
|
||||||
String sSeverityId = String.valueOf(allergy.getSeverityId());
|
String sSeverityId = String.valueOf(allergy.getSeverityId());
|
||||||
String[] child_allergyD = {sId,sAllergyId,sSeverityId};
|
String[] child_allergyD = { sId, sAllergyId, sSeverityId };
|
||||||
Database.insert("child_allergy",child_allergyH,child_allergyD);
|
Database.insert("child_allergy", child_allergyH, child_allergyD);
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static User getUserById(long id){
|
/**
|
||||||
List<String> entry = Database.getEntryById("user",id);
|
* 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
|
||||||
|
* @return User(Worker | Parent) or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static User getUserById(long id) {
|
||||||
|
List<String> entry = Database.getEntryById("user", id);
|
||||||
|
if (entry.size() != 1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] parts = entry.get(0).split(":");
|
String[] parts = entry.get(0).split(":");
|
||||||
Address address = getAddressById(id);
|
Address address = getAddressById(id);
|
||||||
if(isWorker(String.valueOf(id))){
|
if (isWorker(String.valueOf(id))) {
|
||||||
return new Worker(id,parts[1],parts[2],parts[4],parts[5],address);
|
return new Worker(id, parts[1], parts[2], parts[4], parts[5], address);
|
||||||
}else{
|
} else {
|
||||||
String[] parent_childH = {"parentuserid"};
|
String[] parent_childH = { "parentuserid" };
|
||||||
String[] parent_childD = {String.valueOf(id)};
|
String[] parent_childD = { String.valueOf(id) };
|
||||||
List<Child> children = new ArrayList<>();
|
List<Child> children = new ArrayList<>();
|
||||||
List<String> parent_childEntries = Database.select("parent_child",parent_childH,parent_childD);
|
List<String> parent_childEntries = Database.select("parent_child", parent_childH, parent_childD);
|
||||||
for (String parent_childEntry: parent_childEntries) {
|
for (String parent_childEntry : parent_childEntries) {
|
||||||
String[] parent_childParts = parent_childEntry.split(":");
|
String[] parent_childParts = parent_childEntry.split(":");
|
||||||
children.add(getChildById(Long.parseLong(parent_childParts[2])));
|
children.add(getChildById(Long.parseLong(parent_childParts[2])));
|
||||||
}
|
}
|
||||||
return new Parent(id,parts[1],parts[2],parts[4],parts[5],address,children);
|
return new Parent(id, parts[1], parts[2], parts[4], parts[5], address, children);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Child getChildById(long id){
|
/**
|
||||||
List<String> entry = Database.getEntryById("child",id);
|
* returns a Child for a given id or null if no unique id was found
|
||||||
|
*
|
||||||
|
* @param id id of child
|
||||||
|
* @return Child or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static Child getChildById(long id) {
|
||||||
|
List<String> entry = Database.getEntryById("child", id);
|
||||||
|
if (entry.size() != 1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] parts = entry.get(0).split(":");
|
String[] parts = entry.get(0).split(":");
|
||||||
String[] child_allergyH = {"childid"};
|
String[] child_allergyH = { "childid" };
|
||||||
String[] child_allergyD = {String.valueOf(id)};
|
String[] child_allergyD = { String.valueOf(id) };
|
||||||
List<String> entriesAllergy = Database.select("child_allergy",child_allergyH,child_allergyD);
|
List<String> entriesAllergy = Database.select("child_allergy", child_allergyH, child_allergyD);
|
||||||
List<AllergySeverity> allergySeverities = new ArrayList<>();
|
List<AllergySeverity> allergySeverities = new ArrayList<>();
|
||||||
for (String entryAllergy : entriesAllergy) {
|
for (String entryAllergy : entriesAllergy) {
|
||||||
String[] allergyParts = entryAllergy.split(":");
|
String[] allergyParts = entryAllergy.split(":");
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Address getAddressById(long id){
|
/**
|
||||||
List<String> entry = Database.getEntryById("address",id);
|
* 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
|
||||||
|
*
|
||||||
|
* @param id id of the address
|
||||||
|
* @return Address or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static Address getAddressById(long id) {
|
||||||
|
List<String> entry = Database.getEntryById("address", id);
|
||||||
|
if (entry.size() != 1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] parts = entry.get(0).split(":");
|
String[] parts = entry.get(0).split(":");
|
||||||
return new Address(Long.parseLong(parts[0]),parts[1],parts[2],parts[3],parts[4]);
|
return new Address(Long.parseLong(parts[0]), parts[1], parts[2], parts[3], parts[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long matchParentChild(String parentId, String childId){
|
protected static long matchParentChild(String parentId, String childId) {
|
||||||
String[] parent_childH = {"parentuserid","childid"};
|
String[] parent_childH = { "parentuserid", "childid" };
|
||||||
String[] parent_childD = {parentId,childId};
|
String[] parent_childD = { parentId, childId };
|
||||||
return Database.insert("parent_child", parent_childH,parent_childD);
|
return Database.insert("parent_child", parent_childH, parent_childD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long login(String email, String pw){
|
protected static long login(String email, String pw) {
|
||||||
String[] pwH = {"email"};
|
String[] pwH = { "email" };
|
||||||
String[] pwD = {email};
|
String[] pwD = { email };
|
||||||
List<String> foundEmail = Database.select("user",pwH,pwD);
|
List<String> foundEmail = Database.select("user", pwH, pwD);
|
||||||
String salt;
|
String salt;
|
||||||
if(foundEmail.size() == 1){
|
if (foundEmail.size() == 1) {
|
||||||
String[] userParts = foundEmail.get(0).split(":");
|
String[] userParts = foundEmail.get(0).split(":");
|
||||||
String[] pwParts = userParts[4].split("\\.");
|
String[] pwParts = userParts[4].split("\\.");
|
||||||
salt = pwParts[1];
|
salt = pwParts[1];
|
||||||
}else{
|
} else {
|
||||||
//no unique user found; still calculating a hash for security reasons
|
// no unique user found; still calculating a hash for security reasons
|
||||||
salt = getSalt();
|
salt = getSalt();
|
||||||
}
|
}
|
||||||
String[] userH = {"email","password"};
|
String[] userH = { "email", "password" };
|
||||||
String[] userD = {email,hashAndSalt(pw,salt)};
|
String[] userD = { email, hashAndSalt(pw, salt) };
|
||||||
return Database.getSingleId("user",userH,userD);
|
return Database.getSingleId("user", userH, userD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
protected static boolean isWorker(String id){
|
protected static boolean isWorker(String id) {
|
||||||
String[] workerH = {"userid"};
|
String[] workerH = { "userid" };
|
||||||
String[] workerD = {id};
|
String[] workerD = { id };
|
||||||
long workerId = Database.getSingleId("worker",workerH,workerD);
|
long workerId = Database.getSingleId("worker", workerH, workerD);
|
||||||
return workerId > 0;
|
return workerId > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
protected static boolean isParent(String id){
|
protected static boolean isParent(String id) {
|
||||||
String[] parentH = {"userid"};
|
String[] parentH = { "userid" };
|
||||||
String[] parentD = {id};
|
String[] parentD = { id };
|
||||||
long parentId = Database.getSingleId("parent",parentH,parentD);
|
long parentId = Database.getSingleId("parent", parentH, parentD);
|
||||||
return parentId > 0;
|
return parentId > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
private static String hashAndSalt(String pw, String salt){
|
private static String hashAndSalt(String pw, String salt) {
|
||||||
Base64.Decoder dec = Base64.getDecoder();
|
Base64.Decoder dec = Base64.getDecoder();
|
||||||
byte[] bySalt = dec.decode(salt);
|
byte[] bySalt = dec.decode(salt);
|
||||||
KeySpec spec = new PBEKeySpec(pw.toCharArray(), bySalt,310001,256);
|
KeySpec spec = new PBEKeySpec(pw.toCharArray(), bySalt, 310001, 256);
|
||||||
String hashedPw;
|
String hashedPw;
|
||||||
try {
|
try {
|
||||||
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
|
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
|
||||||
@ -205,7 +383,13 @@ public class AccountMgr {
|
|||||||
return hashedPw;
|
return hashedPw;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getSalt(){
|
/**
|
||||||
|
* generates a secure random salt, Base64 encoded
|
||||||
|
*
|
||||||
|
* @return String Base64 encoded
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
private static String getSalt() {
|
||||||
SecureRandom sec = new SecureRandom();
|
SecureRandom sec = new SecureRandom();
|
||||||
byte[] salt = new byte[16];
|
byte[] salt = new byte[16];
|
||||||
sec.nextBytes(salt);
|
sec.nextBytes(salt);
|
||||||
@ -215,44 +399,89 @@ 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
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static List<String> getInvoice(String date, String childId){
|
protected static List<String> getInvoice(String date, String childId) {
|
||||||
List<String> invoice = new ArrayList<>();
|
List<String> invoice = new ArrayList<>();
|
||||||
invoice.add("Monatsabrechnung " + date);
|
|
||||||
List<String> child = Database.getEntryById("child", Long.parseLong(childId));
|
List<String> child = Database.getEntryById("child", Long.parseLong(childId));
|
||||||
|
if (child.size() != 1) {
|
||||||
|
return invoice;
|
||||||
|
}
|
||||||
|
invoice.add("Monatsabrechnung " + date);
|
||||||
String[] childParts = child.get(0).split(":");
|
String[] childParts = child.get(0).split(":");
|
||||||
invoice.add(childParts[1] + ", " + childParts[2]);
|
invoice.add(childParts[1] + ", " + childParts[2]);
|
||||||
String[] food_planH = {"date"};
|
String[] food_planH = { "date" };
|
||||||
String[] food_planD = {date+"%"};
|
String[] food_planD = { date + "%" };
|
||||||
List<String> food_plan = Database.select("food_plan",food_planH,food_planD);
|
List<String> food_plan = Database.select("food_plan", food_planH, food_planD);
|
||||||
for (String day : food_plan) {
|
for (String day : food_plan) {
|
||||||
String[] food_planParts = day.split(":");
|
String[] food_planParts = day.split(":");
|
||||||
String[] food_selectionH = {"childid","food_planid"};
|
String[] food_selectionH = { "childid", "food_planid" };
|
||||||
String[] food_selectionD = {childId,food_planParts[0]};
|
String[] food_selectionD = { childId, food_planParts[0] };
|
||||||
List<String> food_selection = Database.select("food_selection",food_selectionH,food_selectionD);
|
List<String> food_selection = Database.select("food_selection", food_selectionH, food_selectionD);
|
||||||
for (String food_select : food_selection) {
|
for (String food_select : food_selection) {
|
||||||
String[] food_selectParts = food_select.split(":");
|
String[] food_selectParts = food_select.split(":");
|
||||||
List<String> food = Database.getEntryById("food",Long.parseLong(food_selectParts[3]));
|
List<String> food = Database.getEntryById("food", Long.parseLong(food_selectParts[3]));
|
||||||
String[] foodParts = food.get(0).split(":");
|
String[] foodParts = food.get(0).split(":");
|
||||||
String line = food_planParts[1] + ": " + foodParts[1];
|
String line = food_planParts[1] + ": " + foodParts[1];
|
||||||
invoice.add(line);
|
invoice.add(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
invoice.add("Total: " + (invoice.size()-2) + " X " + price + "€ = " + ((invoice.size()-2)*price) + "€");
|
double price = getPrice();
|
||||||
|
invoice.add("Total: " + (invoice.size() - 2) + " X " + price + "€ = " + ((invoice.size() - 2) * price) + "€");
|
||||||
return invoice;
|
return invoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void getPriceFromDb(){
|
/**
|
||||||
List<String> priceEntry = Database.getEntryById("price",1);
|
* gets the price per meal from the database and converts it to double
|
||||||
price = Double.parseDouble(priceEntry.get(0).split(":")[1])/100.0;
|
*
|
||||||
|
* @return double price
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static double getPrice() {
|
||||||
|
List<String> priceEntry = Database.getEntryById("price", 1);
|
||||||
|
return Double.parseDouble(priceEntry.get(0).split(":")[1]) / 100.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void setPriceInDb(){
|
/**
|
||||||
String[] priceH = {"id","price"};
|
* converts the price per meal to integer and updates it in the database
|
||||||
String[] priceD = {"1", String.valueOf(price*100)};
|
*
|
||||||
Database.update("price",priceH,priceD);
|
* @param price double
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
protected static void setPrice(double price) {
|
||||||
|
String[] priceH = { "id", "price" };
|
||||||
|
String[] priceD = { "1", String.valueOf((int) (price * 100)) };
|
||||||
|
Database.update("price", priceH, priceD);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update password in User table
|
||||||
|
* @param password User
|
||||||
|
* @return update password
|
||||||
|
* @author Reshad Meher
|
||||||
|
*/
|
||||||
|
protected static long updatePassword( User password) {
|
||||||
|
|
||||||
|
String[] pwH = {"password"};
|
||||||
|
String[] pwD = {password.getPassword()};
|
||||||
|
long updates = Database.update("user",pwH,pwD);
|
||||||
|
return updates;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* update adress in User table
|
||||||
|
* @param address Adresss
|
||||||
|
* @return update Adrssse
|
||||||
|
* @author Reshad Meher
|
||||||
|
*/
|
||||||
|
protected static long updateAdreess(Address address ){
|
||||||
|
String[] adH = {"stree","numbrt","plz","city"};
|
||||||
|
String[] adD = {address.getStreet(),address.getNumber(),address.getPlz(),address.getCity()};
|
||||||
|
long updates = Database.update("user",adH,adD);
|
||||||
|
return updates;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Address, used by User and Child and intended as a way to identify a child if you want to match it to another parent
|
||||||
|
* one constructor is used for creating new addresses the other is used to create existing addresses from database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class Address {
|
public class Address {
|
||||||
private long id;
|
private long id;
|
||||||
private String street;
|
private String street;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Allergy, used by Food and AllergySeverity, not intended to be changed
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class Allergy {
|
public class Allergy {
|
||||||
private final long id;
|
private final long id;
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -25,4 +26,9 @@ public class Allergy {
|
|||||||
public String getHandle() {
|
public String getHandle() {
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matching an Allergy to a Severity, used by Child
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class AllergySeverity {
|
public class AllergySeverity {
|
||||||
private Allergy allergy;
|
private Allergy allergy;
|
||||||
private long severityId;
|
private long severityId;
|
||||||
@ -25,4 +26,9 @@ public class AllergySeverity {
|
|||||||
public String getSeverity() {
|
public String getSeverity() {
|
||||||
return severity;
|
return severity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getAllergy().getName() + " (" + getSeverity() + ")";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Child, used by Parent
|
||||||
|
* one constructor is used to create new children the other is used to create existing children from database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class Child {
|
public class Child {
|
||||||
private long id;
|
private long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,156 @@
|
|||||||
|
/*Schulte*/
|
||||||
|
|
||||||
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Formattable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
public class ChildViewController implements Initializable {
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public TextField name;
|
||||||
|
@FXML
|
||||||
|
public TextField lastname;
|
||||||
|
@FXML
|
||||||
|
public TextField street;
|
||||||
|
@FXML
|
||||||
|
public TextField number;
|
||||||
|
@FXML
|
||||||
|
public TextField plz;
|
||||||
|
@FXML
|
||||||
|
public TextField city;
|
||||||
|
//@FXML
|
||||||
|
//public ComboBox group;
|
||||||
|
//@FXML
|
||||||
|
//public TextField age;
|
||||||
|
//@FXML
|
||||||
|
//public TextField allergies;
|
||||||
|
@FXML
|
||||||
|
public ListView allergiesList;
|
||||||
|
ObservableList olAllergiesList;
|
||||||
|
@FXML
|
||||||
|
public ComboBox selectAllergy;
|
||||||
|
@FXML
|
||||||
|
public ComboBox selectAllergySeverity;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
protected void onBtClick(){
|
||||||
|
|
||||||
|
boolean childData = false;
|
||||||
|
|
||||||
|
String childName = name.getText();
|
||||||
|
String childLastname = lastname.getText();
|
||||||
|
|
||||||
|
String streetString = street.getText();
|
||||||
|
String numberString = number.getText();
|
||||||
|
String plzString = plz.getText();
|
||||||
|
String cityString = city.getText();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(childName.isEmpty() || childLastname.isEmpty() || streetString.isEmpty() || numberString.isEmpty() ||plzString.isEmpty() || cityString.isEmpty()){
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Felder");
|
||||||
|
alert.setHeaderText("Eingabe unvollständig");
|
||||||
|
alert.setContentText("Bitte füllen sie alle Felder aus");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
else childData = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(childData) {
|
||||||
|
|
||||||
|
|
||||||
|
Address adress = AccountMgr.currentUser.getAddress();
|
||||||
|
|
||||||
|
var olChildAllergyList = allergiesList.getItems();
|
||||||
|
List<AllergySeverity> childAllergyList = new ArrayList<>();
|
||||||
|
for (var o : olChildAllergyList) {
|
||||||
|
childAllergyList.add((AllergySeverity) o);
|
||||||
|
}
|
||||||
|
ArrayList<AllergySeverity> allergySeverityArrayList = new ArrayList<>();
|
||||||
|
|
||||||
|
/*for (AllergySeverity a : childAllergyList) {
|
||||||
|
AllergySeverity aS = new AllergySeverity(a, )
|
||||||
|
} */ //Allergy Severity doesn't work in my case so the List will be left empty for now
|
||||||
|
|
||||||
|
|
||||||
|
Child child = new Child(childLastname, childName, adress, childAllergyList);
|
||||||
|
|
||||||
|
System.out.println(AccountMgr.createChild(child));
|
||||||
|
|
||||||
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||||
|
alert.setTitle("Bestätigung");
|
||||||
|
alert.setHeaderText("Bestätigung");
|
||||||
|
alert.setContentText("Ihr Kind " + childName + " " + childLastname + " wurde Erfolgreich angelegt");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Allergy> allergyComboBox(){
|
||||||
|
ArrayList<Allergy> allergyArrayList = new ArrayList<>();
|
||||||
|
for (int i = 1; i < 23; i++){
|
||||||
|
Allergy a = FoodMgr.getAllergyById(i);
|
||||||
|
allergyArrayList.add(a);
|
||||||
|
}
|
||||||
|
return allergyArrayList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void addAllergy() {
|
||||||
|
|
||||||
|
boolean allergyEmpty = (selectAllergy.getValue() == "Allergie Wählen");
|
||||||
|
boolean severityEmpty = (selectAllergySeverity.getValue() == "Schwere");
|
||||||
|
|
||||||
|
if(allergyEmpty || severityEmpty) {
|
||||||
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Fehler");
|
||||||
|
alert.setHeaderText("Ungültige Auswahl");
|
||||||
|
alert.setContentText("Bitte Wählen Sie Allergie und schwere aus");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Allergy addedAllergy = (Allergy)selectAllergy.getValue();
|
||||||
|
long addedSeverityId = Long.parseLong(selectAllergySeverity.getValue().toString().split(":")[0]);
|
||||||
|
String addedSeverity = selectAllergySeverity.getValue().toString().split(":")[1];
|
||||||
|
olAllergiesList.add(new AllergySeverity(addedAllergy,addedSeverityId,addedSeverity));
|
||||||
|
allergiesList.setItems(olAllergiesList);
|
||||||
|
|
||||||
|
|
||||||
|
selectAllergy.setValue("Allergie Wählen");
|
||||||
|
selectAllergySeverity.setValue("Schwere");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
|
ObservableList<Allergy> olAll = FXCollections.observableArrayList(allergyComboBox());
|
||||||
|
selectAllergy.setItems(olAll);
|
||||||
|
//selectAllergy.getItems().addAll(allergyComboBox());
|
||||||
|
olAllergiesList = FXCollections.observableArrayList();
|
||||||
|
|
||||||
|
ObservableList olSev = FXCollections.observableArrayList();
|
||||||
|
olSev.add("1:Harmlos");
|
||||||
|
olSev.add("2:Warnung");
|
||||||
|
olSev.add("3:Kritisch");
|
||||||
|
selectAllergySeverity.setItems(olSev);
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,13 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* library for cli functions
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class ConsoleLib {
|
public class ConsoleLib {
|
||||||
public static void createWorkerPrompt(){
|
public static void createWorkerPrompt(){
|
||||||
Scanner sc = new Scanner(System.in);
|
Scanner sc = new Scanner(System.in);
|
||||||
@ -320,7 +321,6 @@ public class ConsoleLib {
|
|||||||
Scanner sc = new Scanner(System.in);
|
Scanner sc = new Scanner(System.in);
|
||||||
double price = sc.nextDouble();
|
double price = sc.nextDouble();
|
||||||
sc.nextLine();
|
sc.nextLine();
|
||||||
AccountMgr.price = price;
|
AccountMgr.setPrice(price);
|
||||||
AccountMgr.setPriceInDb();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* simple cli showcase of the implemented functionality
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class ConsoleMain {
|
public class ConsoleMain {
|
||||||
static User currentUser = null;
|
//static User currentUser = null;
|
||||||
static boolean running = true;
|
static boolean running = true;
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
boolean firstRun = Database.init();
|
boolean firstRun = Database.init();
|
||||||
@ -15,14 +16,14 @@ public class ConsoleMain {
|
|||||||
Database.fillDb();
|
Database.fillDb();
|
||||||
ConsoleLib.createWorkerPrompt();
|
ConsoleLib.createWorkerPrompt();
|
||||||
}
|
}
|
||||||
AccountMgr.getPriceFromDb();
|
AccountMgr.getPrice();
|
||||||
while (running){
|
while (running){
|
||||||
if(currentUser == null){
|
if(AccountMgr.currentUser == null){
|
||||||
defaultMenu();
|
defaultMenu();
|
||||||
}else{
|
}else{
|
||||||
if(currentUser.getClass().getSimpleName().equals("Worker")){
|
if(AccountMgr.currentUser.getClass().getSimpleName().equals("Worker")){
|
||||||
adminMenu();
|
adminMenu();
|
||||||
}else if(currentUser.getClass().getSimpleName().equals("Parent")){
|
}else if(AccountMgr.currentUser.getClass().getSimpleName().equals("Parent")){
|
||||||
parentMenu();
|
parentMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,9 +41,7 @@ public class ConsoleMain {
|
|||||||
String selection = sc.nextLine();
|
String selection = sc.nextLine();
|
||||||
switch (selection) {
|
switch (selection) {
|
||||||
case "0" -> running = false;
|
case "0" -> running = false;
|
||||||
case "1" -> {
|
case "1" -> AccountMgr.currentUser = ConsoleLib.loginPrompt();
|
||||||
currentUser = ConsoleLib.loginPrompt();
|
|
||||||
}
|
|
||||||
case "2" -> ConsoleLib.showFood_planPrompt();
|
case "2" -> ConsoleLib.showFood_planPrompt();
|
||||||
case "3" -> ConsoleLib.createParentPrompt();
|
case "3" -> ConsoleLib.createParentPrompt();
|
||||||
}
|
}
|
||||||
@ -69,13 +68,11 @@ public class ConsoleMain {
|
|||||||
Scanner sc = new Scanner(System.in);
|
Scanner sc = new Scanner(System.in);
|
||||||
String selection = sc.nextLine();
|
String selection = sc.nextLine();
|
||||||
switch (selection) {
|
switch (selection) {
|
||||||
case "0" -> {
|
case "0" -> AccountMgr.currentUser = null;
|
||||||
currentUser = null;
|
|
||||||
}
|
|
||||||
case "1" -> ConsoleLib.createWorkerPrompt();
|
case "1" -> ConsoleLib.createWorkerPrompt();
|
||||||
case "2" -> ConsoleLib.createParentPrompt();
|
case "2" -> ConsoleLib.createParentPrompt();
|
||||||
case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUser.getId()));
|
case "3" -> ConsoleLib.createChildPrompt(String.valueOf(AccountMgr.currentUser.getId()));
|
||||||
case "4" -> ConsoleLib.matchParentChildPrompt(String.valueOf(currentUser.getId()));
|
case "4" -> ConsoleLib.matchParentChildPrompt(String.valueOf(AccountMgr.currentUser.getId()));
|
||||||
case "5" -> ConsoleLib.createFoodPrompt();
|
case "5" -> ConsoleLib.createFoodPrompt();
|
||||||
case "6" -> ConsoleLib.createFood_planPrompt();
|
case "6" -> ConsoleLib.createFood_planPrompt();
|
||||||
case "7" -> ConsoleLib.showFood_planPrompt();
|
case "7" -> ConsoleLib.showFood_planPrompt();
|
||||||
@ -100,11 +97,9 @@ public class ConsoleMain {
|
|||||||
Scanner sc = new Scanner(System.in);
|
Scanner sc = new Scanner(System.in);
|
||||||
String selection = sc.nextLine();
|
String selection = sc.nextLine();
|
||||||
switch (selection) {
|
switch (selection) {
|
||||||
case "0" -> {
|
case "0" -> AccountMgr.currentUser = null;
|
||||||
currentUser = null;
|
case "3" -> ConsoleLib.createChildPrompt(String.valueOf(AccountMgr.currentUser.getId()));
|
||||||
}
|
case "x1" -> ConsoleLib.tablePrompt();
|
||||||
case "3" -> ConsoleLib.createChildPrompt(String.valueOf(currentUser.getId()));
|
|
||||||
case "6" -> ConsoleLib.tablePrompt();
|
|
||||||
case "7" -> ConsoleLib.showFood_planPrompt();
|
case "7" -> ConsoleLib.showFood_planPrompt();
|
||||||
case "8" -> ConsoleLib.createFood_selectionPrompt();
|
case "8" -> ConsoleLib.createFood_selectionPrompt();
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,4 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -10,16 +7,25 @@ import java.sql.*;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic operations on the database
|
||||||
|
* Use init() -> createDb() -> fillDb() to create the skeleton with some default
|
||||||
|
* values
|
||||||
|
* Provides select, insert, update, delete, count operations and more
|
||||||
|
*
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class Database {
|
public class Database {
|
||||||
private static final String dbLocation = "jdbc:sqlite:"+Path.of("").toAbsolutePath()+"/database.db";
|
private static final String dbLocation = "jdbc:sqlite:" + Path.of("").toAbsolutePath() + "/database.db";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
protected static boolean init(){
|
protected static boolean init() {
|
||||||
File db = new File(Path.of("").toAbsolutePath()+"/database.db");
|
File db = new File(Path.of("").toAbsolutePath() + "/database.db");
|
||||||
try {
|
try {
|
||||||
return db.createNewFile();
|
return db.createNewFile();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -29,13 +35,15 @@ 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
|
||||||
*/
|
*/
|
||||||
protected static Connection connect(){
|
protected static Connection connect() {
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
try{
|
try {
|
||||||
conn = DriverManager.getConnection(dbLocation);
|
conn = DriverManager.getConnection(dbLocation);
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return conn;
|
return conn;
|
||||||
@ -43,8 +51,10 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* creates the initial structure of the db
|
* creates the initial structure of the db
|
||||||
|
*
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static void createDb(){
|
protected static void createDb() {
|
||||||
String[] sql = new String[15];
|
String[] sql = new String[15];
|
||||||
sql[0] = """
|
sql[0] = """
|
||||||
CREATE TABLE IF NOT EXISTS address (
|
CREATE TABLE IF NOT EXISTS address (
|
||||||
@ -162,8 +172,8 @@ public class Database {
|
|||||||
id integer PRIMARY KEY,
|
id integer PRIMARY KEY,
|
||||||
price integer
|
price integer
|
||||||
);""";
|
);""";
|
||||||
try(Connection conn = connect(); Statement stmt = conn.createStatement()){
|
try (Connection conn = connect(); Statement stmt = conn.createStatement()) {
|
||||||
for(int i = 0; i < sql.length; i++){
|
for (int i = 0; i < sql.length; i++) {
|
||||||
stmt.execute(sql[i]);
|
stmt.execute(sql[i]);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -173,9 +183,12 @@ public class Database {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts fixed values into the database
|
* inserts fixed values into the database
|
||||||
|
*
|
||||||
|
* @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');""");
|
||||||
@ -185,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');""");
|
||||||
@ -251,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');""");
|
||||||
@ -263,46 +278,192 @@ 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');""");
|
||||||
try(Connection conn = connect(); Statement stmt = conn.createStatement()){
|
// 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()) {
|
||||||
for (String sql : sqls) {
|
for (String sql : sqls) {
|
||||||
stmt.execute(sql);
|
stmt.execute(sql);
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts data into table and returns its id
|
* inserts data into table and returns its id
|
||||||
* does not insert if the exact set already exists
|
* 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
|
||||||
* @return id of dataset or -1
|
* @return id of dataset or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long insert(String table, String[] header, String[] values){
|
protected static long insert(String table, String[] header, String[] values) {
|
||||||
long id = -1;
|
long id = -1;
|
||||||
try (Connection conn = connect()){
|
try (Connection conn = connect()) {
|
||||||
String query = queryBuilder("exists",table,header,values);
|
String query = queryBuilder("exists", table, header, values);
|
||||||
PreparedStatement psQuery = conn.prepareStatement(query);
|
PreparedStatement psQuery = conn.prepareStatement(query);
|
||||||
ResultSet rsQuery = psQuery.executeQuery();
|
ResultSet rsQuery = psQuery.executeQuery();
|
||||||
if(rsQuery.next()){
|
if (rsQuery.next()) {
|
||||||
boolean found = rsQuery.getBoolean(1);
|
boolean found = rsQuery.getBoolean(1);
|
||||||
if(!found){
|
if (!found) {
|
||||||
String sql = queryBuilder("insert",table,header,values);
|
String sql = queryBuilder("insert", table, header, values);
|
||||||
String[] rowId = {"id"};
|
String[] rowId = { "id" };
|
||||||
PreparedStatement ps = conn.prepareStatement(sql,rowId);
|
PreparedStatement ps = conn.prepareStatement(sql, rowId);
|
||||||
ps.execute();
|
ps.execute();
|
||||||
ResultSet rs = ps.getGeneratedKeys();
|
ResultSet rs = ps.getGeneratedKeys();
|
||||||
if(rs.next()){
|
if (rs.next()) {
|
||||||
id = rs.getLong(1);
|
id = rs.getLong(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
} else {
|
||||||
query = queryBuilder("selectMatch",table,header,values);
|
query = queryBuilder("selectMatch", table, header, values);
|
||||||
psQuery = conn.prepareStatement(query);
|
psQuery = conn.prepareStatement(query);
|
||||||
rsQuery = psQuery.executeQuery();
|
rsQuery = psQuery.executeQuery();
|
||||||
if(rsQuery.next()) {
|
if (rsQuery.next()) {
|
||||||
id = rsQuery.getLong(1);
|
id = rsQuery.getLong(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,24 +477,26 @@ 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
|
||||||
* @return one id matching the given data or -1 if no match has been found
|
* @return one id matching the given data or -1 if no match has been found
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static long getSingleId(String table, String[] header, String[] values){
|
protected static long getSingleId(String table, String[] header, String[] values) {
|
||||||
long id = -1;
|
long id = -1;
|
||||||
try(Connection conn = connect()){
|
try (Connection conn = connect()) {
|
||||||
String sql = queryBuilder("selectMatch",table,header,values);
|
String sql = queryBuilder("selectMatch", table, header, values);
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
if(rs.next()){
|
if (rs.next()) {
|
||||||
id = rs.getLong(1);
|
id = rs.getLong(1);
|
||||||
if(rs.next()){
|
if (rs.next()) {
|
||||||
id = -1;
|
id = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -343,47 +506,66 @@ public class Database {
|
|||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
protected static void printSampleQuery(){
|
protected static void printSampleQuery() {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT * FROM food_type WHERE id > ?;""";
|
SELECT * FROM food_type WHERE id > ?;""";
|
||||||
String sql1 = """
|
String sql1 = """
|
||||||
SELECT * FROM allergy WHERE id > ?;""";
|
SELECT * FROM allergy WHERE id > ?;""";
|
||||||
try(Connection conn = connect()){
|
try (Connection conn = connect()) {
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
PreparedStatement ps1 = conn.prepareStatement(sql1);
|
PreparedStatement ps1 = conn.prepareStatement(sql1);
|
||||||
ps.setInt(1,0);
|
ps.setInt(1, 0);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
System.out.println("food_type");
|
System.out.println("food_type");
|
||||||
while (rs.next()){
|
while (rs.next()) {
|
||||||
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
|
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
|
||||||
}
|
}
|
||||||
System.out.println("allergy");
|
System.out.println("allergy");
|
||||||
ps1.setInt(1,0);
|
ps1.setInt(1, 0);
|
||||||
rs = ps1.executeQuery();
|
rs = ps1.executeQuery();
|
||||||
while (rs.next()){
|
while (rs.next()) {
|
||||||
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
|
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
protected static void delete(String table, long id){
|
protected static void delete(String table, long id) {
|
||||||
String sql = "DELETE FROM " + table + " WHERE id = ?;";
|
String sql = "DELETE FROM " + table + " WHERE id = ?;";
|
||||||
try(Connection conn = connect();PreparedStatement ps = conn.prepareStatement(sql)){
|
try (Connection conn = connect(); PreparedStatement ps = conn.prepareStatement(sql)) {
|
||||||
ps.setLong(1,id);
|
ps.setLong(1, id);
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String queryBuilder(String type,String table, String[] header, String[] values){
|
/**
|
||||||
|
* its a query builder it builds queries
|
||||||
|
* exists: checks if an entry with the given parameters exists in table
|
||||||
|
* selectMatch: returns all matching rows from table
|
||||||
|
* insert: inserts or ignores into 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
|
||||||
|
* as SET
|
||||||
|
*
|
||||||
|
* @param type exists, selectMatch, insert, count, update
|
||||||
|
* @param table table
|
||||||
|
* @param header header
|
||||||
|
* @param values values
|
||||||
|
* @return sql statement as String
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
private static String queryBuilder(String type, String table, String[] header, String[] values) {
|
||||||
String sql;
|
String sql;
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -445,7 +627,7 @@ public class Database {
|
|||||||
sb.append(header[0]);
|
sb.append(header[0]);
|
||||||
sb.append(" = ");
|
sb.append(" = ");
|
||||||
sb.append(values[0]);
|
sb.append(values[0]);
|
||||||
for(int i = 1; i < header.length; i++){
|
for (int i = 1; i < header.length; i++) {
|
||||||
sb.append(" AND ");
|
sb.append(" AND ");
|
||||||
sb.append(header[i]);
|
sb.append(header[i]);
|
||||||
sb.append(" = ");
|
sb.append(" = ");
|
||||||
@ -458,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]);
|
||||||
@ -477,59 +659,64 @@ 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
|
||||||
*/
|
*/
|
||||||
protected static List<String> getTable(String table){
|
protected static List<String> getTable(String table) {
|
||||||
List<String> data = new ArrayList<>();
|
List<String> data = new ArrayList<>();
|
||||||
StringBuilder sb;
|
StringBuilder sb;
|
||||||
try(Connection conn = connect()) {
|
try (Connection conn = connect()) {
|
||||||
String sql = "SELECT * FROM " + table;
|
String sql = "SELECT * FROM " + table;
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
ResultSetMetaData rsmd = rs.getMetaData();
|
ResultSetMetaData rsmd = rs.getMetaData();
|
||||||
int count = rsmd.getColumnCount();
|
int count = rsmd.getColumnCount();
|
||||||
while (rs.next()){
|
while (rs.next()) {
|
||||||
sb = new StringBuilder();
|
sb = new StringBuilder();
|
||||||
sb.append(rs.getString(1));
|
sb.append(rs.getString(1));
|
||||||
for(int i = 2; i <= count; i++){
|
for (int i = 2; i <= count; i++) {
|
||||||
sb.append(":");
|
sb.append(":");
|
||||||
sb.append(rs.getString(i));
|
sb.append(rs.getString(i));
|
||||||
}
|
}
|
||||||
data.add(sb.toString());
|
data.add(sb.toString());
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
* @param table the table you want the data from
|
* values checked with LIKE
|
||||||
|
*
|
||||||
|
* @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
|
||||||
* @return a list of the matching data as String separated by ":"
|
* @return a list of the matching data as String separated by ":"
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static List<String> select(String table,String[] header, String[] values){
|
protected static List<String> select(String table, String[] header, String[] values) {
|
||||||
List<String> data = new ArrayList<>();
|
List<String> data = new ArrayList<>();
|
||||||
StringBuilder sb;
|
StringBuilder sb;
|
||||||
String sql = queryBuilder("selectMatch",table,header,values);
|
String sql = queryBuilder("selectMatch", table, header, values);
|
||||||
try(Connection conn = connect()) {
|
try (Connection conn = connect()) {
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
ResultSetMetaData rsmd = rs.getMetaData();
|
ResultSetMetaData rsmd = rs.getMetaData();
|
||||||
int count = rsmd.getColumnCount();
|
int count = rsmd.getColumnCount();
|
||||||
while (rs.next()){
|
while (rs.next()) {
|
||||||
sb = new StringBuilder();
|
sb = new StringBuilder();
|
||||||
sb.append(rs.getString(1));
|
sb.append(rs.getString(1));
|
||||||
for(int i = 2; i <= count; i++){
|
for (int i = 2; i <= count; i++) {
|
||||||
sb.append(":");
|
sb.append(":");
|
||||||
sb.append(rs.getString(i));
|
sb.append(rs.getString(i));
|
||||||
}
|
}
|
||||||
data.add(sb.toString());
|
data.add(sb.toString());
|
||||||
}
|
}
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -538,24 +725,26 @@ 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 ":"
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static List<String> getEntryById(String table, long id){
|
protected static List<String> getEntryById(String table, long id) {
|
||||||
List<String> data = new ArrayList<>();
|
List<String> data = new ArrayList<>();
|
||||||
StringBuilder sb;
|
StringBuilder sb;
|
||||||
String sql = "SELECT * FROM " + table + " WHERE id = ?;";
|
String sql = "SELECT * FROM " + table + " WHERE id = ?;";
|
||||||
try (Connection conn = connect()) {
|
try (Connection conn = connect()) {
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
ps.setLong(1,id);
|
ps.setLong(1, id);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
ResultSetMetaData rsmd = rs.getMetaData();
|
ResultSetMetaData rsmd = rs.getMetaData();
|
||||||
int count = rsmd.getColumnCount();
|
int count = rsmd.getColumnCount();
|
||||||
while (rs.next()){
|
while (rs.next()) {
|
||||||
sb = new StringBuilder();
|
sb = new StringBuilder();
|
||||||
sb.append(rs.getString(1));
|
sb.append(rs.getString(1));
|
||||||
for(int i = 2; i <= count; i++){
|
for (int i = 2; i <= count; i++) {
|
||||||
sb.append(":");
|
sb.append(":");
|
||||||
sb.append(rs.getString(i));
|
sb.append(rs.getString(i));
|
||||||
}
|
}
|
||||||
@ -570,36 +759,40 @@ 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
|
||||||
* @return the number of found rows
|
* @return the number of found rows
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static int count(String table,String[] header,String[] values){
|
protected static int count(String table, String[] header, String[] values) {
|
||||||
String sql = queryBuilder("count",table,header,values);
|
String sql = queryBuilder("count", table, header, values);
|
||||||
try(Connection conn = connect()) {
|
try (Connection conn = connect()) {
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
return rs.getInt(1);
|
return rs.getInt(1);
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
* @return number of rows affected or -1 on error
|
* @return number of rows affected or -1 on error
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
protected static int update(String table,String[] header,String[] values){
|
protected static int update(String table, String[] header, String[] values) {
|
||||||
try(Connection conn = connect()) {
|
try (Connection conn = connect()) {
|
||||||
String sql = queryBuilder("update",table,header,values);
|
String sql = queryBuilder("update", table, header, values);
|
||||||
PreparedStatement ps = conn.prepareStatement(sql);
|
PreparedStatement ps = conn.prepareStatement(sql);
|
||||||
return ps.executeUpdate();
|
return ps.executeUpdate();
|
||||||
}catch (SQLException e){
|
} catch (SQLException e) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Food, used by FoodPlan
|
||||||
|
* one constructor is used to create new foods the other is used to create existing foods from database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class Food {
|
public class Food {
|
||||||
private long id;
|
private long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of functions loosely related to food management
|
||||||
|
* Acts as an abstraction layer to the database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class FoodMgr {
|
public class FoodMgr {
|
||||||
/**
|
/**
|
||||||
* inserts a food int to the database and creates the food_restriction entries
|
* inserts a food int to the database and creates the food_restriction entries
|
||||||
|
* @param food the food to be created
|
||||||
* @return id of food or -1
|
* @return id of food or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static long createFood(Food food){
|
public static long createFood(Food food){
|
||||||
String[] foodH = {"name","description","isDessert","food_typeid"};
|
String[] foodH = {"name","description","isDessert","food_typeid"};
|
||||||
@ -29,7 +32,9 @@ public class FoodMgr {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts a food_plan into the database
|
* inserts a food_plan into the database
|
||||||
|
* @param foodPlan the foodPlan to be created
|
||||||
* @return id of food_plan or -1
|
* @return id of food_plan or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static long createFood_plan(FoodPlan foodPlan){
|
public static long createFood_plan(FoodPlan foodPlan){
|
||||||
String[] food_planH = {"date","food1","food2","dessert1","dessert2"};
|
String[] food_planH = {"date","food1","food2","dessert1","dessert2"};
|
||||||
@ -44,6 +49,7 @@ public class FoodMgr {
|
|||||||
/**
|
/**
|
||||||
* updates a food_plan into the database
|
* updates a food_plan into the database
|
||||||
* @return number of rows affected or -1 on error
|
* @return number of rows affected or -1 on error
|
||||||
|
* @author Johannes Kantz
|
||||||
*/
|
*/
|
||||||
public static long updateFood_plan(FoodPlan foodPlan){
|
public static long updateFood_plan(FoodPlan foodPlan){
|
||||||
String[] food_planH = {"id","food1","food2","dessert1","dessert2"};
|
String[] food_planH = {"id","food1","food2","dessert1","dessert2"};
|
||||||
@ -59,6 +65,7 @@ public class FoodMgr {
|
|||||||
* returns all non desserts or all desserts
|
* returns all non desserts or all desserts
|
||||||
* @param isDessert true for only desserts false for non desserts
|
* @param isDessert true for only desserts false for non desserts
|
||||||
* @return a list of all non desserts or all desserts
|
* @return a list of all non desserts or all desserts
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static List<Food> getFood(boolean isDessert){
|
public static List<Food> getFood(boolean isDessert){
|
||||||
String[] foodH = {"isDessert"};
|
String[] foodH = {"isDessert"};
|
||||||
@ -76,6 +83,7 @@ public class FoodMgr {
|
|||||||
* getFood but returns only vegan food
|
* getFood but returns only vegan food
|
||||||
* @param isDessert true for only desserts false for non desserts
|
* @param isDessert true for only desserts false for non desserts
|
||||||
* @return a list of all vegan non desserts or all vegan desserts
|
* @return a list of all vegan non desserts or all vegan desserts
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static List<Food> getVeganFood(boolean isDessert){
|
public static List<Food> getVeganFood(boolean isDessert){
|
||||||
String[] foodH = {"isDessert","food_typeid"};
|
String[] foodH = {"isDessert","food_typeid"};
|
||||||
@ -93,6 +101,7 @@ public class FoodMgr {
|
|||||||
* returns a food_plan for a day
|
* returns a food_plan for a day
|
||||||
* @param date YYYY-MM-DD one day
|
* @param date YYYY-MM-DD one day
|
||||||
* @return food_plan for date
|
* @return food_plan for date
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static FoodPlan getFoodPlan(String date){
|
public static FoodPlan getFoodPlan(String date){
|
||||||
String[] food_planH = {"date"};
|
String[] food_planH = {"date"};
|
||||||
@ -110,8 +119,17 @@ public class FoodMgr {
|
|||||||
return new FoodPlan(Long.parseLong(parts[0]),date,foodVegan,foodSecond,dessertVegan,dessertSecond,isSent);
|
return new FoodPlan(Long.parseLong(parts[0]),date,foodVegan,foodSecond,dessertVegan,dessertSecond,isSent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a FoodPlan for a given id or null if no unique id was found
|
||||||
|
* @param id id of the FoodPlan
|
||||||
|
* @return FoodPlan or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public static FoodPlan getFoodPlanById(long id){
|
public static FoodPlan getFoodPlanById(long id){
|
||||||
List<String> entry = Database.getEntryById("food_plan",id);
|
List<String> entry = Database.getEntryById("food_plan",id);
|
||||||
|
if(entry.size() != 1){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] parts = entry.get(0).split(":");
|
String[] parts = entry.get(0).split(":");
|
||||||
Food foodVegan = getFoodById(Long.parseLong(parts[2]));
|
Food foodVegan = getFoodById(Long.parseLong(parts[2]));
|
||||||
Food foodSecond = getFoodById(Long.parseLong(parts[3]));
|
Food foodSecond = getFoodById(Long.parseLong(parts[3]));
|
||||||
@ -121,8 +139,17 @@ public class FoodMgr {
|
|||||||
return new FoodPlan(id,parts[1], foodVegan,foodSecond,dessertVegan,dessertSecond,isSent);
|
return new FoodPlan(id,parts[1], foodVegan,foodSecond,dessertVegan,dessertSecond,isSent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a Food for a given id or null if no unique id was found
|
||||||
|
* @param id id of the Food
|
||||||
|
* @return Food or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public static Food getFoodById(long id){
|
public static Food getFoodById(long id){
|
||||||
List<String> entry = Database.getEntryById("food",id);
|
List<String> entry = Database.getEntryById("food",id);
|
||||||
|
if(entry.size() != 1){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] parts = entry.get(0).split(":");
|
String[] parts = entry.get(0).split(":");
|
||||||
String name = parts[1];
|
String name = parts[1];
|
||||||
String description = parts[2];
|
String description = parts[2];
|
||||||
@ -133,20 +160,44 @@ public class FoodMgr {
|
|||||||
return new Food(id,name,description,isDessert,foodType,allergies);
|
return new Food(id,name,description,isDessert,foodType,allergies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns a FoodType for a given id or null if no unique id was found
|
||||||
|
* @param id id of the FoodType
|
||||||
|
* @return FoodType or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public static FoodType getFoodTypeById(long id){
|
public static FoodType getFoodTypeById(long id){
|
||||||
List<String> entry = Database.getEntryById("food_type",id);
|
List<String> entry = Database.getEntryById("food_type",id);
|
||||||
|
if(entry.size() != 1){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] typeParts = entry.get(0).split(":");
|
String[] typeParts = entry.get(0).split(":");
|
||||||
return new FoodType(Long.parseLong(typeParts[0]),typeParts[1]);
|
return new FoodType(Long.parseLong(typeParts[0]),typeParts[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an Allergy for a given id or null if no unique id was found
|
||||||
|
* @param id id of the Allergy
|
||||||
|
* @return Allergy or null
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public static Allergy getAllergyById(long id){
|
public static Allergy getAllergyById(long id){
|
||||||
String[] allergyH = {"id"};
|
String[] allergyH = {"id"};
|
||||||
String[] allergyD = {String.valueOf(id)};
|
String[] allergyD = {String.valueOf(id)};
|
||||||
List<String> allergies = Database.select("allergy",allergyH,allergyD);
|
List<String> entry = Database.select("allergy",allergyH,allergyD);
|
||||||
String[] allergyParts = allergies.get(0).split(":");
|
if(entry.size() != 1){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String[] allergyParts = entry.get(0).split(":");
|
||||||
return new Allergy(id,allergyParts[1],allergyParts[2]);
|
return new Allergy(id,allergyParts[1],allergyParts[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns all Allergies for a given foodId
|
||||||
|
* @param foodId the foodId you want the allergies from
|
||||||
|
* @return a List of Allergy, can be empty
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public static List<Allergy> getAllergies(long foodId){
|
public static List<Allergy> getAllergies(long foodId){
|
||||||
List<Allergy> allergies = new ArrayList<>();
|
List<Allergy> allergies = new ArrayList<>();
|
||||||
String[] restrictionsH = {"foodid"};
|
String[] restrictionsH = {"foodid"};
|
||||||
@ -163,11 +214,12 @@ public class FoodMgr {
|
|||||||
* inserts the selected food into food_Selection if the food_plan has not been sent
|
* inserts the selected food into food_Selection if the food_plan has not been sent
|
||||||
* @param food_selectionData childid, food_planid, foodid
|
* @param food_selectionData childid, food_planid, foodid
|
||||||
* @return id or -1
|
* @return id or -1
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
public static long createFood_selection(String[] food_selectionData){
|
public static long createFood_selection(String[] food_selectionData){
|
||||||
String[] food_selectionH = {"childid","food_planid","foodid"};
|
String[] food_selectionH = {"childid","food_planid","foodid"};
|
||||||
FoodPlan food_plan = getFoodPlanById(Long.parseLong(food_selectionData[1]));
|
FoodPlan food_plan = getFoodPlanById(Long.parseLong(food_selectionData[1]));
|
||||||
if(!food_plan.isSent()){
|
if(food_plan != null && !food_plan.isSent()){
|
||||||
return Database.insert("food_selection",food_selectionH,food_selectionData);
|
return Database.insert("food_selection",food_selectionH,food_selectionData);
|
||||||
}else {
|
}else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -178,10 +230,14 @@ public class FoodMgr {
|
|||||||
* accumulates the selected food for a given day and locks the corresponding food_plan
|
* accumulates the selected food for a given day and locks the corresponding food_plan
|
||||||
* @param date YYYY-MM-DD day
|
* @param date YYYY-MM-DD day
|
||||||
* @return the accumulated orders
|
* @return the accumulated orders
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
*/
|
*/
|
||||||
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 = {
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FoodPlan
|
||||||
|
* one constructor is used to create new foodPlans the other is used to create existing foodPlans from database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class FoodPlan {
|
public class FoodPlan {
|
||||||
private long id;
|
private long id;
|
||||||
private String date;
|
private String date;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FoodType used by Food, not intended to be changed
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class FoodType {
|
public class FoodType {
|
||||||
private long id;
|
private long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -5,11 +5,12 @@ 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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Reshad Meher
|
||||||
|
* Username, Passwort , login
|
||||||
|
*/
|
||||||
|
|
||||||
public class HelloController {
|
public class HelloController {
|
||||||
/**
|
|
||||||
* @autor: Reshad Meher
|
|
||||||
* Username, Passwort , login
|
|
||||||
*/
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextField unsernameEingabe;
|
private TextField unsernameEingabe;
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,15 +19,19 @@ public class LoginController {
|
|||||||
@FXML
|
@FXML
|
||||||
private PasswordField pfPassword;
|
private PasswordField pfPassword;
|
||||||
|
|
||||||
HashMap<String,String> benutzerMap = new HashMap<String,String>();
|
|
||||||
@FXML
|
@FXML
|
||||||
protected void onBtLoginClick() throws IOException {
|
protected void onBtLoginClick() throws IOException {
|
||||||
benutzerMap.put("Reshad","1234");
|
|
||||||
String email = tfEmail.getText();
|
String email = tfEmail.getText();
|
||||||
String password = pfPassword.getText();
|
String password = pfPassword.getText();
|
||||||
if(benutzerMap.containsKey(email) && benutzerMap.containsValue(password)){
|
long loginPruefen = AccountMgr.login(email,password);
|
||||||
// if user is worker: StartViewApplication.changeScene("workerMenu-view.fxml");
|
if(loginPruefen > 0){
|
||||||
StartViewApplication.changeScene("parentMenu-view.fxml");
|
AccountMgr.currentUser = AccountMgr.getUserById(loginPruefen);
|
||||||
|
if(AccountMgr.currentUser.getClass().getSimpleName().equals("Worker")){
|
||||||
|
StartViewApplication.changeScene("workerMenu-view.fxml");
|
||||||
|
}else{
|
||||||
|
StartViewApplication.changeScene("parentMenu-view.fxml");
|
||||||
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR,"Email oder Passwort ist falsch");
|
Alert alert = new Alert(Alert.AlertType.ERROR,"Email oder Passwort ist falsch");
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
|
@ -1,24 +1,109 @@
|
|||||||
/**
|
|
||||||
* Author: Reshad Meher
|
|
||||||
* Startseite
|
|
||||||
* fxml: menue-view.fxml
|
|
||||||
*/
|
|
||||||
|
|
||||||
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.fxml.FXMLLoader;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.Scene;
|
|
||||||
import javafx.scene.control.Alert;
|
|
||||||
import javafx.stage.Stage;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MenueController {
|
public class MenueController {
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
Button btFirstMealMon;
|
||||||
|
@FXML
|
||||||
|
Button btSecondMealMon;
|
||||||
|
@FXML
|
||||||
|
Button btNoMealMon;
|
||||||
|
@FXML
|
||||||
|
Button btFirstDessertMon;
|
||||||
|
@FXML
|
||||||
|
Button btSecondDessertMon;
|
||||||
|
@FXML
|
||||||
|
Button btNoDessertMon;
|
||||||
|
@FXML
|
||||||
|
Button btFirstMealTue;
|
||||||
|
@FXML
|
||||||
|
Button btSecondMealTue;
|
||||||
|
@FXML
|
||||||
|
Button btNoMealTue;
|
||||||
|
@FXML
|
||||||
|
Button btFirstDessertTue;
|
||||||
|
@FXML
|
||||||
|
Button btSecondDessertTue;
|
||||||
|
@FXML
|
||||||
|
Button btNoDessertTue;
|
||||||
|
@FXML
|
||||||
|
Button btFirstMealWed;
|
||||||
|
@FXML
|
||||||
|
Button btSecondMealWed;
|
||||||
|
@FXML
|
||||||
|
Button btNoMealWed;
|
||||||
|
@FXML
|
||||||
|
Button btFirstDessertWed;
|
||||||
|
@FXML
|
||||||
|
Button btSecondDessertWed;
|
||||||
|
@FXML
|
||||||
|
Button btNoDessertWed;
|
||||||
|
@FXML
|
||||||
|
Button btFirstMealThu;
|
||||||
|
@FXML
|
||||||
|
Button btSecondMealThu;
|
||||||
|
@FXML
|
||||||
|
Button btNoMealThu;
|
||||||
|
@FXML
|
||||||
|
Button btFirstDessertThu;
|
||||||
|
@FXML
|
||||||
|
Button btSecondDessertThu;
|
||||||
|
@FXML
|
||||||
|
Button btNoDessertThu;
|
||||||
|
@FXML
|
||||||
|
Button btFirstMealFri;
|
||||||
|
@FXML
|
||||||
|
Button btSecondMealFri;
|
||||||
|
@FXML
|
||||||
|
Button btNoMealFri;
|
||||||
|
@FXML
|
||||||
|
Button btFirstDessertFri;
|
||||||
|
@FXML
|
||||||
|
Button btSecondDessertFri;
|
||||||
|
@FXML
|
||||||
|
Button btNoDessertFri;
|
||||||
|
@FXML
|
||||||
|
ComboBox<String> cbPickChild;
|
||||||
|
@FXML
|
||||||
|
Button btSaveOrder;
|
||||||
|
@FXML
|
||||||
|
ListView<String> lvFoodInfo;
|
||||||
|
|
||||||
private void setButtonActive(){
|
public ObservableList<Node> buttons = FXCollections.observableArrayList();
|
||||||
|
public ObservableList<String> children = FXCollections.observableArrayList();
|
||||||
|
|
||||||
|
public List<Child> allChildren = AccountMgr.getAllChildrenFromParentWithId(3);
|
||||||
|
public void initialize(){
|
||||||
|
FoodPlan foodplanMon = FoodMgr.getFoodPlanById(1);
|
||||||
|
FoodPlan foodplanTue = FoodMgr.getFoodPlanById(2);
|
||||||
|
FoodPlan foodplanWed = FoodMgr.getFoodPlanById(3);
|
||||||
|
FoodPlan foodplanThu = FoodMgr.getFoodPlanById(4);
|
||||||
|
FoodPlan foodplanFri = FoodMgr.getFoodPlanById(5);
|
||||||
|
|
||||||
|
for (Child c : allChildren){
|
||||||
|
children.add(c.getFirstname());
|
||||||
|
}
|
||||||
|
cbPickChild.setItems(children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setButtonActive(ActionEvent event) {
|
||||||
|
Button b = (Button) event.getSource();
|
||||||
|
|
||||||
|
javafx.scene.Parent p = b.getParent();
|
||||||
|
buttons = p.getChildrenUnmodifiable();
|
||||||
|
|
||||||
|
for(Node button : buttons){
|
||||||
|
button.setDisable(button.equals(b));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +1,33 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Parent extends User{
|
/**
|
||||||
|
* one constructor is used to create new parents the other is used to create
|
||||||
|
* existing parents from database
|
||||||
|
*
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
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) {
|
||||||
|
@ -0,0 +1,149 @@
|
|||||||
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
/**
|
||||||
|
* @author Reshad Meher
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SettingsController {
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField tfOldPassword;
|
||||||
|
@FXML
|
||||||
|
private TextField tfNewPassword;
|
||||||
|
@FXML
|
||||||
|
private TextField tfConfirmNewPasword;
|
||||||
|
@FXML
|
||||||
|
private TextField tfPostCode;
|
||||||
|
@FXML
|
||||||
|
private TextField tfStreet;
|
||||||
|
@FXML
|
||||||
|
private TextField tfCity;
|
||||||
|
@FXML
|
||||||
|
private TextField tfHousNumber;
|
||||||
|
|
||||||
|
Alert alert;
|
||||||
|
@FXML
|
||||||
|
private void onPasswordChangClick(){
|
||||||
|
String oldPassword = tfOldPassword.getText();
|
||||||
|
String newPassword = tfNewPassword.getText();
|
||||||
|
String confirmNewPassword = tfConfirmNewPasword.getText();
|
||||||
|
if(!oldPassword.isEmpty() && !newPassword.isEmpty() && !confirmNewPassword.isEmpty()){
|
||||||
|
if(!newPassword.equals(confirmNewPassword)){
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre neue Passwort und Bestätigung passt nicht. Nochmal versuchen");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else {
|
||||||
|
User userPassword = new User(newPassword);
|
||||||
|
long UpdateUserPassword = AccountMgr.updatePassword(userPassword);
|
||||||
|
if (UpdateUserPassword > 0){
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre Passwort erfolgreich geändert");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("nei");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tfOldPassword.setText("");
|
||||||
|
tfNewPassword.setText("");
|
||||||
|
tfConfirmNewPasword.setText("");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(oldPassword.isEmpty()){
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre aktuelles Passwort ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else if(newPassword.isEmpty()){
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre neues Passwort ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
}if(confirmNewPassword.isEmpty()){
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre neue Passwort Bestätigung ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
}else{
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Passwort");
|
||||||
|
alert.setHeaderText("Ihre Passwort wurde nicht geändert");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void onChangAdressClick(){
|
||||||
|
String postCode = tfPostCode.getText();
|
||||||
|
String street = tfStreet.getText();
|
||||||
|
String city = tfCity.getText();
|
||||||
|
String housNumber = tfHousNumber.getText();
|
||||||
|
if (!postCode.isEmpty() && !street.isEmpty() && !city.isEmpty() && !housNumber.isEmpty()) {
|
||||||
|
Address userAdress = new Address(street,housNumber,postCode,city);
|
||||||
|
long UpdateUserAdress = AccountMgr.updateAdreess(userAdress);
|
||||||
|
if (UpdateUserAdress > 0) {
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Ihre Adresse erfolgreich geändert");
|
||||||
|
alert.showAndWait();
|
||||||
|
|
||||||
|
tfPostCode.setText("");
|
||||||
|
tfStreet.setText("");
|
||||||
|
tfCity.setText("");
|
||||||
|
tfHousNumber.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
if (postCode.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Postleitzahl ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (street.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Straß ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (city.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Statd ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else if (housNumber.isEmpty()) {
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Hausnumer ist leer.");
|
||||||
|
alert.showAndWait();
|
||||||
|
} else {
|
||||||
|
alert = new Alert(Alert.AlertType.WARNING);
|
||||||
|
alert.setTitle("Adresse");
|
||||||
|
alert.setHeaderText("Ihre Adresse wurde nicht geändert");
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@FXML
|
||||||
|
private void onLogOutBtClick() throws IOException{
|
||||||
|
|
||||||
|
FXMLLoader fxmlLoader = new FXMLLoader(StartViewApplication.class.getResource("login-view.fxml"));
|
||||||
|
Scene scene = new Scene(fxmlLoader.load(), 950,700);
|
||||||
|
StartViewApplication.primary.setScene(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSettingBtClick(ActionEvent actionEvent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}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("");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAnmeldenBtClick(ActionEvent actionEvent) {
|
@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,8 +1,13 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acts as a launcher required to make it a .jar
|
||||||
|
* It is also used to select either the cli or the gui depending on starting arguments
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class SuperMain {
|
public class SuperMain {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
if(args.length > 0){
|
if(args.length > 0 && args[0].equals("Here be dragons")){
|
||||||
ConsoleMain.main(args);
|
ConsoleMain.main(args);
|
||||||
}else {
|
}else {
|
||||||
StartViewApplication.main(args);
|
StartViewApplication.main(args);
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* one constructor is used to create new users the other is used to create existing users from database
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
public class User {
|
public class User {
|
||||||
private long id;
|
private long id;
|
||||||
private String name;
|
private String name;
|
||||||
@ -51,4 +52,13 @@ public class User {
|
|||||||
public Address getAddress() {
|
public Address getAddress() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Reshad Meher
|
||||||
|
*/
|
||||||
|
public User (String password){
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,21 @@
|
|||||||
package com.bib.essensbestellungsverwaltung;
|
package com.bib.essensbestellungsverwaltung;
|
||||||
/*
|
|
||||||
@author Malte Schulze Hobeling
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Worker extends User{
|
/**
|
||||||
|
* one constructor is used to create new worker the other is used to create
|
||||||
|
* existing worker from database
|
||||||
|
*
|
||||||
|
* @author Malte Schulze Hobeling
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.control.ComboBox?>
|
<?import javafx.scene.control.ComboBox?>
|
||||||
<?import javafx.scene.control.DatePicker?>
|
|
||||||
<?import javafx.scene.control.ListView?>
|
<?import javafx.scene.control.ListView?>
|
||||||
<?import javafx.scene.control.TextField?>
|
<?import javafx.scene.control.TextField?>
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
@ -12,7 +11,7 @@
|
|||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.Text?>
|
<?import javafx.scene.text.Text?>
|
||||||
|
|
||||||
<AnchorPane prefHeight="700.0" prefWidth="950.0" stylesheets="@child.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.ParentController">
|
<AnchorPane prefHeight="700.0" prefWidth="950.0" stylesheets="@child.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.ChildViewController">
|
||||||
<children>
|
<children>
|
||||||
<Text layoutX="51.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Kinder">
|
<Text layoutX="51.0" layoutY="90.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Kinder">
|
||||||
<font>
|
<font>
|
||||||
@ -28,21 +27,21 @@
|
|||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Text>
|
</Text>
|
||||||
<TextField prefWidth="97.0">
|
<TextField fx:id="name" prefWidth="97.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Geburtsdatum">
|
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Nachname">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Text>
|
</Text>
|
||||||
<DatePicker prefHeight="26.0" prefWidth="226.0">
|
<TextField fx:id="lastname" prefWidth="97.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets top="13.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</DatePicker>
|
</TextField>
|
||||||
</children>
|
</children>
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
<Insets left="15.0" right="15.0" />
|
<Insets left="15.0" right="15.0" />
|
||||||
@ -50,26 +49,46 @@
|
|||||||
</VBox>
|
</VBox>
|
||||||
<VBox id="contentContainer" prefHeight="250.0" prefWidth="256.0">
|
<VBox id="contentContainer" prefHeight="250.0" prefWidth="256.0">
|
||||||
<children>
|
<children>
|
||||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Alter">
|
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Straße">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Text>
|
</Text>
|
||||||
<TextField prefWidth="97.0">
|
<TextField fx:id="street" prefWidth="97.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</TextField>
|
</TextField>
|
||||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Gruppe">
|
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Hausnummer">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Text>
|
</Text>
|
||||||
<ComboBox prefHeight="26.0" prefWidth="230.0">
|
<TextField fx:id="number" prefWidth="97.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets top="13.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</ComboBox>
|
</TextField>
|
||||||
|
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="PLZ">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="15.0" top="15.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Text>
|
||||||
|
<TextField fx:id="plz" prefWidth="97.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="15.0" top="15.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Stadt">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="15.0" top="15.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Text>
|
||||||
|
<TextField fx:id="city" prefWidth="97.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="15.0" top="15.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
</children>
|
</children>
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
<Insets left="15.0" right="15.0" />
|
<Insets left="15.0" right="15.0" />
|
||||||
@ -82,12 +101,14 @@
|
|||||||
<Insets bottom="15.0" top="15.0" />
|
<Insets bottom="15.0" top="15.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Text>
|
</Text>
|
||||||
<ListView prefHeight="101.0" prefWidth="227.0" />
|
<ListView fx:id="allergiesList" prefHeight="101.0" prefWidth="227.0" />
|
||||||
<TextField id="tfAddAllergy" promptText="Allergie hinzufügen">
|
<HBox prefHeight="26.0" prefWidth="256.0">
|
||||||
<VBox.margin>
|
<children>
|
||||||
<Insets top="15.0" />
|
<ComboBox fx:id="selectAllergy" prefWidth="150.0" promptText="Allergie wählen" />
|
||||||
</VBox.margin>
|
<ComboBox fx:id="selectAllergySeverity" prefWidth="150.0" promptText="Schwere" />
|
||||||
</TextField>
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<Button fx:id="addAllergy" mnemonicParsing="false" onAction="#addAllergy" prefHeight="25.0" prefWidth="171.0" text="Allergie hinzufügen" />
|
||||||
</children>
|
</children>
|
||||||
<HBox.margin>
|
<HBox.margin>
|
||||||
<Insets left="15.0" right="15.0" />
|
<Insets left="15.0" right="15.0" />
|
||||||
@ -95,6 +116,6 @@
|
|||||||
</VBox>
|
</VBox>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<Button id="btAddChild" layoutX="419.0" layoutY="502.0" mnemonicParsing="false" prefHeight="26.0" prefWidth="125.0" text="Kind hinzufügen" />
|
<Button id="btAddChild" layoutX="421.0" layoutY="587.0" mnemonicParsing="false" onAction="#onBtClick" prefHeight="26.0" prefWidth="125.0" text="Kind hinzufügen" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -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" />
|
||||||
|
@ -8,63 +8,66 @@
|
|||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?import javafx.scene.layout.HBox?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.shape.Circle?>
|
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.Text?>
|
<?import javafx.scene.text.Text?>
|
||||||
|
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.LoginController">
|
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="750.0" prefWidth="1300.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.LoginController">
|
||||||
<children>
|
<children>
|
||||||
<VBox alignment="CENTER" prefHeight="400.0" prefWidth="265.0" style="-fx-background-color: lightblue;">
|
<VBox alignment="CENTER" prefHeight="750.0" prefWidth="400.0" style="-fx-background-color: lightblue;">
|
||||||
<children>
|
<children>
|
||||||
<Text fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Essensbestellung">
|
<Text fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Essensbestellung">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Yu Gothic Light" size="26.0" />
|
<Font name="Yu Gothic Light" size="35.0" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="150.0" />
|
<Insets bottom="150.0" />
|
||||||
</padding>
|
</padding>
|
||||||
</VBox>
|
</VBox>
|
||||||
<Circle fill="#67b5ff2e" layoutX="-23.0" layoutY="368.0" radius="100.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<VBox alignment="CENTER" layoutX="400.0" prefHeight="750.0" prefWidth="900.0" style="-fx-background-color: white;">
|
||||||
<Circle fill="#69b6ffb0" layoutX="235.0" layoutY="310.0" radius="158.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<children>
|
||||||
<Circle fill="#93c4f23d" layoutY="258.0" radius="106.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
<TextField fx:id="tfEmail" promptText="Email" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
<VBox alignment="CENTER" layoutX="263.0" prefHeight="400.0" prefWidth="338.0" style="-fx-background-color: white;">
|
<VBox.margin>
|
||||||
<children>
|
<Insets bottom="15.0" left="25.0" right="25.0" top="25.0" />
|
||||||
<TextField promptText="Email" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="tfEmail">
|
</VBox.margin>
|
||||||
<VBox.margin>
|
<effect>
|
||||||
<Insets bottom="15.0" left="25.0" right="25.0" top="25.0" />
|
<Blend />
|
||||||
</VBox.margin>
|
</effect>
|
||||||
<effect>
|
<font>
|
||||||
<Blend />
|
<Font name="Microsoft Tai Le Bold" size="20.0" />
|
||||||
</effect>
|
</font>
|
||||||
<font>
|
</TextField>
|
||||||
<Font name="Microsoft Tai Le" size="12.0" />
|
<PasswordField fx:id="pfPassword" promptText="Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
</font>
|
<VBox.margin>
|
||||||
</TextField>
|
<Insets bottom="25.0" left="25.0" right="25.0" top="15.0" />
|
||||||
<PasswordField promptText="Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="pfPassword">
|
</VBox.margin>
|
||||||
<VBox.margin>
|
<font>
|
||||||
<Insets bottom="25.0" left="25.0" right="25.0" top="15.0" />
|
<Font name="Microsoft Tai Le Bold" size="20.0" />
|
||||||
</VBox.margin>
|
</font>
|
||||||
<font>
|
</PasswordField>
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
||||||
</font>
|
<children>
|
||||||
</PasswordField>
|
<Button mnemonicParsing="false" onAction="#onBtLoginClick" prefHeight="45.0" prefWidth="118.0" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Login" textFill="WHITE">
|
||||||
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
<font>
|
||||||
<children>
|
<Font name="Microsoft Tai Le Bold" size="18.0" />
|
||||||
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="106.0" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Login" textFill="WHITE" onAction="#onBtLoginClick">
|
</font>
|
||||||
<font>
|
<HBox.margin>
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
<Insets right="15.0" />
|
||||||
</font></Button>
|
</HBox.margin></Button>
|
||||||
<Button id="btSignUp" mnemonicParsing="false" prefHeight="25.0" prefWidth="101.0" style="-fx-background-color: tranparent;" text="Sign up" textFill="#7c7b7b" underline="true" onAction="#changeToSignUp" />
|
<Button id="btSignUp" mnemonicParsing="false" onAction="#changeToSignUp" prefHeight="25.0" prefWidth="101.0" style="-fx-background-color: tranparent;" text="Sign up" textFill="#7c7b7b" underline="true">
|
||||||
</children>
|
<font>
|
||||||
</HBox>
|
<Font size="15.0" />
|
||||||
</children>
|
</font>
|
||||||
<padding>
|
<HBox.margin>
|
||||||
<Insets bottom="65.0" left="45.0" right="45.0" top="45.0" />
|
<Insets left="15.0" />
|
||||||
</padding>
|
</HBox.margin></Button>
|
||||||
</VBox>
|
</children>
|
||||||
<Circle fill="#1469b895" layoutX="133.0" layoutY="368.0" radius="106.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
</HBox>
|
||||||
<Circle fill="#0088ff82" layoutX="77.0" layoutY="276.0" radius="53.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
</children>
|
||||||
</children>
|
<padding>
|
||||||
|
<Insets bottom="65.0" left="45.0" right="45.0" top="45.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -10,228 +10,172 @@
|
|||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
<AnchorPane prefHeight="750.0" prefWidth="950.0" stylesheets="@menue.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.MenueController">
|
<AnchorPane prefHeight="600.0" prefWidth="900.0" stylesheets="@menue.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.MenueController">
|
||||||
<children>
|
<children>
|
||||||
<Label alignment="CENTER" layoutX="392.0" layoutY="25.0" prefHeight="40.0" prefWidth="223.0" text="Essen bestellen">
|
<Label alignment="CENTER" layoutX="14.0" layoutY="14.0" prefHeight="35.0" prefWidth="895.0" text="Essenbestellung">
|
||||||
<font>
|
<font>
|
||||||
<Font size="28.0" />
|
<Font size="28.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Button id="btLogin" alignment="CENTER" layoutX="848.0" layoutY="34.0" mnemonicParsing="false" text="Login" />
|
<HBox layoutX="220.0" layoutY="87.0" prefHeight="414.0" prefWidth="688.0" stylesheets="@menue.css">
|
||||||
<HBox layoutX="220.0" layoutY="87.0" prefHeight="570.0" prefWidth="688.0">
|
<children>
|
||||||
<children>
|
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;" styleClass="container">
|
||||||
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;">
|
<children>
|
||||||
<children>
|
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Montag" textAlignment="CENTER">
|
||||||
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Montag" textAlignment="CENTER">
|
<VBox.margin>
|
||||||
<VBox.margin>
|
<Insets bottom="10.0" />
|
||||||
<Insets bottom="10.0" />
|
</VBox.margin>
|
||||||
</VBox.margin>
|
<font>
|
||||||
<font>
|
<Font size="18.0" />
|
||||||
<Font size="18.0" />
|
</font>
|
||||||
</font>
|
</Label>
|
||||||
</Label>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 1">
|
<children>
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btFirstMealMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" stylesheets="@menue.css" text="Mahlzeit 1">
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<VBox.margin>
|
||||||
</VBox.margin></Button>
|
<Insets />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 2">
|
</VBox.margin></Button>
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btSecondMealMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" stylesheets="@menue.css" text="Mahlzeit 2" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btNoMealMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" stylesheets="@menue.css" text="Keine Mahlzeit">
|
||||||
</VBox.margin></Button>
|
<VBox.margin>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="Keine Mahlzeit">
|
<Insets bottom="20.0" />
|
||||||
<VBox.margin>
|
</VBox.margin>
|
||||||
<Insets bottom="30.0" top="10.0" />
|
</Button>
|
||||||
</VBox.margin>
|
</children>
|
||||||
</Button>
|
</VBox>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 1">
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<VBox.margin>
|
<children>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btFirstDessertMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 1" />
|
||||||
</VBox.margin></Button>
|
<Button id="btFoodChoice" fx:id="btSecondDessertMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 2" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 2">
|
<Button id="btFoodChoice" fx:id="btNoDessertMon" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="kein Dessert" />
|
||||||
<VBox.margin>
|
</children>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</VBox>
|
||||||
</VBox.margin></Button>
|
</children>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="kein Dessert">
|
</VBox>
|
||||||
<VBox.margin>
|
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;" styleClass="container">
|
||||||
<Insets top="10.0" />
|
<children>
|
||||||
</VBox.margin></Button>
|
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Dienstag" textAlignment="CENTER">
|
||||||
</children>
|
<VBox.margin>
|
||||||
<HBox.margin>
|
<Insets bottom="10.0" />
|
||||||
<Insets />
|
</VBox.margin>
|
||||||
</HBox.margin>
|
<font>
|
||||||
</VBox>
|
<Font size="18.0" />
|
||||||
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;">
|
</font>
|
||||||
<children>
|
</Label>
|
||||||
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Dienstag" textAlignment="CENTER">
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<VBox.margin>
|
<children>
|
||||||
<Insets bottom="10.0" />
|
<Button id="btFoodChoice" fx:id="btFirstMealTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 1" />
|
||||||
</VBox.margin>
|
<Button id="btFoodChoice" fx:id="btSecondMealTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 2" />
|
||||||
<font>
|
<Button id="btFoodChoice" fx:id="btNoMealTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="Keine Mahlzeit">
|
||||||
<Font size="18.0" />
|
<VBox.margin>
|
||||||
</font>
|
<Insets bottom="20.0" />
|
||||||
</Label>
|
</VBox.margin>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 1">
|
</Button>
|
||||||
<VBox.margin>
|
</children>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</VBox>
|
||||||
</VBox.margin>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
</Button>
|
<children>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 2">
|
<Button id="btFoodChoice" fx:id="btFirstDessertTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 1" />
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btSecondDessertTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 2" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btNoDessertTue" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="kein Dessert" />
|
||||||
</VBox.margin>
|
</children>
|
||||||
</Button>
|
</VBox>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="Keine Mahlzeit">
|
</children>
|
||||||
<VBox.margin>
|
</VBox>
|
||||||
<Insets bottom="30.0" top="10.0" />
|
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;" styleClass="container">
|
||||||
</VBox.margin>
|
<children>
|
||||||
</Button>
|
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Mittwoch" textAlignment="CENTER">
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 1">
|
<VBox.margin>
|
||||||
<VBox.margin>
|
<Insets bottom="10.0" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</VBox.margin>
|
||||||
</VBox.margin>
|
<font>
|
||||||
</Button>
|
<Font size="18.0" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 2">
|
</font>
|
||||||
<VBox.margin>
|
</Label>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
</VBox.margin>
|
<children>
|
||||||
</Button>
|
<Button id="btFoodChoice" fx:id="btFirstMealWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 1" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="kein Dessert">
|
<Button id="btFoodChoice" fx:id="btSecondMealWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 2" />
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btNoMealWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="Keine Mahlzeit">
|
||||||
<Insets top="10.0" />
|
<VBox.margin>
|
||||||
</VBox.margin>
|
<Insets bottom="20.0" />
|
||||||
</Button>
|
</VBox.margin>
|
||||||
</children>
|
</Button>
|
||||||
</VBox>
|
</children>
|
||||||
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;">
|
</VBox>
|
||||||
<children>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Mittwoch" textAlignment="CENTER">
|
<children>
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btFirstDessertWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 1" />
|
||||||
<Insets bottom="10.0" />
|
<Button id="btFoodChoice" fx:id="btSecondDessertWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 2" />
|
||||||
</VBox.margin>
|
<Button id="btFoodChoice" fx:id="btNoDessertWed" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="kein Dessert" />
|
||||||
<font>
|
</children>
|
||||||
<Font size="18.0" />
|
</VBox>
|
||||||
</font>
|
</children>
|
||||||
</Label>
|
</VBox>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 1">
|
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;" styleClass="container">
|
||||||
<VBox.margin>
|
<children>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Donnerstag" textAlignment="CENTER">
|
||||||
</VBox.margin>
|
<VBox.margin>
|
||||||
</Button>
|
<Insets bottom="10.0" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 2">
|
</VBox.margin>
|
||||||
<VBox.margin>
|
<font>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Font size="18.0" />
|
||||||
</VBox.margin>
|
</font>
|
||||||
</Button>
|
</Label>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="Keine Mahlzeit">
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<VBox.margin>
|
<children>
|
||||||
<Insets bottom="30.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btFirstMealThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 1" />
|
||||||
</VBox.margin>
|
<Button id="btFoodChoice" fx:id="btSecondMealThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 2" />
|
||||||
</Button>
|
<Button id="btFoodChoice" fx:id="btNoMealThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="Keine Mahlzeit">
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 1">
|
<VBox.margin>
|
||||||
<VBox.margin>
|
<Insets bottom="20.0" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</VBox.margin>
|
||||||
</VBox.margin>
|
</Button>
|
||||||
</Button>
|
</children>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 2">
|
</VBox>
|
||||||
<VBox.margin>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<children>
|
||||||
</VBox.margin>
|
<Button id="btFoodChoice" fx:id="btFirstDessertThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 1" />
|
||||||
</Button>
|
<Button id="btFoodChoice" fx:id="btSecondDessertThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 2" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="kein Dessert">
|
<Button id="btFoodChoice" fx:id="btNoDessertThu" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="kein Dessert" />
|
||||||
<VBox.margin>
|
</children>
|
||||||
<Insets top="10.0" />
|
</VBox>
|
||||||
</VBox.margin>
|
</children>
|
||||||
</Button>
|
</VBox>
|
||||||
</children>
|
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;" styleClass="container">
|
||||||
</VBox>
|
<children>
|
||||||
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;">
|
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Freitag" textAlignment="CENTER">
|
||||||
<children>
|
<VBox.margin>
|
||||||
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Donnerstag" textAlignment="CENTER">
|
<Insets bottom="10.0" />
|
||||||
<VBox.margin>
|
</VBox.margin>
|
||||||
<Insets bottom="10.0" />
|
<font>
|
||||||
</VBox.margin>
|
<Font size="18.0" />
|
||||||
<font>
|
</font>
|
||||||
<Font size="18.0" />
|
</Label>
|
||||||
</font>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
</Label>
|
<children>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 1">
|
<Button id="btFoodChoice" fx:id="btFirstMealFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 1" />
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btSecondMealFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Mahlzeit 2" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btNoMealFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="Keine Mahlzeit">
|
||||||
</VBox.margin>
|
<VBox.margin>
|
||||||
</Button>
|
<Insets bottom="20.0" />
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 2">
|
</VBox.margin>
|
||||||
<VBox.margin>
|
</Button>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</children>
|
||||||
</VBox.margin>
|
</VBox>
|
||||||
</Button>
|
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="Keine Mahlzeit">
|
<children>
|
||||||
<VBox.margin>
|
<Button id="btFoodChoice" fx:id="btFirstDessertFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 1" />
|
||||||
<Insets bottom="30.0" top="10.0" />
|
<Button id="btFoodChoice" fx:id="btSecondDessertFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="78.0" prefWidth="218.0" styleClass="btFood" text="Dessert 2" />
|
||||||
</VBox.margin>
|
<Button id="btFoodChoice" fx:id="btNoDessertFri" alignment="CENTER" mnemonicParsing="false" onAction="#setButtonActive" prefHeight="20.0" prefWidth="170.0" styleClass="btFood" text="kein Dessert" />
|
||||||
</Button>
|
</children>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 1">
|
</VBox>
|
||||||
<VBox.margin>
|
</children>
|
||||||
<Insets bottom="10.0" top="10.0" />
|
</VBox>
|
||||||
</VBox.margin>
|
</children>
|
||||||
</Button>
|
</HBox>
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 2">
|
<Button id="btPlaceOrder" fx:id="btSaveOrder" layoutX="379.0" layoutY="527.0" mnemonicParsing="false" prefHeight="40.0" prefWidth="150.0" text="Bestellung abschicken" />
|
||||||
<VBox.margin>
|
<ComboBox id="cbChooseChild" fx:id="cbPickChild" layoutX="29.0" layoutY="34.0" prefWidth="150.0" promptText="Wähle Kind" stylesheets="@menue.css" />
|
||||||
<Insets bottom="10.0" top="10.0" />
|
<ListView id="lvShowDescription" fx:id="lvFoodInfo" layoutX="20.0" layoutY="115.0" prefHeight="370.0" prefWidth="200.0" />
|
||||||
</VBox.margin>
|
</children>
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="kein Dessert">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
<VBox prefHeight="350.0" prefWidth="180.0" style="-fx-background-color: transparent; -fx-padding: 5;">
|
|
||||||
<children>
|
|
||||||
<Label alignment="CENTER" contentDisplay="TOP" prefHeight="23.0" prefWidth="196.0" style="-fx-background-color: lightdarkblue;" text="Freitag" textAlignment="CENTER">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
<font>
|
|
||||||
<Font size="18.0" />
|
|
||||||
</font>
|
|
||||||
</Label>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 1">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Mahlzeit 2">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="Keine Mahlzeit">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="30.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 1">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="78.0" prefWidth="218.0" text="Dessert 2">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
<Button id="btFoodChoice" alignment="CENTER" mnemonicParsing="false" prefHeight="20.0" prefWidth="170.0" text="kein Dessert">
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</Button>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<Button id="btPlaceOrder" layoutX="436.0" layoutY="677.0" mnemonicParsing="false" prefHeight="40.0" prefWidth="150.0" text="Bestellung speichern" />
|
|
||||||
<ComboBox id="cbChooseChild" layoutX="29.0" layoutY="34.0" prefWidth="150.0" promptText="Wähle Kind" stylesheets="@menue.css" />
|
|
||||||
<ListView id="lvShowDescription" layoutX="14.0" layoutY="151.0" prefHeight="475.0" prefWidth="200.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -1,10 +1,37 @@
|
|||||||
.sidebar-nav_button {
|
#btFoodChoice{
|
||||||
-fx-background-color: #69b6ff;
|
-fx-background-color: transparent;
|
||||||
-fx-text-fill: #123;
|
|
||||||
-fx-border-color: #000;
|
|
||||||
-fx-border-radius: 20;
|
|
||||||
}
|
|
||||||
.sidebar-nav_button.active {
|
|
||||||
-fx-background-color: #4e92b4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#btFoodChoice:hover{
|
||||||
|
-fx-underline: true;
|
||||||
|
-fx-text-fill: black;
|
||||||
|
}
|
||||||
|
#btPlaceOrder{
|
||||||
|
-fx-background-color: lightblue;
|
||||||
|
-fx-text-fill: white;
|
||||||
|
-fx-background-radius: 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btPlaceOrder:hover{
|
||||||
|
-fx-border-width: 0;
|
||||||
|
-fx-text-fill: black;
|
||||||
|
-fx-underline: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cbChooseChild{
|
||||||
|
-fx-background-color: lightgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container{
|
||||||
|
-fx-padding: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-nav_button{
|
||||||
|
-fx-border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-nav_button.active {
|
||||||
|
-fx-background-color: #4e92b4;
|
||||||
|
-fx-border-width: 0px;
|
||||||
|
}
|
@ -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>
|
@ -1,70 +1,65 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.image.*?>
|
<?import javafx.scene.image.Image?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.Region?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<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="1300.0" stylesheets="@menue.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.ParentMenuController">
|
||||||
fx:controller="com.bib.essensbestellungsverwaltung.ParentMenuController">
|
|
||||||
<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: #ADD8E6FF; -fx-padding: 20;" BorderPane.alignment="CENTER">
|
||||||
style="-fx-background-color: #69b6ff; -fx-padding: 20;" BorderPane.alignment="CENTER">
|
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="essensplanButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="essensplanButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onEssensplanClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Essensplan">
|
||||||
onMouseClicked="#onEssensplanClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Essensplan">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0"/>
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/menu.png"/>
|
<Image url="@pics/menu.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="kinderButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="kinderButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onKinderClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Kinder">
|
||||||
onMouseClicked="#onKinderClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Kinder">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0"/>
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/little-kid.png"/>
|
<Image url="@pics/little-kid.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Button fx:id="bestellungButton" alignment="CENTER_LEFT" mnemonicParsing="false"
|
<Button fx:id="bestellungButton" alignment="CENTER_LEFT" mnemonicParsing="false" onMouseClicked="#onBestellungClick" prefHeight="60.0" prefWidth="250.0" styleClass="sidebar-nav_button" text="Bestellung">
|
||||||
onMouseClicked="#onBestellungClick" prefHeight="60.0" prefWidth="250.0"
|
|
||||||
styleClass="sidebar-nav_button" text="Bestellung">
|
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0"/>
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/shopping-list.png"/>
|
<Image url="@pics/shopping-list.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Region VBox.vgrow="ALWAYS"/>
|
<Region VBox.vgrow="ALWAYS" />
|
||||||
<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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/setting.png"/>
|
<Image url="@pics/setting.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
@ -73,22 +68,20 @@
|
|||||||
</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: #ADD8E6FF;" 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>
|
||||||
</Button>
|
</Button>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets right="20.0"/>
|
<Insets right="20.0" />
|
||||||
</padding>
|
</padding>
|
||||||
</HBox>
|
</HBox>
|
||||||
</top>
|
</top>
|
||||||
<center>
|
<center>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"/>
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
|
||||||
</center>
|
</center>
|
||||||
</BorderPane>
|
</BorderPane>
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
#contentContainer{
|
||||||
|
-fx-background-color: #add8e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contentContainer2{
|
||||||
|
-fx-background-color: lightblue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contentButton{
|
||||||
|
-fx-background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contentButton:hover{
|
||||||
|
-fx-underline: true;
|
||||||
|
-fx-background-color: #78939d;
|
||||||
|
-fx-text-fill: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btLogOut{
|
||||||
|
-fx-background-color: transparent;
|
||||||
|
-fx-pref-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btLogOut:hover{
|
||||||
|
-fx-underline: true;
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.image.Image?>
|
||||||
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<AnchorPane prefHeight="800.0" prefWidth="1205.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.SettingsController">
|
||||||
|
<children>
|
||||||
|
<VBox id="contentContainer" layoutY="-14.0" prefHeight="814.0" prefWidth="333.0" stylesheets="@parentMenue.css">
|
||||||
|
<children>
|
||||||
|
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="327.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@pics/menu.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
<Button id="contentButton" alignment="BASELINE_LEFT" mnemonicParsing="false" prefHeight="25.0" prefWidth="260.0" text="Essensplan">
|
||||||
|
<font>
|
||||||
|
<Font size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@pics/little-kid.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
<Button id="contentButton" alignment="BASELINE_LEFT" mnemonicParsing="false" prefHeight="25.0" prefWidth="260.0" text="Kind">
|
||||||
|
<font>
|
||||||
|
<Font size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@pics/shopping-list.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
<Button id="contentButton" alignment="BASELINE_LEFT" mnemonicParsing="false" prefHeight="52.0" prefWidth="260.0" text="Bestellung">
|
||||||
|
<font>
|
||||||
|
<Font size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@pics/setting.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
<Button fx:id="BtSetting" alignment="BASELINE_LEFT" mnemonicParsing="false" onAction="#onSettingBtClick" prefHeight="52.0" prefWidth="260.0" text="Nutzereinstellungen">
|
||||||
|
<font>
|
||||||
|
<Font size="25.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets top="50.0" />
|
||||||
|
</padding></VBox>
|
||||||
|
<HBox id="contentContainer2" alignment="CENTER_RIGHT" prefHeight="40.0" prefWidth="1200.0" stylesheets="@parentMenue.css">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#onLogOutBtClick" text="Abmelden" />
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox fx:id="UserSetting" layoutX="343.0" layoutY="48.0" prefHeight="355.0" prefWidth="856.0" style="-fx-border-width: 1 1 1 1; -fx-border-color: lightblue;" AnchorPane.topAnchor="230.0">
|
||||||
|
<children>
|
||||||
|
<VBox prefHeight="353.0" prefWidth="260.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Elterndaten">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="24.0" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="25.0" left="25.0" right="25.0" top="10.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Label>
|
||||||
|
<TextField prefHeight="36.0" prefWidth="274.0" promptText="aktuelles Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="25.0" left="20.0" right="25.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField promptText="neues Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="20.0" right="25.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField promptText="passwort bestätigen " style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="25.0" left="20.0" right="25.0" top="25.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<Button alignment="BASELINE_LEFT" contentDisplay="TOP" mnemonicParsing="false" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Passowrt ändern" textFill="WHITE">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="80.0" top="25.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
<VBox prefHeight="353.0" prefWidth="245.0">
|
||||||
|
<children>
|
||||||
|
<TextField prefHeight="35.0" prefWidth="102.0" promptText="PLZ" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="25.0" left="20.0" right="25.0" top="75.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField promptText="Straße" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="25.0" left="20.0" right="25.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
</children>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="80.0" />
|
||||||
|
</HBox.margin>
|
||||||
|
</VBox>
|
||||||
|
<VBox prefHeight="411.0" prefWidth="225.0">
|
||||||
|
<children>
|
||||||
|
<TextField promptText="Stadt" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="20.0" right="25.0" top="75.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField promptText="Hausnummer" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="25.0" right="25.0" top="25.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
<Button alignment="BASELINE_LEFT" contentDisplay="TOP" mnemonicParsing="false" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Adresse ändern" textFill="WHITE">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="16.799999237060547" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="60.0" top="120.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
@ -8,17 +8,134 @@
|
|||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?import javafx.scene.layout.HBox?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.shape.Circle?>
|
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
<?import javafx.scene.text.Text?>
|
<?import javafx.scene.text.Text?>
|
||||||
|
|
||||||
<AnchorPane maxHeight="-400" maxWidth="-600" minHeight="-400" minWidth="-600" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.SingUpController">
|
<AnchorPane maxHeight="750.0" maxWidth="1300.0" minHeight="750.0" minWidth="1200.0" prefHeight="750.0" prefWidth="1300.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.bib.essensbestellungsverwaltung.SingUpController">
|
||||||
<children>
|
<children>
|
||||||
<VBox alignment="CENTER" prefHeight="400.0" prefWidth="265.0" style="-fx-background-color: lightblue;">
|
<VBox layoutX="400.0" prefHeight="750.0" prefWidth="900.0" style="-fx-background-color: white;">
|
||||||
|
<children>
|
||||||
|
<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>
|
||||||
|
<Blend />
|
||||||
|
</effect>
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="20.0" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
<TextField fx:id="tfFirstName" promptText="Vorname" 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="20.0" />
|
||||||
|
</font>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</TextField>
|
||||||
|
<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="20.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 name="Microsoft Tai Le Bold" size="20.0" />
|
||||||
|
</font>
|
||||||
|
<opaqueInsets>
|
||||||
|
<Insets />
|
||||||
|
</opaqueInsets>
|
||||||
|
<effect>
|
||||||
|
<Blend />
|
||||||
|
</effect>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</PasswordField>
|
||||||
|
<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 name="Microsoft Tai Le Bold" size="20.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<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;">
|
||||||
|
<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="20.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="20.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
<TextField fx:id="tfHouseNumber" prefHeight="43.0" prefWidth="155.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="20.0" />
|
||||||
|
</font>
|
||||||
|
</TextField>
|
||||||
|
</children>
|
||||||
|
</HBox>
|
||||||
|
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#onKontoErstellenBtClick" prefHeight="48.0" prefWidth="137.0" style="-fx-background-radius: 25; -fx-background-color: lightblue;" text="Konto erstellen" textFill="WHITE">
|
||||||
|
<font>
|
||||||
|
<Font name="Microsoft Tai Le Bold" size="15.0" />
|
||||||
|
</font>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets right="15.0" />
|
||||||
|
</HBox.margin></Button>
|
||||||
|
<Button id="btSignUp" mnemonicParsing="false" onAction="#onAnmeldenBtClick" prefHeight="25.0" prefWidth="101.0" style="-fx-background-color: tranparent;" text="Anmelden" textFill="#7c7b7b" underline="true">
|
||||||
|
<font>
|
||||||
|
<Font size="15.0" />
|
||||||
|
</font>
|
||||||
|
<HBox.margin>
|
||||||
|
<Insets left="15.0" />
|
||||||
|
</HBox.margin></Button>
|
||||||
|
</children>
|
||||||
|
<opaqueInsets>
|
||||||
|
<Insets top="15.0" />
|
||||||
|
</opaqueInsets>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets top="15.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</HBox>
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="65.0" left="45.0" right="45.0" top="150.0" />
|
||||||
|
</padding>
|
||||||
|
</VBox>
|
||||||
|
<VBox alignment="CENTER" prefHeight="750.0" prefWidth="400.0" style="-fx-background-color: lightblue;">
|
||||||
<children>
|
<children>
|
||||||
<Text fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Essensbestellung">
|
<Text fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Essensbestellung">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Yu Gothic Light" size="26.0" />
|
<Font name="Yu Gothic Light" size="35.0" />
|
||||||
</font>
|
</font>
|
||||||
</Text>
|
</Text>
|
||||||
</children>
|
</children>
|
||||||
@ -26,82 +143,5 @@
|
|||||||
<Insets bottom="150.0" />
|
<Insets bottom="150.0" />
|
||||||
</padding>
|
</padding>
|
||||||
</VBox>
|
</VBox>
|
||||||
<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="#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;">
|
|
||||||
<children>
|
|
||||||
<TextField promptText="Email" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="tfEmail">
|
|
||||||
<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>
|
|
||||||
<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">
|
|
||||||
<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 promptText="Passwort" style="-fx-background-color: transparent; -fx-border-color: lightgray; -fx-border-width: 0 0 1 0;" fx:id="pfPasswort">
|
|
||||||
<font>
|
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
|
||||||
</font>
|
|
||||||
<opaqueInsets>
|
|
||||||
<Insets />
|
|
||||||
</opaqueInsets>
|
|
||||||
<effect>
|
|
||||||
<Blend />
|
|
||||||
</effect>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</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">
|
|
||||||
<font>
|
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
|
||||||
</font>
|
|
||||||
<opaqueInsets>
|
|
||||||
<Insets />
|
|
||||||
</opaqueInsets>
|
|
||||||
<effect>
|
|
||||||
<Blend />
|
|
||||||
</effect>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</PasswordField>
|
|
||||||
<HBox alignment="CENTER" prefHeight="30.0" prefWidth="238.0">
|
|
||||||
<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">
|
|
||||||
<font>
|
|
||||||
<Font name="Microsoft Tai Le Bold" size="12.0" />
|
|
||||||
</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"/>
|
|
||||||
</children>
|
|
||||||
<opaqueInsets>
|
|
||||||
<Insets top="15.0" />
|
|
||||||
</opaqueInsets>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets top="15.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</HBox>
|
|
||||||
</children>
|
|
||||||
<padding>
|
|
||||||
<Insets bottom="65.0" left="45.0" right="45.0" top="45.0" />
|
|
||||||
</padding>
|
|
||||||
</VBox>
|
|
||||||
<Circle fill="#1469b895" layoutX="133.0" layoutY="368.0" radius="106.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
|
||||||
<Circle fill="#0088ff82" layoutX="77.0" layoutY="276.0" radius="53.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
|
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -1,129 +1,118 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.image.*?>
|
<?import javafx.scene.image.Image?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
<?import javafx.scene.text.*?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<BorderPane fx:id="contentView" prefHeight="750.0" prefWidth="1200.0" stylesheets="@menue.css"
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1"
|
<?import javafx.scene.layout.HBox?>
|
||||||
fx:controller="com.bib.essensbestellungsverwaltung.WorkerMenuController">
|
<?import javafx.scene.layout.Region?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<BorderPane fx:id="contentView" prefHeight="750.0" prefWidth="1300.0" stylesheets="@menue.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" 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: #ADD8E6FF; -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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/to-do-list.png"/>
|
<Image url="@pics/to-do-list.png" />
|
||||||
</image>
|
</image>
|
||||||
</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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/spreadsheet.png"/>
|
<Image url="@pics/spreadsheet.png" />
|
||||||
</image>
|
</image>
|
||||||
</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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/calendar.png"/>
|
<Image url="@pics/calendar.png" />
|
||||||
</image>
|
</image>
|
||||||
</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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/lunch.png"/>
|
<Image url="@pics/lunch.png" />
|
||||||
</image>
|
</image>
|
||||||
</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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/teamwork.png"/>
|
<Image url="@pics/teamwork.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
<Region style="-fx-padding: 20;" VBox.vgrow="ALWAYS">
|
<Region style="-fx-padding: 20;" VBox.vgrow="ALWAYS">
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<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>
|
||||||
<graphic>
|
<graphic>
|
||||||
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
<ImageView fitHeight="35.0" fitWidth="35.0" pickOnBounds="true" preserveRatio="true">
|
||||||
<image>
|
<image>
|
||||||
<Image url="@pics/setting.png"/>
|
<Image url="@pics/setting.png" />
|
||||||
</image>
|
</image>
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</graphic>
|
</graphic>
|
||||||
</Button>
|
</Button>
|
||||||
</children>
|
</children>
|
||||||
<opaqueInsets>
|
<opaqueInsets>
|
||||||
<Insets/>
|
<Insets />
|
||||||
</opaqueInsets>
|
</opaqueInsets>
|
||||||
</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: #ADD8E6FF;" 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>
|
||||||
</Button>
|
</Button>
|
||||||
</children>
|
</children>
|
||||||
<padding>
|
<padding>
|
||||||
<Insets right="20.0"/>
|
<Insets right="20.0" />
|
||||||
</padding>
|
</padding>
|
||||||
</HBox>
|
</HBox>
|
||||||
</top>
|
</top>
|
||||||
<center>
|
<center>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"/>
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
|
||||||
</center>
|
</center>
|
||||||
</BorderPane>
|
</BorderPane>
|
||||||
|
Loading…
Reference in New Issue
Block a user