From 95ad19949459d20cd618da562610bec520aa85c4 Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Wed, 8 Apr 2026 23:15:42 +0300 Subject: [PATCH 1/4] Haaran luonti Signed-off-by: laurimaaninka --- TODO.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/TODO.txt b/TODO.txt index f0b5435..dc46b69 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,3 +1 @@ TODO Kuljetuslistan luontiin riville nappi, josta nollata rivi/palauttaa oletuskuljetusmäärät - -TODO Asiakkaalle laskutusosoite \ No newline at end of file From 4067ae188bd29acdf296c0047b6d32279c5a8c5d Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Thu, 9 Apr 2026 20:27:14 +0300 Subject: [PATCH 2/4] =?UTF-8?q?Luotu=20sarake=20n=C3=A4kym=C3=A4=C3=A4n=20?= =?UTF-8?q?ja=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); + } + } +} From 8cd7e2358722408bea17a5ab61aa0f0f0ad60752 Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Thu, 9 Apr 2026 23:35:21 +0300 Subject: [PATCH 3/4] Ominaisuus valmis? Signed-off-by: laurimaaninka --- .idea/dataSources.xml | 11 ++----- .idea/db-forest-config.xml | 10 ------- .../java/fi/lpam/dataluokat/Kuljetus.java | 29 +++++++++++++++++-- .../java/fi/lpam/gui/Asiakashallinta.java | 2 +- src/main/java/fi/lpam/gui/KuljetusListat.java | 4 +-- .../lpam/gui/elementit/KuljetaTableCell.java | 29 +++++-------------- 6 files changed, 38 insertions(+), 47 deletions(-) delete mode 100644 .idea/db-forest-config.xml diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 3b5e717..6a3623d 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,18 +1,11 @@ - + sqlite.xerial true org.sqlite.JDBC - jdbc:sqlite:$PROJECT_DIR$/tietokanta.db - $ProjectFileDir$ - - - sqlite.xerial - true - org.sqlite.JDBC - jdbc:sqlite:C:\Users\TheHy\OneDrive\Kuljetusruokasovellus\tietokanta.db + jdbc:sqlite:C:\Users\TheHy\Ohjelmointi\Ruokamanageri\testikanta.db $ProjectFileDir$ 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/src/main/java/fi/lpam/dataluokat/Kuljetus.java b/src/main/java/fi/lpam/dataluokat/Kuljetus.java index 1c3c01a..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(); @@ -276,9 +291,17 @@ public class Kuljetus implements TietokantaOlio { } public void palautaMäärät(Asiakas asiakas) { - setSalaatit(asiakas.getSalaatit()); - setPääruoat(asiakas.getPääruoat()); - setJälkiruoat(asiakas.getJälkiruoat()); + 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()); } 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 9f5c0e2..0639a07 100644 --- a/src/main/java/fi/lpam/gui/KuljetusListat.java +++ b/src/main/java/fi/lpam/gui/KuljetusListat.java @@ -9,7 +9,6 @@ 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; @@ -19,7 +18,6 @@ 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; @@ -95,7 +93,7 @@ public class KuljetusListat extends TabPohja { TableColumn tcNappi = new TableColumn<>("Kuljeta"); tcNappi.setMinWidth(100); - tcNappi.setCellFactory(_ -> new KuljetaTableCell(asiakkaat, tableView)); + tcNappi.setCellFactory(_ -> new KuljetaTableCell(asiakkaat)); tcNappi.setCellValueFactory(features -> new SimpleBooleanProperty(features.getValue() != null)); TableColumn tcNimi = new TableColumn<>("Nimi"); diff --git a/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java b/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java index fc21d2b..8cc37bc 100644 --- a/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java +++ b/src/main/java/fi/lpam/gui/elementit/KuljetaTableCell.java @@ -3,49 +3,36 @@ 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) { + public KuljetaTableCell(HashMap asiakkaat) { paddedNappi.setPadding(new Insets(3)); + Button nappi = new Button("Muuta"); paddedNappi.getChildren().add(nappi); - nappi.setOnAction(_ -> { + nappi.setOnMouseClicked(_ -> { + getTableView().getSelectionModel().select(getIndex()); 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 { + kuljetus.palautaMäärät(asiakkaat.get(kuljetus.getAsiakasID())); } - else { - Asiakas asiakas = asiakkaat.get(kuljetus.getAsiakasID()); - System.out.println(asiakas); - kuljetus.palautaMäärät(asiakas); - System.out.println("Palautettu"); - } - table.refresh(); + getTableRow().setItem(new Kuljetus(kuljetus)); 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) { From ec70e7e020077be2bb77a7ac4e7beb65362ad812 Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Wed, 8 Apr 2026 23:20:08 +0300 Subject: [PATCH 4/4] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cc72577..2a7bc32 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ out/ *.iws *.iml *.ipr +dataSources.xml ### Eclipse ### .apt_generated