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); + } + } +}