00267ebe72
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
347 lines
17 KiB
Java
347 lines
17 KiB
Java
package fi.lpam.gui;
|
|
|
|
import fi.lpam.dataluokat.Asiakas;
|
|
|
|
import fi.lpam.gui.elementit.IntegerSpinner;
|
|
import fi.lpam.gui.elementit.TabPohja;
|
|
import fi.lpam.Main;
|
|
import javafx.geometry.Insets;
|
|
import javafx.geometry.Pos;
|
|
import javafx.geometry.Side;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.image.Image;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.scene.layout.HBox;
|
|
import javafx.scene.layout.VBox;
|
|
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, tfYhteyshenkilönNimi, tfLaskutusOsoite, tfYhteyshenkilönPuhelinnumero, tfYhteyshenkilönSähköposti;
|
|
final IntegerSpinner tfMaanantai, tfTiistai, tfKeskiviikko, tfTorstai, tfPerjantai, tfLauantai, tfSunnuntai, tfSalaatit, tfPääruoat, tfJälkiruoat;
|
|
final IntegerSpinner tfDinnerMaanantai, tfDinnerTiistai, tfDinnerKeskiviikko, tfDinnerTorstai, tfDinnerPerjantai, tfDinnerLauantai, tfDinnerSunnuntai, tfDinnerSalaatit, tfDinnerPääruoat, tfDinnerJä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;
|
|
if (käsiteltäväAsiakas.getNimi() != null) {
|
|
this.setTitle(käsiteltäväAsiakas.getNimi());
|
|
}
|
|
else {
|
|
this.setTitle("Uusi asiakas");
|
|
}
|
|
|
|
HBox hbTiedot = new HBox();
|
|
hbTiedot.setOnKeyPressed(e -> {
|
|
switch (e.getCode()) {
|
|
case ENTER: tallenna(); break;
|
|
case ESCAPE: close(); break;
|
|
default: break;
|
|
}});
|
|
|
|
|
|
GridPane lounasTiedot = new GridPane();
|
|
lounasTiedot.setPadding(new Insets(15));
|
|
lounasTiedot.setHgap(10);
|
|
lounasTiedot.setVgap(10);
|
|
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lounaat per kuljetus"));
|
|
|
|
Label salaatit = new Label("Salaatit");
|
|
tfSalaatit = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), salaatit, tfSalaatit);
|
|
|
|
Label pääruoat = new Label("Pääruoat");
|
|
tfPääruoat = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), pääruoat, tfPääruoat);
|
|
|
|
Label jälkiruoat = new Label("Jälkiruoat");
|
|
tfJälkiruoat = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), jälkiruoat, tfJälkiruoat);
|
|
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Kuljetukset per päivä"));
|
|
|
|
Label maanantai = new Label("Maanantai");
|
|
tfMaanantai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), maanantai, tfMaanantai);
|
|
|
|
Label tiistai = new Label("Tiistai");
|
|
tfTiistai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), tiistai, tfTiistai);
|
|
|
|
Label keskiviikko = new Label("Keskiviikko");
|
|
tfKeskiviikko = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), keskiviikko, tfKeskiviikko);
|
|
|
|
Label torstai = new Label("Torstai");
|
|
tfTorstai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), torstai, tfTorstai);
|
|
|
|
Label perjantai = new Label("Perjantai");
|
|
tfPerjantai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), perjantai, tfPerjantai);
|
|
|
|
tfLauantai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lauantai"), tfLauantai);
|
|
|
|
tfSunnuntai = new IntegerSpinner();
|
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Sunnuntai"), tfSunnuntai);
|
|
|
|
|
|
|
|
GridPane päivällisTiedot = new GridPane();
|
|
päivällisTiedot.setPadding(new Insets(15));
|
|
päivällisTiedot.setHgap(10);
|
|
päivällisTiedot.setVgap(10);
|
|
|
|
Button kopioiLounasPäivälliseen = new Button("Kopioi lounasmäärät");
|
|
kopioiLounasPäivälliseen.setOnAction(_->kopioiLounasmäärätPäivälliselle());
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Päivälliset per kuljetus"), kopioiLounasPäivälliseen);
|
|
|
|
tfDinnerSalaatit = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Salaatit"), tfDinnerSalaatit);
|
|
|
|
tfDinnerPääruoat = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Pääruoat"), tfDinnerPääruoat);
|
|
|
|
tfDinnerJälkiruoat = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Jälkiruoat"), tfDinnerJälkiruoat);
|
|
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Kuljetukset per päivä"));
|
|
|
|
tfDinnerMaanantai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Maanantai"), tfDinnerMaanantai);
|
|
|
|
tfDinnerTiistai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Tiistai"), tfDinnerTiistai);
|
|
|
|
tfDinnerKeskiviikko = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Keskiviikko"), tfDinnerKeskiviikko);
|
|
|
|
tfDinnerTorstai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Torstai"), tfDinnerTorstai);
|
|
|
|
tfDinnerPerjantai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Perjantai"), tfDinnerPerjantai);
|
|
|
|
tfDinnerLauantai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Lauantai"), tfDinnerLauantai);
|
|
|
|
tfDinnerSunnuntai = new IntegerSpinner();
|
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Sunnuntai"), tfDinnerSunnuntai);
|
|
|
|
|
|
|
|
GridPane asiakasTiedot = new GridPane();
|
|
asiakasTiedot.setPadding(new Insets(15));
|
|
asiakasTiedot.setHgap(10);
|
|
asiakasTiedot.setVgap(10);
|
|
|
|
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
|
|
nimi.setStyle("-fx-font-weight: bold;");
|
|
tfNimi = new TextField();
|
|
tfNimi.setPromptText("Pakollinen tieto");
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), nimi, tfNimi);
|
|
|
|
Label osoite = new Label("Osoite");
|
|
osoite.setStyle("-fx-font-weight: bold;");
|
|
tfOsoite = new TextField();
|
|
tfOsoite.setPromptText("Pakollinen tieto");
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), osoite, tfOsoite);
|
|
|
|
Label yhteyshenkilönNimi = new Label("Yhteyshenkilön etu- ja sukunimi");
|
|
tfYhteyshenkilönNimi = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönNimi, tfYhteyshenkilönNimi);
|
|
|
|
Label laskutusOsoite = new Label("Laskutusosoite");
|
|
tfLaskutusOsoite = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), laskutusOsoite, tfLaskutusOsoite);
|
|
|
|
Label yhteyshenkilönPuhelinnumero = new Label("Puhelinnumero");
|
|
tfYhteyshenkilönPuhelinnumero = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönPuhelinnumero, tfYhteyshenkilönPuhelinnumero);
|
|
|
|
Label yhteyshenkilönSähköposti = new Label("Sähköposti");
|
|
tfYhteyshenkilönSähköposti = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönSähköposti, tfYhteyshenkilönSähköposti);
|
|
|
|
Label ruokarajoitteet = new Label("Ruokarajoitteet");
|
|
tfRuokarajoitteet = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), ruokarajoitteet, tfRuokarajoitteet);
|
|
|
|
Label avainTieto = new Label("Avaintieto");
|
|
tfAvainTieto = new TextField();
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), avainTieto, tfAvainTieto);
|
|
|
|
Label lisätiedot = new Label("Kuljetuksen lisätiedot");
|
|
tfLisätiedot = new TextField();
|
|
tfLisätiedot.setPromptText("Näkyy raporteilla");
|
|
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), lisätiedot, tfLisätiedot);
|
|
|
|
hbTiedot.getChildren().addAll(asiakasTiedot, lounasTiedot, päivällisTiedot);
|
|
|
|
|
|
HBox napit = new HBox();
|
|
Button peruuta = new Button("Peruuta");
|
|
peruuta.setFont(TabPohja.BUTTON_FONT);
|
|
peruuta.setOnAction(_ -> this.close());
|
|
Button tallenna = new Button("Tallenna");
|
|
tallenna.setFont(TabPohja.BUTTON_FONT);
|
|
tallenna.setOnAction(_ -> tallenna());
|
|
napit.getChildren().addAll(peruuta, tallenna);
|
|
napit.setAlignment(Pos.CENTER_RIGHT);
|
|
napit.setSpacing(10);
|
|
napit.setPadding(TabPohja.INSETS);
|
|
|
|
|
|
VBox root = new VBox();
|
|
root.getChildren().addAll(hbTiedot, napit);
|
|
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());
|
|
tfLauantai.getValueFactory().setValue(käsiteltäväAsiakas.getLauantaiKpl());
|
|
tfSunnuntai.getValueFactory().setValue(käsiteltäväAsiakas.getSunnuntaiKpl());
|
|
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());
|
|
tfDinnerMaanantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerMaanantaiKpl());
|
|
tfDinnerTiistai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerTiistaiKpl());
|
|
tfDinnerKeskiviikko.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerKeskiviikkoKpl());
|
|
tfDinnerTorstai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerTorstaiKpl());
|
|
tfDinnerPerjantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerPerjantaiKpl());
|
|
tfDinnerLauantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerLauantaiKpl());
|
|
tfDinnerSunnuntai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerSunnuntaiKpl());
|
|
tfDinnerSalaatit.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerSalaatit());
|
|
tfDinnerPääruoat.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerPääruoat());
|
|
tfDinnerJälkiruoat.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerJälkiruoat());
|
|
tfRuokarajoitteet.setText(käsiteltäväAsiakas.getErityisruokavalio());
|
|
tfAvainTieto.setText(käsiteltäväAsiakas.getAvainTieto());
|
|
tfLisätiedot.setText(käsiteltäväAsiakas.getLisätiedot());
|
|
tfYhteyshenkilönNimi.setText(käsiteltäväAsiakas.getYhteyshenkilönNimi());
|
|
tfLaskutusOsoite.setText(käsiteltäväAsiakas.getLaskutusOsoite());
|
|
tfYhteyshenkilönPuhelinnumero.setText(käsiteltäväAsiakas.getYhteyshenkilönPuhelinnumero());
|
|
tfYhteyshenkilönSähköposti.setText(käsiteltäväAsiakas.getYhteyshenkilönSähköposti());
|
|
}
|
|
|
|
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.setLauantaiKpl(tfLauantai.getValue());
|
|
käsiteltäväAsiakas.setSunnuntaiKpl(tfSunnuntai.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.setDinnerMaanantaiKpl(tfDinnerMaanantai.getValue());
|
|
käsiteltäväAsiakas.setDinnerTiistaiKpl(tfDinnerTiistai.getValue());
|
|
käsiteltäväAsiakas.setDinnerKeskiviikkoKpl(tfDinnerKeskiviikko.getValue());
|
|
käsiteltäväAsiakas.setDinnerTorstaiKpl(tfDinnerTorstai.getValue());
|
|
käsiteltäväAsiakas.setDinnerPerjantaiKpl(tfDinnerPerjantai.getValue());
|
|
käsiteltäväAsiakas.setDinnerLauantaiKpl(tfDinnerLauantai.getValue());
|
|
käsiteltäväAsiakas.setDinnerSunnuntaiKpl(tfDinnerSunnuntai.getValue());
|
|
käsiteltäväAsiakas.setDinnerSalaatit(tfDinnerSalaatit.getValue());
|
|
käsiteltäväAsiakas.setDinnerPääruoat(tfDinnerPääruoat.getValue());
|
|
käsiteltäväAsiakas.setDinnerJälkiruoat(tfDinnerJä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());
|
|
käsiteltäväAsiakas.setYhteyshenkilönNimi(tfYhteyshenkilönNimi.getText());
|
|
käsiteltäväAsiakas.setLaskutusOsoite(tfLaskutusOsoite.getText());
|
|
käsiteltäväAsiakas.setYhteyshenkilönPuhelinnumero(tfYhteyshenkilönPuhelinnumero.getText());
|
|
käsiteltäväAsiakas.setYhteyshenkilönSähköposti(tfYhteyshenkilönSähköposti.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() +
|
|
käsiteltäväAsiakas.getLauantaiKpl() +
|
|
käsiteltäväAsiakas.getSunnuntaiKpl();
|
|
|
|
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
|
alert.setTitle("Onnistuimme!");
|
|
alert.setHeaderText("Asiakkaan tallentaminen onnistui!");
|
|
//TODO tähän myös dinneri määrät...
|
|
alert.setContentText(String.format("%s saa lounaalla 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);
|
|
}
|
|
|
|
private void kopioiLounasmäärätPäivälliselle() {
|
|
tfDinnerMaanantai.getValueFactory().setValue(tfMaanantai.getValue());
|
|
tfDinnerTiistai.getValueFactory().setValue(tfTiistai.getValue());
|
|
tfDinnerKeskiviikko.getValueFactory().setValue(tfKeskiviikko.getValue());
|
|
tfDinnerTorstai.getValueFactory().setValue(tfTorstai.getValue());
|
|
tfDinnerPerjantai.getValueFactory().setValue(tfPerjantai.getValue());
|
|
tfDinnerLauantai.getValueFactory().setValue(tfLauantai.getValue());
|
|
tfDinnerSunnuntai.getValueFactory().setValue(tfSunnuntai.getValue());
|
|
tfDinnerSalaatit.getValueFactory().setValue(tfSalaatit.getValue());
|
|
tfDinnerPääruoat.getValueFactory().setValue(tfPääruoat.getValue());
|
|
tfDinnerJälkiruoat.getValueFactory().setValue(tfJälkiruoat.getValue());
|
|
}
|
|
} |