212738ce83
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
204 lines
8.6 KiB
Java
204 lines
8.6 KiB
Java
package fi.lpam.ruokamanageri.gui;
|
|
|
|
import fi.lpam.ruokamanageri.dataluokat.Asiakas;
|
|
|
|
import fi.lpam.ruokamanageri.gui.elementit.IntegerSpinner;
|
|
import fi.lpam.ruokamanageri.gui.elementit.TabPohja;
|
|
import fi.lpam.ruokamanageri.Main;
|
|
import javafx.geometry.Insets;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.image.Image;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.stage.Stage;
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
public class AsiakasIkkuna extends Stage {
|
|
final Asiakas käsiteltäväAsiakas;
|
|
final TextField tfNimi, tfOsoite, tfRuokarajoitteet, tfAvainTieto, tfLisätiedot;
|
|
final IntegerSpinner tfMaanantai, tfTiistai, tfKeskiviikko, tfTorstai, tfPerjantai, tfSalaatit, tfPääruoat, tfJälkiruoat;
|
|
|
|
/**
|
|
* Luo ikkunan jossa muokataan saatua asiakasta
|
|
* @param käsiteltäväAsiakas voi olla uusi, tai vanha. Ikkuna ei välitä
|
|
*/
|
|
public AsiakasIkkuna(Asiakas käsiteltäväAsiakas) {
|
|
this.käsiteltäväAsiakas = käsiteltäväAsiakas;
|
|
this.setTitle("Asiakasikkuna");
|
|
|
|
GridPane root = new GridPane();
|
|
root.setPadding(new Insets(15));
|
|
root.setHgap(10);
|
|
root.setVgap(10);
|
|
root.setOnKeyPressed(e -> {
|
|
switch (e.getCode()) {
|
|
case ENTER: tallenna(); break;
|
|
case ESCAPE: close(); break;
|
|
default: break;
|
|
}});
|
|
|
|
root.addRow(root.getRowCount(), new Label("Vahvistetut kentät pakollisia"));
|
|
|
|
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
|
|
nimi.setStyle("-fx-font-weight: bold;");
|
|
tfNimi = new TextField();
|
|
tfNimi.setPromptText("Pakollinen tieto");
|
|
root.addRow(root.getRowCount(), nimi, tfNimi);
|
|
|
|
Label osoite = new Label("Osoite");
|
|
osoite.setStyle("-fx-font-weight: bold;");
|
|
tfOsoite = new TextField();
|
|
tfOsoite.setPromptText("Pakollinen tieto");
|
|
root.addRow(root.getRowCount(), osoite, tfOsoite);
|
|
|
|
root.addRow(root.getRowCount(), new Label("Määrät per kuljetus"));
|
|
|
|
Label salaatit = new Label("Salaatit");
|
|
tfSalaatit = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), salaatit, tfSalaatit);
|
|
|
|
Label pääruoat = new Label("Pääruoat");
|
|
tfPääruoat = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), pääruoat, tfPääruoat);
|
|
|
|
Label jälkiruoat = new Label("Jälkiruoat");
|
|
tfJälkiruoat = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), jälkiruoat, tfJälkiruoat);
|
|
|
|
root.addRow(root.getRowCount(), new Label("Kuljetukset per päivä"));
|
|
|
|
Label maanantai = new Label("Maanantai");
|
|
tfMaanantai = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), maanantai, tfMaanantai);
|
|
|
|
Label tiistai = new Label("Tiistai");
|
|
tfTiistai = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), tiistai, tfTiistai);
|
|
|
|
Label keskiviikko = new Label("Keskiviikko");
|
|
tfKeskiviikko = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), keskiviikko, tfKeskiviikko);
|
|
|
|
Label torstai = new Label("Torstai");
|
|
tfTorstai = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), torstai, tfTorstai);
|
|
|
|
Label perjantai = new Label("Perjantai");
|
|
tfPerjantai = new IntegerSpinner();
|
|
root.addRow(root.getRowCount(), perjantai, tfPerjantai);
|
|
|
|
Label ruokarajoitteet = new Label("Ruokarajoitteet");
|
|
tfRuokarajoitteet = new TextField();
|
|
root.addRow(root.getRowCount(), ruokarajoitteet, tfRuokarajoitteet);
|
|
|
|
Label avainTieto = new Label("Avaintieto");
|
|
tfAvainTieto = new TextField();
|
|
root.addRow(root.getRowCount(), avainTieto, tfAvainTieto);
|
|
|
|
Label lisätiedot = new Label("Kuljetuksen lisätiedot");
|
|
tfLisätiedot = new TextField();
|
|
tfLisätiedot.setPromptText("Näkyy raporteilla");
|
|
root.addRow(root.getRowCount(), lisätiedot, tfLisätiedot);
|
|
|
|
Button peruuta = new Button("Peruuta");
|
|
peruuta.setFont(TabPohja.buttonFont);
|
|
peruuta.setMinWidth(160);
|
|
peruuta.setOnAction(_ -> this.close());
|
|
Button tallenna = new Button("Tallenna");
|
|
tallenna.setFont(TabPohja.buttonFont);
|
|
tallenna.setMinWidth(160);
|
|
tallenna.setOnAction(_ -> tallenna());
|
|
root.addRow(root.getRowCount(), peruuta, tallenna);
|
|
|
|
|
|
this.setScene(new Scene(root));
|
|
this.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg"))));
|
|
this.setAlwaysOnTop(true);
|
|
this.setResizable(false);
|
|
|
|
//Saatu asiakas on tullut muokattavaksi
|
|
if (käsiteltäväAsiakas.getId() > 0) {
|
|
näytäAsiakas();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Jos saadulla asiakkaalla on id (eli asiakas löytyy tietokannasta ja sillä on tietoja)
|
|
* tällä funktiolla täytetään asiakkaan tiedot ikkunan kenttiin
|
|
*/
|
|
private void näytäAsiakas() {
|
|
tfNimi.setText(käsiteltäväAsiakas.getNimi());
|
|
tfOsoite.setText(käsiteltäväAsiakas.getOsoite());
|
|
tfMaanantai.getValueFactory().setValue(käsiteltäväAsiakas.getMaanantaiKpl());
|
|
tfTiistai.getValueFactory().setValue(käsiteltäväAsiakas.getTiistaiKpl());
|
|
tfKeskiviikko.getValueFactory().setValue(käsiteltäväAsiakas.getKeskiviikkoKpl());
|
|
tfTorstai.getValueFactory().setValue(käsiteltäväAsiakas.getTorstaiKpl());
|
|
tfPerjantai.getValueFactory().setValue(käsiteltäväAsiakas.getPerjantaiKpl());
|
|
tfSalaatit.getValueFactory().setValue(käsiteltäväAsiakas.getSalaatit());
|
|
tfPääruoat.getValueFactory().setValue(käsiteltäväAsiakas.getPääruoat());
|
|
tfJälkiruoat.getValueFactory().setValue(käsiteltäväAsiakas.getJälkiruoat());
|
|
tfRuokarajoitteet.setText(käsiteltäväAsiakas.getErityisruokavalio());
|
|
tfAvainTieto.setText(käsiteltäväAsiakas.getAvainTieto());
|
|
tfLisätiedot.setText(käsiteltäväAsiakas.getLisätiedot());
|
|
}
|
|
|
|
private void tallenna() {
|
|
this.setAlwaysOnTop(false);
|
|
String nimi = tfNimi.getText();
|
|
String osoite = tfOsoite.getText();
|
|
|
|
if (nimi.isEmpty() || osoite.isEmpty()) {
|
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
|
alert.setTitle("Tarkista tiedot");
|
|
alert.setHeaderText(null);
|
|
alert.setContentText("Nimi tai osoite ei voi olla tyhjiä");
|
|
alert.showAndWait();
|
|
return;
|
|
}
|
|
|
|
käsiteltäväAsiakas.setNimi(nimi);
|
|
käsiteltäväAsiakas.setOsoite(osoite);
|
|
käsiteltäväAsiakas.setMaanantaiKpl(tfMaanantai.getValue());
|
|
käsiteltäväAsiakas.setTiistaiKpl(tfTiistai.getValue());
|
|
käsiteltäväAsiakas.setKeskiviikkoKpl(tfKeskiviikko.getValue());
|
|
käsiteltäväAsiakas.setTorstaiKpl(tfTorstai.getValue());
|
|
käsiteltäväAsiakas.setPerjantaiKpl(tfPerjantai.getValue());
|
|
käsiteltäväAsiakas.setSalaatit(tfSalaatit.getValue());
|
|
käsiteltäväAsiakas.setPääruoat(tfPääruoat.getValue());
|
|
käsiteltäväAsiakas.setJälkiruoat(tfJälkiruoat.getValue());
|
|
käsiteltäväAsiakas.setErityisruokavalio(tfRuokarajoitteet.getText());
|
|
käsiteltäväAsiakas.setAvainTieto(tfAvainTieto.getText());
|
|
käsiteltäväAsiakas.setLisätiedot(tfLisätiedot.getText());
|
|
|
|
boolean läpi = false;
|
|
int maxYritykset = 3;
|
|
int yritykset = 0;
|
|
while (!läpi) {
|
|
if (käsiteltäväAsiakas.getId() > 0) {
|
|
läpi = käsiteltäväAsiakas.päivitäTietokantaan();
|
|
}
|
|
else {
|
|
läpi = käsiteltäväAsiakas.tallennaUusi();
|
|
}
|
|
yritykset++;
|
|
if (yritykset > maxYritykset) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if (läpi) {
|
|
int viikonKuljetukset = käsiteltäväAsiakas.getMaanantaiKpl() + käsiteltäväAsiakas.getTiistaiKpl() + käsiteltäväAsiakas.getKeskiviikkoKpl() + käsiteltäväAsiakas.getTorstaiKpl() + käsiteltäväAsiakas.getPerjantaiKpl();
|
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
|
alert.setTitle("Onnistuimme!");
|
|
alert.setHeaderText("Asiakkaan tallentaminen onnistui!");
|
|
alert.setContentText(String.format("%s saa jatkossa yhteensä \n%s salaattia, %s pääruokaa ja %s jälkiruokaa viikossa",
|
|
käsiteltäväAsiakas.getNimi(), käsiteltäväAsiakas.getSalaatit()*viikonKuljetukset, käsiteltäväAsiakas.getPääruoat()*viikonKuljetukset, käsiteltäväAsiakas.getPääruoat()*viikonKuljetukset));
|
|
alert.showAndWait();
|
|
this.close();
|
|
}
|
|
this.setAlwaysOnTop(true);
|
|
}
|
|
} |