Compare commits
9 Commits
a6ea5890a1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 00267ebe72 | |||
| 05d124ac55 | |||
| 2ed9f81f75 | |||
| ebd76ab728 | |||
| c8b0ae911a | |||
| f192efda05 | |||
| 127c9d671b | |||
| 0634e8a13b | |||
| 15c935d6b7 |
@@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>fi.lpam.ruokamanageri</groupId>
|
<groupId>fi.lpam.ruokamanageri</groupId>
|
||||||
<artifactId>Ruokamanageri</artifactId>
|
<artifactId>Ruokamanageri</artifactId>
|
||||||
<version>3.2.1</version>
|
<version>4.1.0</version>
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.source>25</maven.compiler.source>
|
<maven.compiler.source>25</maven.compiler.source>
|
||||||
|
|||||||
@@ -96,9 +96,9 @@ public class RaporttiRivi {
|
|||||||
select kuljetukset.asiakasID,
|
select kuljetukset.asiakasID,
|
||||||
kuljetukset.nimi,
|
kuljetukset.nimi,
|
||||||
kuljetukset.kuljetusPäivämäärä,
|
kuljetukset.kuljetusPäivämäärä,
|
||||||
sum(kuljetukset.salaatit) as salaatit,
|
sum(kuljetukset.salaatit),
|
||||||
sum(kuljetukset.pääruoat) as pääruoat,
|
sum(kuljetukset.pääruoat),
|
||||||
sum(kuljetukset.jälkiruoat) as jälkiruoat,
|
sum(kuljetukset.jälkiruoat),
|
||||||
group_concat(kuljetukset.lisätieto, ?),
|
group_concat(kuljetukset.lisätieto, ?),
|
||||||
asiakkaat.yhteyshenkilönNimi,
|
asiakkaat.yhteyshenkilönNimi,
|
||||||
asiakkaat.laskutusosoite,
|
asiakkaat.laskutusosoite,
|
||||||
@@ -109,7 +109,7 @@ public class RaporttiRivi {
|
|||||||
from kuljetukset
|
from kuljetukset
|
||||||
left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id
|
left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id
|
||||||
where (kuljetusPäivämäärä between ? and ?) and (kuljetukset.salaatit > 0 or kuljetukset.pääruoat > 0 or kuljetukset.jälkiruoat > 0 or LENGTH(kuljetukset.lisätieto) > 3)
|
where (kuljetusPäivämäärä between ? and ?) and (kuljetukset.salaatit > 0 or kuljetukset.pääruoat > 0 or kuljetukset.jälkiruoat > 0 or LENGTH(kuljetukset.lisätieto) > 3)
|
||||||
group by kuljetukset.nimi, kuljetukset.tyyppi
|
group by kuljetukset.asiakasID, kuljetukset.tyyppi
|
||||||
order by asiakkaat.yhteyshenkilönNimi DESC, kuljetukset.nimi, kuljetukset.kuljetusPäivämäärä, kuljetukset.tyyppi
|
order by asiakkaat.yhteyshenkilönNimi DESC, kuljetukset.nimi, kuljetukset.kuljetusPäivämäärä, kuljetukset.tyyppi
|
||||||
""");
|
""");
|
||||||
stmt.setString(1, "\n");
|
stmt.setString(1, "\n");
|
||||||
|
|||||||
@@ -38,31 +38,19 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
this.setTitle("Uusi asiakas");
|
this.setTitle("Uusi asiakas");
|
||||||
}
|
}
|
||||||
|
|
||||||
TabPane tabPane = new TabPane();
|
HBox hbTiedot = new HBox();
|
||||||
tabPane.setSide(Side.LEFT);
|
hbTiedot.setOnKeyPressed(e -> {
|
||||||
int korkeus = 150;
|
|
||||||
tabPane.setTabMinWidth(korkeus);
|
|
||||||
tabPane.setTabMinWidth(korkeus);
|
|
||||||
tabPane.setTabMinHeight(35);
|
|
||||||
tabPane.setTabMaxHeight(35);
|
|
||||||
tabPane.setOnKeyPressed(e -> {
|
|
||||||
switch (e.getCode()) {
|
switch (e.getCode()) {
|
||||||
case ENTER: tallenna(); break;
|
case ENTER: tallenna(); break;
|
||||||
case ESCAPE: close(); break;
|
case ESCAPE: close(); break;
|
||||||
default: break;
|
default: break;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
Tab tabLounastiedot, tabPäivällistiedot, tabAsiakastiedot;
|
|
||||||
tabLounastiedot = new TabPohja("Kuljetustiedot");
|
|
||||||
tabPäivällistiedot = new TabPohja("Päivällistiedot");
|
|
||||||
tabAsiakastiedot = new TabPohja("Asiakastiedot");
|
|
||||||
tabPane.getTabs().addAll(tabLounastiedot, tabPäivällistiedot, tabAsiakastiedot);
|
|
||||||
|
|
||||||
GridPane lounasTiedot = new GridPane();
|
GridPane lounasTiedot = new GridPane();
|
||||||
lounasTiedot.setPadding(new Insets(15));
|
lounasTiedot.setPadding(new Insets(15));
|
||||||
lounasTiedot.setHgap(10);
|
lounasTiedot.setHgap(10);
|
||||||
lounasTiedot.setVgap(10);
|
lounasTiedot.setVgap(10);
|
||||||
tabLounastiedot.setContent(lounasTiedot);
|
|
||||||
|
|
||||||
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lounaat per kuljetus"));
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lounaat per kuljetus"));
|
||||||
|
|
||||||
@@ -106,27 +94,16 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
tfSunnuntai = new IntegerSpinner();
|
tfSunnuntai = new IntegerSpinner();
|
||||||
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Sunnuntai"), tfSunnuntai);
|
lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Sunnuntai"), tfSunnuntai);
|
||||||
|
|
||||||
Label ruokarajoitteet = new Label("Ruokarajoitteet");
|
|
||||||
tfRuokarajoitteet = new TextField();
|
|
||||||
lounasTiedot.addRow(lounasTiedot.getRowCount(), ruokarajoitteet, tfRuokarajoitteet);
|
|
||||||
|
|
||||||
Label avainTieto = new Label("Avaintieto");
|
|
||||||
tfAvainTieto = new TextField();
|
|
||||||
lounasTiedot.addRow(lounasTiedot.getRowCount(), avainTieto, tfAvainTieto);
|
|
||||||
|
|
||||||
Label lisätiedot = new Label("Kuljetuksen lisätiedot");
|
|
||||||
tfLisätiedot = new TextField();
|
|
||||||
tfLisätiedot.setPromptText("Näkyy raporteilla");
|
|
||||||
lounasTiedot.addRow(lounasTiedot.getRowCount(), lisätiedot, tfLisätiedot);
|
|
||||||
|
|
||||||
|
|
||||||
GridPane päivällisTiedot = new GridPane();
|
GridPane päivällisTiedot = new GridPane();
|
||||||
päivällisTiedot.setPadding(new Insets(15));
|
päivällisTiedot.setPadding(new Insets(15));
|
||||||
päivällisTiedot.setHgap(10);
|
päivällisTiedot.setHgap(10);
|
||||||
päivällisTiedot.setVgap(10);
|
päivällisTiedot.setVgap(10);
|
||||||
tabPäivällistiedot.setContent(päivällisTiedot);
|
|
||||||
|
|
||||||
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Päivälliset per kuljetus"));
|
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();
|
tfDinnerSalaatit = new IntegerSpinner();
|
||||||
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Salaatit"), tfDinnerSalaatit);
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Salaatit"), tfDinnerSalaatit);
|
||||||
@@ -160,11 +137,12 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
tfDinnerSunnuntai = new IntegerSpinner();
|
tfDinnerSunnuntai = new IntegerSpinner();
|
||||||
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Sunnuntai"), tfDinnerSunnuntai);
|
päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Sunnuntai"), tfDinnerSunnuntai);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GridPane asiakasTiedot = new GridPane();
|
GridPane asiakasTiedot = new GridPane();
|
||||||
asiakasTiedot.setPadding(new Insets(15));
|
asiakasTiedot.setPadding(new Insets(15));
|
||||||
asiakasTiedot.setHgap(10);
|
asiakasTiedot.setHgap(10);
|
||||||
asiakasTiedot.setVgap(10);
|
asiakasTiedot.setVgap(10);
|
||||||
tabAsiakastiedot.setContent(asiakasTiedot);
|
|
||||||
|
|
||||||
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
|
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
|
||||||
nimi.setStyle("-fx-font-weight: bold;");
|
nimi.setStyle("-fx-font-weight: bold;");
|
||||||
@@ -194,6 +172,22 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
tfYhteyshenkilönSähköposti = new TextField();
|
tfYhteyshenkilönSähköposti = new TextField();
|
||||||
asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönSähköposti, tfYhteyshenkilönSähköposti);
|
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();
|
HBox napit = new HBox();
|
||||||
Button peruuta = new Button("Peruuta");
|
Button peruuta = new Button("Peruuta");
|
||||||
peruuta.setFont(TabPohja.BUTTON_FONT);
|
peruuta.setFont(TabPohja.BUTTON_FONT);
|
||||||
@@ -208,7 +202,7 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
|
|
||||||
|
|
||||||
VBox root = new VBox();
|
VBox root = new VBox();
|
||||||
root.getChildren().addAll(tabPane, napit);
|
root.getChildren().addAll(hbTiedot, napit);
|
||||||
this.setScene(new Scene(root));
|
this.setScene(new Scene(root));
|
||||||
this.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg"))));
|
this.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("kuljetusruokalaatikko.jpg"))));
|
||||||
this.setAlwaysOnTop(true);
|
this.setAlwaysOnTop(true);
|
||||||
@@ -330,11 +324,24 @@ public class AsiakasIkkuna extends Stage {
|
|||||||
alert.setTitle("Onnistuimme!");
|
alert.setTitle("Onnistuimme!");
|
||||||
alert.setHeaderText("Asiakkaan tallentaminen onnistui!");
|
alert.setHeaderText("Asiakkaan tallentaminen onnistui!");
|
||||||
//TODO tähän myös dinneri määrät...
|
//TODO tähän myös dinneri määrät...
|
||||||
// alert.setContentText(String.format("%s saa jatkossa yhteensä \n%s salaattia, %s pääruokaa ja %s jälkiruokaa viikossa",
|
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));
|
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();
|
alert.showAndWait();
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
this.setAlwaysOnTop(true);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
package fi.lpam.gui;
|
package fi.lpam.gui;
|
||||||
|
|
||||||
import fi.lpam.Main;
|
|
||||||
import fi.lpam.dataluokat.Asiakas;
|
import fi.lpam.dataluokat.Asiakas;
|
||||||
import fi.lpam.gui.elementit.FontLabel;
|
import fi.lpam.gui.elementit.FontLabel;
|
||||||
import fi.lpam.gui.elementit.MaaraTableColumn;
|
|
||||||
import fi.lpam.gui.elementit.TabPohja;
|
import fi.lpam.gui.elementit.TabPohja;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
@@ -97,7 +95,7 @@ public class Asiakashallinta extends TabPohja {
|
|||||||
TableColumn<Asiakas, String> tcYhteyshenkilönSähköposti = new TableColumn<>("Yhteyshenkilön sähköposti");
|
TableColumn<Asiakas, String> tcYhteyshenkilönSähköposti = new TableColumn<>("Yhteyshenkilön sähköposti");
|
||||||
tcYhteyshenkilönSähköposti.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönSähköposti"));
|
tcYhteyshenkilönSähköposti.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönSähköposti"));
|
||||||
|
|
||||||
tvAsiakkaat.getColumns().addAll(tcId, tcNimi, tcOsoite, tcKuljetuspäivät, tcKuljetusmäärät, tcErityisruokavalio, tcAvainTieto, tcLisätiedot, tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti);
|
tvAsiakkaat.getColumns().addAll(tcId, tcNimi, tcOsoite, tcErityisruokavalio, tcAvainTieto, tcLisätiedot, tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti);
|
||||||
|
|
||||||
for (TableColumn<Asiakas, ?> column : tvAsiakkaat.getColumns()) {
|
for (TableColumn<Asiakas, ?> column : tvAsiakkaat.getColumns()) {
|
||||||
column.getColumns().forEach(this::määritäColumn);
|
column.getColumns().forEach(this::määritäColumn);
|
||||||
@@ -191,10 +189,6 @@ public class Asiakashallinta extends TabPohja {
|
|||||||
column.setEditable(false);
|
column.setEditable(false);
|
||||||
column.setReorderable(false);
|
column.setReorderable(false);
|
||||||
column.setResizable(true);
|
column.setResizable(true);
|
||||||
column.setStyle(
|
column.setStyle(TV_COLUMN_STYLE);
|
||||||
"-fx-alignment: CENTER;" +
|
|
||||||
"-fx-font-size: " + Main.properties.getProperty("tekstiFonttiKoko") + "px;" +
|
|
||||||
"-fx-font-family: " + Main.properties.getProperty("tekstiFontti")
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,10 +143,7 @@ public class KuljetusListat extends TabPohja {
|
|||||||
sarake.setSortable(false);
|
sarake.setSortable(false);
|
||||||
sarake.setEditable(true);
|
sarake.setEditable(true);
|
||||||
sarake.setResizable(true);
|
sarake.setResizable(true);
|
||||||
sarake.setStyle(
|
sarake.setStyle(TV_COLUMN_STYLE);
|
||||||
"-fx-alignment: CENTER;" +
|
|
||||||
"-fx-font-size: " + Main.properties.getProperty("tekstiFonttiKoko") + "px;" +
|
|
||||||
"-fx-font-family: " + Main.properties.getProperty("tekstiFontti"));
|
|
||||||
}
|
}
|
||||||
tcNimi.setEditable(false);
|
tcNimi.setEditable(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,10 +123,7 @@ public class KuljetusRaportit extends TabPohja {
|
|||||||
for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) {
|
for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) {
|
||||||
sarake.setEditable(false);
|
sarake.setEditable(false);
|
||||||
sarake.setResizable(true);
|
sarake.setResizable(true);
|
||||||
sarake.setStyle(
|
sarake.setStyle(TV_COLUMN_STYLE);
|
||||||
"-fx-alignment: CENTER;" +
|
|
||||||
"-fx-font-size: " + Main.properties.getProperty("tekstiFonttiKoko") + "px;" +
|
|
||||||
"-fx-font-family: " + Main.properties.getProperty("tekstiFontti"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,7 @@ public class TabPohja extends Tab {
|
|||||||
public static Insets INSETS;
|
public static Insets INSETS;
|
||||||
public static Border BORDER = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT));
|
public static Border BORDER = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT));
|
||||||
public static String STYLE;
|
public static String STYLE;
|
||||||
|
public static String TV_COLUMN_STYLE;
|
||||||
public static Font BUTTON_FONT;
|
public static Font BUTTON_FONT;
|
||||||
public static Font TEKSTI_FONT;
|
public static Font TEKSTI_FONT;
|
||||||
public static double SPACING;
|
public static double SPACING;
|
||||||
@@ -29,6 +30,10 @@ public class TabPohja extends Tab {
|
|||||||
INSETS = new Insets(Double.parseDouble(prop.getProperty("insets")));
|
INSETS = new Insets(Double.parseDouble(prop.getProperty("insets")));
|
||||||
SPACING = Double.parseDouble(prop.getProperty("insets"));
|
SPACING = Double.parseDouble(prop.getProperty("insets"));
|
||||||
STYLE = "-fx-background-color: " + prop.getProperty("taustaVari");
|
STYLE = "-fx-background-color: " + prop.getProperty("taustaVari");
|
||||||
|
TV_COLUMN_STYLE =
|
||||||
|
"-fx-alignment: CENTER;" +
|
||||||
|
"-fx-font-size: " + Main.properties.getProperty("tekstiFonttiKoko") + "px;" +
|
||||||
|
"-fx-font-family: " + Main.properties.getProperty("tekstiFontti");
|
||||||
BUTTON_FONT = Font.font(prop.getProperty("buttonFontti"), FontWeight.BOLD, Double.parseDouble(prop.getProperty("buttonFonttiKoko")));
|
BUTTON_FONT = Font.font(prop.getProperty("buttonFontti"), FontWeight.BOLD, Double.parseDouble(prop.getProperty("buttonFonttiKoko")));
|
||||||
TEKSTI_FONT = Font.font(prop.getProperty("tekstiFontti"), FontWeight.NORMAL, Double.parseDouble(prop.getProperty("tekstiFonttiKoko")));
|
TEKSTI_FONT = Font.font(prop.getProperty("tekstiFontti"), FontWeight.NORMAL, Double.parseDouble(prop.getProperty("tekstiFonttiKoko")));
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class KuljetusListaTulostaja extends Tulostaja{
|
|||||||
|
|
||||||
public void luoKuljetusLista(ObservableList<Kuljetus> kuljetukset, int kierrosnumero) {
|
public void luoKuljetusLista(ObservableList<Kuljetus> kuljetukset, int kierrosnumero) {
|
||||||
try {
|
try {
|
||||||
sisältö.showText(kuljetukset.getFirst().getKuljetusPäivämäärä().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + ", kierros: " + kierrosnumero);
|
sisältö.showText(kuljetukset.getFirst().getKuljetusPäivämäärä().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + ", kierros " + kierrosnumero + " " + kuljetukset.getFirst().getTyyppi());
|
||||||
uusiRivi();
|
uusiRivi();
|
||||||
|
|
||||||
for (Kuljetus kuljetus : kuljetukset) {
|
for (Kuljetus kuljetus : kuljetukset) {
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
# 4.1.0
|
||||||
|
- Asiakasikkunaan nappi, jolla voi kopioida lounasmäärät päivälliselle
|
||||||
|
- Asiakasikkunan uudelleenjärjestely
|
||||||
|
|
||||||
|
# 4.0.0
|
||||||
|
- Kuljetuslistoista luodaan lounas- ja päivällislistat erikseen
|
||||||
|
- Kuljetuslistalla asiakkaan nimeä ei voi enään muokata
|
||||||
|
|
||||||
# 3.2.1
|
# 3.2.1
|
||||||
- Asiakkaan erityisruokavalio osaksi raporttia
|
- Asiakkaan erityisruokavalio osaksi raporttia
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user