Lisätty issue #2 listatut ominaisuudet

Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
This commit is contained in:
2026-05-08 16:38:43 +03:00
parent 997833611c
commit 91d2a35799
9 changed files with 205 additions and 132 deletions
@@ -22,7 +22,7 @@ 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, tfSalaatit, tfPääruoat, tfJälkiruoat;
final IntegerSpinner tfMaanantai, tfTiistai, tfKeskiviikko, tfTorstai, tfPerjantai, tfLauantai, tfSunnuntai, tfSalaatit, tfPääruoat, tfJälkiruoat;
/**
* Luo ikkunan jossa muokataan saatua asiakasta
@@ -46,22 +46,82 @@ public class AsiakasIkkuna extends Stage {
default: break;
}});
Tab tabAsiakasTiedot, tabLaskutusTiedot;
tabAsiakasTiedot = new Tab("Asiakastiedot");
tabLaskutusTiedot = new Tab("Laskutustiedot");
tabPane.getTabs().addAll(tabAsiakasTiedot, tabLaskutusTiedot);
Tab tabKuljetusTiedot, tabAsiakastiedot;
tabKuljetusTiedot = new Tab("Kuljetustiedot");
tabAsiakastiedot = new Tab("Asiakastiedot");
tabPane.getTabs().addAll(tabKuljetusTiedot, tabAsiakastiedot);
for (Tab tab : tabPane.getTabs()) {
tab.setClosable(false);
tab.setStyle("-fx-font-size: 18px; -fx-font-weight: bold; -fx-font-family: Open Sans");
}
GridPane kuljetusTiedot = new GridPane();
kuljetusTiedot.setPadding(new Insets(15));
kuljetusTiedot.setHgap(10);
kuljetusTiedot.setVgap(10);
tabKuljetusTiedot.setContent(kuljetusTiedot);
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), new Label("Määrät per kuljetus"));
Label salaatit = new Label("Salaatit");
tfSalaatit = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), salaatit, tfSalaatit);
Label pääruoat = new Label("Pääruoat");
tfPääruoat = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), pääruoat, tfPääruoat);
Label jälkiruoat = new Label("Jälkiruoat");
tfJälkiruoat = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), jälkiruoat, tfJälkiruoat);
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), new Label("Kuljetukset per päivä"));
Label maanantai = new Label("Maanantai");
tfMaanantai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), maanantai, tfMaanantai);
Label tiistai = new Label("Tiistai");
tfTiistai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), tiistai, tfTiistai);
Label keskiviikko = new Label("Keskiviikko");
tfKeskiviikko = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), keskiviikko, tfKeskiviikko);
Label torstai = new Label("Torstai");
tfTorstai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), torstai, tfTorstai);
Label perjantai = new Label("Perjantai");
tfPerjantai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), perjantai, tfPerjantai);
tfLauantai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), new Label("Lauantai"), tfLauantai);
tfSunnuntai = new IntegerSpinner();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), new Label("Sunnuntai"), tfSunnuntai);
Label ruokarajoitteet = new Label("Ruokarajoitteet");
tfRuokarajoitteet = new TextField();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), ruokarajoitteet, tfRuokarajoitteet);
Label avainTieto = new Label("Avaintieto");
tfAvainTieto = new TextField();
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), avainTieto, tfAvainTieto);
Label lisätiedot = new Label("Kuljetuksen lisätiedot");
tfLisätiedot = new TextField();
tfLisätiedot.setPromptText("Näkyy raporteilla");
kuljetusTiedot.addRow(kuljetusTiedot.getRowCount(), lisätiedot, tfLisätiedot);
GridPane asiakasTiedot = new GridPane();
asiakasTiedot.setPadding(new Insets(15));
asiakasTiedot.setHgap(10);
asiakasTiedot.setVgap(10);
tabAsiakasTiedot.setContent(asiakasTiedot);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), new Label("Vahvistetut kentät pakollisia"));
tabAsiakastiedot.setContent(asiakasTiedot);
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
nimi.setStyle("-fx-font-weight: bold;");
@@ -75,77 +135,21 @@ public class AsiakasIkkuna extends Stage {
tfOsoite.setPromptText("Pakollinen tieto");
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), osoite, tfOsoite);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), new Label("Määrät per kuljetus"));
Label salaatit = new Label("Salaatit");
tfSalaatit = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), salaatit, tfSalaatit);
Label pääruoat = new Label("Pääruoat");
tfPääruoat = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), pääruoat, tfPääruoat);
Label jälkiruoat = new Label("Jälkiruoat");
tfJälkiruoat = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), jälkiruoat, tfJälkiruoat);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), new Label("Kuljetukset per päivä"));
Label maanantai = new Label("Maanantai");
tfMaanantai = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), maanantai, tfMaanantai);
Label tiistai = new Label("Tiistai");
tfTiistai = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), tiistai, tfTiistai);
Label keskiviikko = new Label("Keskiviikko");
tfKeskiviikko = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), keskiviikko, tfKeskiviikko);
Label torstai = new Label("Torstai");
tfTorstai = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), torstai, tfTorstai);
Label perjantai = new Label("Perjantai");
tfPerjantai = new IntegerSpinner();
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), perjantai, tfPerjantai);
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);
GridPane laskutusTiedot = new GridPane();
laskutusTiedot.setPadding(new Insets(15));
laskutusTiedot.setHgap(10);
laskutusTiedot.setVgap(10);
tabLaskutusTiedot.setContent(laskutusTiedot);
Label yhteyshenkilönNimi = new Label("Yhteyshenkilön etu- ja sukunimi");
tfYhteyshenkilönNimi = new TextField();
laskutusTiedot.addRow(laskutusTiedot.getRowCount(), yhteyshenkilönNimi, tfYhteyshenkilönNimi);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönNimi, tfYhteyshenkilönNimi);
Label laskutusOsoite = new Label("Laskutusosoite");
tfLaskutusOsoite = new TextField();
laskutusTiedot.addRow(laskutusTiedot.getRowCount(), laskutusOsoite, tfLaskutusOsoite);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), laskutusOsoite, tfLaskutusOsoite);
Label yhteyshenkilönPuhelinnumero = new Label("Puhelinnumero");
tfYhteyshenkilönPuhelinnumero = new TextField();
laskutusTiedot.addRow(laskutusTiedot.getRowCount(), yhteyshenkilönPuhelinnumero, tfYhteyshenkilönPuhelinnumero);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönPuhelinnumero, tfYhteyshenkilönPuhelinnumero);
Label yhteyshenkilönSähköposti = new Label("Sähköposti");
tfYhteyshenkilönSähköposti = new TextField();
laskutusTiedot.addRow(laskutusTiedot.getRowCount(), yhteyshenkilönSähköposti, tfYhteyshenkilönSähköposti);
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönSähköposti, tfYhteyshenkilönSähköposti);
HBox napit = new HBox();
Button peruuta = new Button("Peruuta");
@@ -185,6 +189,8 @@ public class AsiakasIkkuna extends Stage {
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());
@@ -218,6 +224,8 @@ public class AsiakasIkkuna extends Stage {
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());
@@ -246,7 +254,14 @@ public class AsiakasIkkuna extends Stage {
}
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();
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!");
@@ -88,25 +88,30 @@ public class Asiakashallinta extends TabPohja {
tcOsoite.setMinWidth(250);
tcOsoite.setCellValueFactory(new PropertyValueFactory<>("osoite"));
int minWidth = 40;
TableColumn<Asiakas, MaaraTableColumn<Asiakas, Integer>> tcKuljetuspäivät = new TableColumn<>("Kuljetukset per päivä");
MaaraTableColumn<Asiakas, Integer> tcMaanantaiKpl = new MaaraTableColumn<>("MA", 20);
MaaraTableColumn<Asiakas, Integer> tcMaanantaiKpl = new MaaraTableColumn<>("MA", minWidth);
tcMaanantaiKpl.setCellValueFactory(new PropertyValueFactory<>("maanantaiKpl"));
MaaraTableColumn<Asiakas, Integer> tcTiistaiKpl = new MaaraTableColumn<>("TI", 20);
MaaraTableColumn<Asiakas, Integer> tcTiistaiKpl = new MaaraTableColumn<>("TI", minWidth);
tcTiistaiKpl.setCellValueFactory(new PropertyValueFactory<>("tiistaiKpl"));
MaaraTableColumn<Asiakas, Integer> tcKeskiviikkoKpl = new MaaraTableColumn<>("KE", 20);
MaaraTableColumn<Asiakas, Integer> tcKeskiviikkoKpl = new MaaraTableColumn<>("KE", minWidth);
tcKeskiviikkoKpl.setCellValueFactory(new PropertyValueFactory<>("keskiviikkoKpl"));
MaaraTableColumn<Asiakas, Integer> tcTorstaiKpl = new MaaraTableColumn<>("TO", 20);
MaaraTableColumn<Asiakas, Integer> tcTorstaiKpl = new MaaraTableColumn<>("TO", minWidth);
tcTorstaiKpl.setCellValueFactory(new PropertyValueFactory<>("torstaiKpl"));
MaaraTableColumn<Asiakas, Integer> tcPerjantaiKpl = new MaaraTableColumn<>("PE", 20);
MaaraTableColumn<Asiakas, Integer> tcPerjantaiKpl = new MaaraTableColumn<>("PE", minWidth);
tcPerjantaiKpl.setCellValueFactory(new PropertyValueFactory<>("perjantaiKpl"));
tcKuljetuspäivät.getColumns().addAll(tcMaanantaiKpl, tcTiistaiKpl, tcKeskiviikkoKpl, tcTorstaiKpl, tcPerjantaiKpl);
MaaraTableColumn<Asiakas, Integer> tcLauantaiKpl = new MaaraTableColumn<>("LA", minWidth);
tcLauantaiKpl.setCellValueFactory(new PropertyValueFactory<>("lauantaiKpl"));
MaaraTableColumn<Asiakas, Integer> tcSunnuntaiKpl = new MaaraTableColumn<>("SU", minWidth);
tcSunnuntaiKpl.setCellValueFactory(new PropertyValueFactory<>("sunnuntaiKpl"));
tcKuljetuspäivät.getColumns().addAll(tcMaanantaiKpl, tcTiistaiKpl, tcKeskiviikkoKpl, tcTorstaiKpl, tcPerjantaiKpl, tcLauantaiKpl, tcSunnuntaiKpl);
TableColumn<Asiakas, MaaraTableColumn<Asiakas, Integer>> tcKuljetusmäärät = new TableColumn<>("Määrät per kuljetus");
MaaraTableColumn<Asiakas, Integer> tcSalaatit = new MaaraTableColumn<>("Salaatit", 90);
MaaraTableColumn<Asiakas, Integer> tcSalaatit = new MaaraTableColumn<>("Salaatit", 80);
tcSalaatit.setCellValueFactory(new PropertyValueFactory<>("salaatit"));
MaaraTableColumn<Asiakas, Integer> tcPääruoat = new MaaraTableColumn<>("Pääruoat", 90);
MaaraTableColumn<Asiakas, Integer> tcPääruoat = new MaaraTableColumn<>("Pääruoat", 80);
tcPääruoat.setCellValueFactory(new PropertyValueFactory<>("pääruoat"));
MaaraTableColumn<Asiakas, Integer> tcJälkiruoat = new MaaraTableColumn<>("Jälkiruoat", 90);
MaaraTableColumn<Asiakas, Integer> tcJälkiruoat = new MaaraTableColumn<>("Jälkiruoat", 80);
tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat"));
tcKuljetusmäärät.getColumns().addAll(tcSalaatit, tcPääruoat, tcJälkiruoat);
@@ -4,11 +4,8 @@ import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
public class IntegerSpinner extends Spinner<Integer> {
/**
* Min 0, Max 50
*/
public IntegerSpinner() {
super(new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 50));
super(new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 500));
this.setEditable(true);
}
}
@@ -1,12 +1,23 @@
package fi.lpam.ruokamanageri.gui.elementit;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;
public class MaaraTableColumn<Asiakas, Integer> extends TableColumn<Asiakas, Integer> {
public MaaraTableColumn(String columnLabel, int minWidth) {
public MaaraTableColumn(String columnLabel, int width) {
super(columnLabel);
this.setResizable(false);
this.setReorderable(false);
this.setMinWidth(width);
this.setMaxWidth(width);
}
public MaaraTableColumn(String columnLabel, int minWidth, int maxWidth) {
super(columnLabel);
this.setResizable(false);
this.setReorderable(false);
this.setMinWidth(minWidth);
this.setMaxWidth(maxWidth);
}
}