From 3fbd316fdcc91aaad748de39300d69da0c19bc94 Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Thu, 9 Apr 2026 20:27:14 +0300 Subject: [PATCH] =?UTF-8?q?Luotu=20sarake=20n=C3=A4kym=C3=A4=C3=A4n=20ja?= =?UTF-8?q?=20suurinosa=20logiikasta=20kohdallaan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: laurimaaninka --- .../java/fi/lpam/dataluokat/Kuljetus.java | 17 ++++++ src/main/java/fi/lpam/gui/KuljetusListat.java | 21 ++++++- .../lpam/gui/elementit/KuljetaTableCell.java | 58 +++++++++++++++++++ 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java diff --git a/src/main/java/fi/lpam/dataluokat/Kuljetus.java b/src/main/java/fi/lpam/dataluokat/Kuljetus.java index 3d97254..1c3c01a 100644 --- a/src/main/java/fi/lpam/dataluokat/Kuljetus.java +++ b/src/main/java/fi/lpam/dataluokat/Kuljetus.java @@ -268,6 +268,23 @@ 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) { + setSalaatit(asiakas.getSalaatit()); + setPääruoat(asiakas.getPääruoat()); + setJälkiruoat(asiakas.getJälkiruoat()); + 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/KuljetusListat.java b/src/main/java/fi/lpam/gui/KuljetusListat.java index 012d909..9f5c0e2 100644 --- a/src/main/java/fi/lpam/gui/KuljetusListat.java +++ b/src/main/java/fi/lpam/gui/KuljetusListat.java @@ -3,10 +3,13 @@ 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.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Pos; @@ -16,9 +19,11 @@ import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; +import javafx.util.Callback; import java.time.LocalDate; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Objects; @@ -28,14 +33,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 +93,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, tableView)); + tcNappi.setCellValueFactory(features -> new SimpleBooleanProperty(features.getValue() != null)); + TableColumn tcNimi = new TableColumn<>("Nimi"); tcNimi.setMinWidth(150); tcNimi.setCellFactory(TextFieldTableCell.forTableColumn()); @@ -128,7 +143,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 +151,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..fc21d2b --- /dev/null +++ b/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java @@ -0,0 +1,58 @@ +package fi.lpam.gui.elementit; + +import fi.lpam.dataluokat.Asiakas; +import fi.lpam.dataluokat.Kuljetus; +import fi.lpam.gui.KuljetusListat; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.geometry.Insets; +import javafx.scene.control.Button; +import javafx.scene.control.ContentDisplay; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableView; +import javafx.scene.layout.StackPane; + +import java.sql.Array; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; + +public class KuljetaTableCell extends TableCell { + private final Button nappi = new Button("Vaihda"); + private final StackPane paddedNappi = new StackPane(); + + public KuljetaTableCell(final HashMap asiakkaat, final TableView table) { + paddedNappi.setPadding(new Insets(3)); + paddedNappi.getChildren().add(nappi); + nappi.setOnAction(_ -> { + Kuljetus kuljetus = getTableRow().getItem(); + System.out.println(kuljetus); + if (kuljetus == null) return; + if (kuljetus.kuljetetaan()) { + kuljetus.nollaa(); + System.out.println("Nollattu"); + System.out.println(kuljetus); + } + else { + Asiakas asiakas = asiakkaat.get(kuljetus.getAsiakasID()); + System.out.println(asiakas); + kuljetus.palautaMäärät(asiakas); + System.out.println("Palautettu"); + } + table.refresh(); + KuljetusListat.tallennusStatus.setText("Tallennettu: Ei"); + }); + } + + + /** places an add button in the row only if the row is not empty. */ + @Override protected void updateItem(Boolean item, boolean empty) { + super.updateItem(item, empty); + if (!empty) { + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + setGraphic(paddedNappi); + } else { + setGraphic(null); + } + } +}