diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..6a3623d
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:C:\Users\TheHy\Ohjelmointi\Ruokamanageri\testikanta.db
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml
deleted file mode 100644
index c79cc1a..0000000
--- a/.idea/db-forest-config.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- .
- ----------------------------------------
- 1:0:8c9f99af-23ef-4827-90d5-7f18c4b74bec
- 2:0:c8259506-eca1-4fc2-b380-a099ca4c8bb4
- .
-
-
\ No newline at end of file
diff --git a/TODO.txt b/TODO.txt
index 5428e18..dc46b69 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,5 +1 @@
-TODO Kuljetuslistalle lisää tilaa vasemmalle, jotta voi rei'ittää kansioon
-
-TODO kierroshallinnassa asiakasta raahattaessa placeholderin fiksaus
-
-TODO Asiakkaalle laskutusosoite
\ No newline at end of file
+TODO Kuljetuslistan luontiin riville nappi, josta nollata rivi/palauttaa oletuskuljetusmäärät
diff --git a/src/main/java/fi/lpam/dataluokat/Kuljetus.java b/src/main/java/fi/lpam/dataluokat/Kuljetus.java
index 3d97254..3a44a37 100644
--- a/src/main/java/fi/lpam/dataluokat/Kuljetus.java
+++ b/src/main/java/fi/lpam/dataluokat/Kuljetus.java
@@ -16,6 +16,21 @@ public class Kuljetus implements TietokantaOlio {
private int salaatit, pääruoat, jälkiruoat;
private String osoite, lisätieto, avainTieto, ruokarajoite;
+ public Kuljetus(Kuljetus vanha) {
+ this.id = vanha.id;
+ this.asiakasID = vanha.asiakasID;
+ this.nimi = vanha.nimi;
+ this.kuljetusPäivämäärä = vanha.kuljetusPäivämäärä;
+ this.kuljetusKierros = vanha.kuljetusKierros;
+ this.salaatit = vanha.salaatit;
+ this.pääruoat = vanha.pääruoat;
+ this.jälkiruoat = vanha.jälkiruoat;
+ this.osoite = vanha.osoite;
+ this.lisätieto = vanha.lisätieto;
+ this.avainTieto = vanha.avainTieto;
+ this.ruokarajoite = vanha.ruokarajoite;
+ }
+
public Kuljetus(Asiakas asiakas, LocalDate pvm, int kuljetusKierros) {
this.asiakasID = asiakas.getId();
this.nimi = asiakas.getNimi();
@@ -268,6 +283,31 @@ public class Kuljetus implements TietokantaOlio {
'}';
}
+ public void nollaa() {
+ setSalaatit(0);
+ setPääruoat(0);
+ setJälkiruoat(0);
+ setLisätieto("");
+ }
+
+ public void palautaMäärät(Asiakas asiakas) {
+ int kuljetusKerroin = switch (kuljetusPäivämäärä.getDayOfWeek()) {
+ case MONDAY -> asiakas.getMaanantaiKpl();
+ case TUESDAY -> asiakas.getTiistaiKpl();
+ case WEDNESDAY -> asiakas.getKeskiviikkoKpl();
+ case THURSDAY -> asiakas.getTorstaiKpl();
+ case FRIDAY -> asiakas.getPerjantaiKpl();
+ default -> 0;
+ };
+ setSalaatit(asiakas.getSalaatit() * kuljetusKerroin);
+ setPääruoat(asiakas.getPääruoat() * kuljetusKerroin);
+ setJälkiruoat(asiakas.getJälkiruoat() * kuljetusKerroin);
+ setLisätieto(asiakas.getLisätiedot());
+ }
+
+ public boolean kuljetetaan() {
+ return salaatit > 0 || pääruoat > 0 || jälkiruoat > 0 || !lisätieto.isEmpty();
+ }
public int getId() {
return id;
}
diff --git a/src/main/java/fi/lpam/gui/Asiakashallinta.java b/src/main/java/fi/lpam/gui/Asiakashallinta.java
index 72d308a..bcd2154 100644
--- a/src/main/java/fi/lpam/gui/Asiakashallinta.java
+++ b/src/main/java/fi/lpam/gui/Asiakashallinta.java
@@ -141,7 +141,7 @@ public class Asiakashallinta extends TabPohja {
if (valittuAsiakas != null) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Oletko varma?");
- alert.setHeaderText("Poistetaanko valittu valittu asiakas?");
+ alert.setHeaderText("Poistetaanko valittu asiakas?");
alert.setContentText(valittuAsiakas.getNimi());
Optional result = alert.showAndWait();
if (result.isPresent() && result.get() == ButtonType.OK) {
diff --git a/src/main/java/fi/lpam/gui/KuljetusListat.java b/src/main/java/fi/lpam/gui/KuljetusListat.java
index 012d909..0639a07 100644
--- a/src/main/java/fi/lpam/gui/KuljetusListat.java
+++ b/src/main/java/fi/lpam/gui/KuljetusListat.java
@@ -3,10 +3,12 @@ package fi.lpam.gui;
import fi.lpam.dataluokat.Asiakas;
import fi.lpam.dataluokat.Kierros;
import fi.lpam.dataluokat.Kuljetus;
+import fi.lpam.gui.elementit.KuljetaTableCell;
import fi.lpam.tulostajat.KuljetusListaTulostaja;
import fi.lpam.gui.elementit.MaaraTableColumn;
import fi.lpam.gui.elementit.TabPohja;
+import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
@@ -19,6 +21,7 @@ import javafx.scene.layout.HBox;
import java.time.LocalDate;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
@@ -28,14 +31,19 @@ public class KuljetusListat extends TabPohja {
private final TableView tableView = new TableView<>();
private final DatePicker datePicker = new DatePicker(LocalDate.now());
private final ComboBox kierrosValinta = new ComboBox<>(FXCollections.observableArrayList(Kierros.haeKierrosNumerot()));
- private final Label tallennusStatus;
+ public static Label tallennusStatus;
private final Button btnTulosta;
+ private final HashMap asiakkaat = new HashMap<>();
public KuljetusListat() {
ObservableList määräVaihtoehdot = FXCollections.observableArrayList();
for (int i = 0; i <= 10; i++) {
määräVaihtoehdot.add(i);}
+ for (Asiakas asiakas : Objects.requireNonNull(Asiakas.haeKaikki())) {
+ asiakkaat.put(asiakas.getId(), asiakas);
+ }
+
BorderPane root = new BorderPane();
root.setPadding(oletusInsets);
this.getChildren().add(root);
@@ -83,6 +91,11 @@ public class KuljetusListat extends TabPohja {
tableView.setPlaceholder(new Label("Valitse kierros aloittaaksesi"));
root.setCenter(tableView);
+ TableColumn tcNappi = new TableColumn<>("Kuljeta");
+ tcNappi.setMinWidth(100);
+ tcNappi.setCellFactory(_ -> new KuljetaTableCell(asiakkaat));
+ tcNappi.setCellValueFactory(features -> new SimpleBooleanProperty(features.getValue() != null));
+
TableColumn tcNimi = new TableColumn<>("Nimi");
tcNimi.setMinWidth(150);
tcNimi.setCellFactory(TextFieldTableCell.forTableColumn());
@@ -128,7 +141,7 @@ public class KuljetusListat extends TabPohja {
tcAvainTieto.setCellValueFactory(new PropertyValueFactory<>("avainTieto"));
tcAvainTieto.setOnEditCommit((TableColumn.CellEditEvent event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setAvainTieto(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
- tableView.getColumns().addAll(tcNimi, tcOsoite, tcSalaatit, tcPääruoat, tcJälkiruoat, tcRuokarajoite, tcLisätieto, tcAvainTieto);
+ tableView.getColumns().addAll(tcNappi, tcNimi, tcOsoite, tcSalaatit, tcPääruoat, tcJälkiruoat, tcRuokarajoite, tcLisätieto, tcAvainTieto);
for (TableColumn sarake : tableView.getColumns()) {
sarake.setSortable(false);
@@ -136,6 +149,8 @@ public class KuljetusListat extends TabPohja {
sarake.setResizable(true);
sarake.setStyle("-fx-alignment: CENTER; -fx-font-size: 16px;");
}
+ tcNimi.setEditable(false);
+ tcNimi.setResizable(false);
}
private void päivitäListanäkymä() {
diff --git a/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java b/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java
new file mode 100644
index 0000000..8cc37bc
--- /dev/null
+++ b/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java
@@ -0,0 +1,45 @@
+package fi.lpam.gui.elementit;
+
+import fi.lpam.dataluokat.Asiakas;
+import fi.lpam.dataluokat.Kuljetus;
+import fi.lpam.gui.KuljetusListat;
+import javafx.geometry.Insets;
+import javafx.scene.control.Button;
+import javafx.scene.control.ContentDisplay;
+import javafx.scene.control.TableCell;
+import javafx.scene.layout.StackPane;
+
+import java.util.HashMap;
+
+public class KuljetaTableCell extends TableCell {
+ private final StackPane paddedNappi = new StackPane();
+
+ public KuljetaTableCell(HashMap asiakkaat) {
+ paddedNappi.setPadding(new Insets(3));
+ Button nappi = new Button("Muuta");
+ paddedNappi.getChildren().add(nappi);
+ nappi.setOnMouseClicked(_ -> {
+ getTableView().getSelectionModel().select(getIndex());
+ Kuljetus kuljetus = getTableRow().getItem();
+
+ if (kuljetus == null) return;
+ if (kuljetus.kuljetetaan()) {
+ kuljetus.nollaa();
+ } else {
+ kuljetus.palautaMäärät(asiakkaat.get(kuljetus.getAsiakasID()));
+ }
+ getTableRow().setItem(new Kuljetus(kuljetus));
+ KuljetusListat.tallennusStatus.setText("Tallennettu: Ei");
+ });
+ }
+
+ @Override protected void updateItem(Boolean item, boolean empty) {
+ super.updateItem(item, empty);
+ if (!empty) {
+ setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
+ setGraphic(paddedNappi);
+ } else {
+ setGraphic(null);
+ }
+ }
+}