Merge pull request 'Test' (#22) from stefan into master

Reviewed-on: #22
This commit is contained in:
Maximilian Heer 2024-01-23 15:36:46 +01:00
commit 3edbca73f9
5 changed files with 205 additions and 37 deletions

1
.idea/misc.xml generated
View File

@ -7,6 +7,7 @@
<option value="$PROJECT_DIR$/pom.xml" /> <option value="$PROJECT_DIR$/pom.xml" />
</list> </list>
</option> </option>
<option name="workspaceImportForciblyTurnedOn" value="true" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />

View File

@ -1,6 +1,8 @@
package Logik; package Logik;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
public class Mahlzeit { public class Mahlzeit {
private String name; private String name;
@ -15,6 +17,7 @@ public class Mahlzeit {
zutaten = new ArrayList<>(); zutaten = new ArrayList<>();
} }
public String getName() { public String getName() {
return name; return name;
} }

View File

@ -95,8 +95,8 @@ public class EssensverwaltungMitarbeiterView {
VerwaltungApplication.sceneWechseln(gerichterstellung, 400, 530, "gerichterstellung_mitarbeiter-view.fxml"); VerwaltungApplication.sceneWechseln(gerichterstellung, 400, 530, "gerichterstellung_mitarbeiter-view.fxml");
gerichterstellung.minWidthProperty().set(400); gerichterstellung.minWidthProperty().set(420);
gerichterstellung.minHeightProperty().set(530); gerichterstellung.minHeightProperty().set(600);
} }
public void onZurueck(ActionEvent actionEvent) { public void onZurueck(ActionEvent actionEvent) {

View File

@ -1,51 +1,211 @@
package de.subway_surfers.vpr_app; package de.subway_surfers.vpr_app;
import Logik.Mahlzeit;
import Logik.Zutat; import Logik.Zutat;
import RestAPISchnittstelle.RestApiClient;
import com.google.gson.*;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button; import javafx.scene.control.*;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
public class GerichterstellungMitarbeiterView { public class GerichterstellungMitarbeiterView {
private @FXML HBox anzeigeInhaltsstoffe;
private @FXML TextArea eingabeBeschreibung;
private @FXML TextField eingabeName;
private @FXML Button buttonInhaltsstoffe;
private @FXML TextField eingabeInhaltsstoffe;
private ArrayList<Zutat> zutaten; private @FXML HBox anzeigeInhaltsstoffe;
private @FXML TextArea eingabeBeschreibung;
private @FXML TextField eingabeName;
private @FXML Button buttonInhaltsstoffe;
private @FXML TextField eingabeInhaltsstoffe;
private @FXML Button speichernButton;
private @FXML TextField eingabePreis;
private @FXML DatePicker datePicker;
private @FXML Label status;
public void initialize() { private ArrayList<Zutat> zutaten;
zutaten = new ArrayList<>(); private ArrayList<Mahlzeit> mahlzeiten;
//wird das Fenster vergrößert, wird das Eingabefeld für Inhaltstoffe und den Hinzufügenbutton public void initialize() {
// auf die volle breite vergrößert. zutaten = new ArrayList<>();
((Pane) eingabeInhaltsstoffe.getParent()).widthProperty().addListener((obs, oldValue, newValue) -> { mahlzeiten = new ArrayList<>();
//eingabeName, da dieses Feld immer die gesamte breite der Stage haben.
eingabeInhaltsstoffe.setPrefWidth(eingabeName.getWidth() - buttonInhaltsstoffe.getPrefWidth());
});
}
public void onButtonInhaltsstoffeClick(ActionEvent actionEvent) { //wird das Fenster vergrößert, wird das Eingabefeld für Inhaltstoffe und den Hinzufügenbutton
String text = eingabeInhaltsstoffe.getText(); // auf die volle breite vergrößert.
if (!text.equals("")) { ((Pane) eingabeInhaltsstoffe.getParent()).widthProperty().addListener((obs, oldValue, newValue) -> {
eingabeInhaltsstoffe.setText(""); //eingabeName, da dieses Feld immer die gesamte breite der Stage haben.
eingabeInhaltsstoffe.setPrefWidth(eingabeName.getWidth() - buttonInhaltsstoffe.getPrefWidth());
});
}
Button neuerInhalt = new Button(); public void onButtonInhaltsstoffeClick(ActionEvent actionEvent) {
neuerInhalt.setText(text); String text = eingabeInhaltsstoffe.getText();
anzeigeInhaltsstoffe.getChildren().add(neuerInhalt); if (!text.equals("")) {
eingabeInhaltsstoffe.setText("");
Zutat neue = new Zutat(text); Button neuerInhalt = new Button();
zutaten.add(neue); neuerInhalt.setText(text);
neuerInhalt.setOnAction(e -> { anzeigeInhaltsstoffe.getChildren().add(neuerInhalt);
((HBox) neuerInhalt.getParent()).getChildren().remove(neuerInhalt);
zutaten.remove(neue); Zutat neue = new Zutat(text);
}); zutaten.add(neue);
} neuerInhalt.setOnAction(e -> {
} ((HBox) neuerInhalt.getParent()).getChildren().remove(neuerInhalt);
zutaten.remove(neue);
});
}
}
public void onSpeichernButtonClick() {
String eingabe = eingabeName.getText();
String beschreibung = eingabeBeschreibung.getText();
float preis = Float.parseFloat(eingabePreis.getText());
LocalDate datum = datePicker.getValue();
if (!eingabe.isEmpty() && !beschreibung.isEmpty()) {
resetEingabeFelder();
Mahlzeit mahlzeit = new Mahlzeit(eingabe, preis, beschreibung);
mahlzeiten.add(mahlzeit);
status.setText("Mahlzeit hinzugefügt");
int datumId = datumBearbeiten(datum);
System.out.println(datumId);
int gerichtId = gerichteAbfragen(mahlzeit);
System.out.println(gerichtId);
inhaltsstoff();
gibtsAm(gerichtId, datumId);
}
}
private void resetEingabeFelder() {
eingabeName.setText("");
eingabeBeschreibung.setText("");
eingabePreis.setText("");
eingabeInhaltsstoffe.setText("");
}
private int datumBearbeiten(LocalDate datum) {
RestApiClient restApiClient = new RestApiClient();
String datumAsString = datum.toString();
JsonElement jsonElement = JsonParser.parseString(restApiClient.get("Tagesplan"));
JsonArray jsonArray = jsonElement.getAsJsonArray();
for (JsonElement element : jsonArray) {
JsonObject obj = element.getAsJsonObject();
if (obj.get("datum").getAsString().equals(datumAsString)) {
return Integer.parseInt(obj.get("id").getAsString());
}
}
restApiClient.post("Tagesplan", "{\"datum\":\"" + datumAsString + "\"}");
jsonElement = JsonParser.parseString(restApiClient.get("Tagesplan"));
jsonArray = jsonElement.getAsJsonArray();
for (JsonElement element : jsonArray) {
JsonObject obj = element.getAsJsonObject();
if (obj.get("datum").getAsString().equals(datumAsString)) {
return Integer.parseInt(obj.get("id").getAsString());
}
}
return -1;
}
public void gibtsAm(int gid, int tid){
RestApiClient restApiClient = new RestApiClient();
JsonObject gibtsAmJson = new JsonObject();
gibtsAmJson.addProperty("tid", tid);
gibtsAmJson.addProperty("gid", gid);
restApiClient.post("gibtsAm", gibtsAmJson.toString());
}
public void inhaltsstoff() {
RestApiClient restApiClient = new RestApiClient();
ArrayList<Integer> ids = new ArrayList<>();
for (Zutat zutat : zutaten) {
JsonElement jE = JsonParser.parseString(restApiClient.get("Inhaltsstoff"));
JsonArray inhaltsstoffArray = jE.getAsJsonArray();
int id = -1;
for (JsonElement element : inhaltsstoffArray) {
JsonObject inhatsstoff = element.getAsJsonObject();
if (inhatsstoff.get("name").getAsString().equalsIgnoreCase(zutat.getName())) {
id = inhatsstoff.get("id").getAsInt();
break;
}
}
if (id == -1) {
JsonObject neuerInhaltsstoff = new JsonObject();
neuerInhaltsstoff.addProperty("name", zutat.getName());
restApiClient.post("Inhaltsstoff", neuerInhaltsstoff.toString());
jE = JsonParser.parseString(restApiClient.get("Inhaltsstoff"));
inhaltsstoffArray = jE.getAsJsonArray();
JsonObject letzterInhaltsstoff = inhaltsstoffArray.get(inhaltsstoffArray.size() - 1).getAsJsonObject();
id = letzterInhaltsstoff.get("id").getAsInt();
System.out.println("Inhaltsstoff hinzugefügt: " + zutat.getName());
}
ids.add(id);
}
System.out.println("IDs der Inhaltsstoffe: " + ids);
}
private int gerichteAbfragen(Mahlzeit mahlzeit) {
RestApiClient restApiClient = new RestApiClient();
JsonElement je = JsonParser.parseString(restApiClient.get("Gericht"));
JsonArray js = je.getAsJsonArray();
for (JsonElement element : js) {
JsonObject mahlzeitJson = element.getAsJsonObject();
String nameMahlzeit = mahlzeitJson.get("name").getAsString();
if (nameMahlzeit.equals(mahlzeit.getName())) {
int id = Integer.parseInt(mahlzeitJson.get("id").getAsString());
// Update des existierenden Gerichts
JsonObject updateGericht = new JsonObject();
updateGericht.addProperty("id", id);
updateGericht.addProperty("name", mahlzeit.getName());
updateGericht.addProperty("preis", mahlzeit.getPreis());
updateGericht.addProperty("beschreibung", mahlzeit.getBeschreibung());
restApiClient.put("Gericht", id, updateGericht.toString());
return id;
}
}
// Neues Gericht zur Datenbank hinzufügen, falls es nicht existiert
JsonObject neuesGericht = new JsonObject();
neuesGericht.addProperty("name", mahlzeit.getName());
neuesGericht.addProperty("preis", mahlzeit.getPreis());
neuesGericht.addProperty("beschreibung", mahlzeit.getBeschreibung());
restApiClient.post("Gericht", neuesGericht.toString());
// ID des neu hinzugefügten Gerichts abrufen
je = JsonParser.parseString(restApiClient.get("Gericht"));
js = je.getAsJsonArray();
for (JsonElement element : js) {
JsonObject mahlzeitJson = element.getAsJsonObject();
if (mahlzeitJson.get("name").getAsString().equals(mahlzeit.getName())) {
return Integer.parseInt(mahlzeitJson.get("id").getAsString());
}
}
return -1;
}
} }

View File

@ -6,6 +6,7 @@
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<BorderPane xmlns="http://javafx.com/javafx" <BorderPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml" xmlns:fx="http://javafx.com/fxml"
fx:controller="de.subway_surfers.vpr_app.GerichterstellungMitarbeiterView" fx:controller="de.subway_surfers.vpr_app.GerichterstellungMitarbeiterView"
@ -14,19 +15,22 @@
<center> <center>
<VBox styleClass="gerichterstellung_felder"> <VBox styleClass="gerichterstellung_felder">
<TextField fx:id="eingabeName" promptText="Name des Gerichtes" focusTraversable="false"/> <TextField fx:id="eingabeName" promptText="Name des Gerichtes" focusTraversable="false"/>
<TextField fx:id="eingabePreis" promptText="Preis des Gerichtes" focusTraversable="false"/>
<TextArea fx:id="eingabeBeschreibung" promptText="Beschreibung" focusTraversable="false"/> <TextArea fx:id="eingabeBeschreibung" promptText="Beschreibung" focusTraversable="false"/>
<HBox> <HBox>
<TextField fx:id="eingabeInhaltsstoffe" promptText="Inhaltsstoffe" focusTraversable="false"/> <TextField fx:id="eingabeInhaltsstoffe" promptText="Inhaltsstoffe" focusTraversable="false"/>
<Button fx:id="buttonInhaltsstoffe" onAction="#onButtonInhaltsstoffeClick" text="Hinzufügen"/> <Button fx:id="buttonInhaltsstoffe" onAction="#onButtonInhaltsstoffeClick" text="Hinzufügen"/>
</HBox> </HBox>
<HBox fx:id="anzeigeInhaltsstoffe" /> <HBox fx:id="anzeigeInhaltsstoffe" minHeight="30"/>
<DatePicker fx:id="datePicker" maxWidth="Infinity"/>
<Label fx:id="status"/>
</VBox> </VBox>
</center> </center>
<bottom> <bottom>
<BorderPane> <BorderPane>
<right> <right>
<HBox styleClass="button_untenrechts"> <HBox styleClass="button_untenrechts">
<Button text="Speichern" defaultButton="true"/> <Button fx:id="speichernButton" text="Speichern" defaultButton="true" onAction="#onSpeichernButtonClick"/>
</HBox> </HBox>
</right> </right>
</BorderPane> </BorderPane>