Files
Ruokamanageri/src/main/java/fi/lpam/gui/Kierroshallinta.java
T
laurimaaninka b406ee3e0b fix #24
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
2026-05-25 13:28:55 +03:00

133 lines
4.9 KiB
Java

package fi.lpam.gui;
import com.dlsc.gemsfx.MultiColumnListView;
import fi.lpam.dataluokat.Asiakas;
import fi.lpam.dataluokat.Kierros;
import fi.lpam.gui.elementit.AsiakasMCLVListCell;
import fi.lpam.gui.elementit.FontLabel;
import fi.lpam.gui.elementit.TabPohja;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Objects;
public class Kierroshallinta extends TabPohja {
private final MultiColumnListView<Asiakas> mclv = new MultiColumnListView<>();
private final ArrayList<Kierros> kierrokset = Kierros.haeKaikki();
private ArrayList<Asiakas> kaikkiAsiakkaat = Asiakas.haeKaikki();
public Kierroshallinta() {
super("Kierroshallinta");
root.setCenter(mclv);
mclv.setCellFactory(_ -> new AsiakasMCLVListCell(mclv));
mclv.setPlaceholderFrom(new Asiakas(""));
mclv.setPlaceholderTo(new Asiakas(""));
rakennaSarakkeet();
BorderPane yläpalkki = new BorderPane();
root.setTop(yläpalkki);
Label infoTeksti = new FontLabel(TEKSTI_FONT, "Siirrä asiakkaat haluamallesi kierrokselle. Kierroksia voit lisätä painamalla lisää uusi kierros painiketta.\nKierrosnumerot päivittyvät, sekä tyhjät poistuvat kierroksia tallentaessa.");
yläpalkki.setLeft(infoTeksti);
HBox yläpalkinNapit = new HBox();
yläpalkinNapit.setSpacing(5);
yläpalkki.setRight(yläpalkinNapit);
Button lisääKierros = new Button("Lisää uusi kierros");
lisääKierros.setOnAction(_ -> {
int uudenKierroksenNumero = mclv.getColumns().size();
lisaaKierros(new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>())));
});
lisääKierros.setFont(BUTTON_FONT);
yläpalkinNapit.getChildren().add(lisääKierros);
Button tallenna = new Button("Tallenna kierrokset");
tallenna.setFont(BUTTON_FONT);
tallenna.setOnAction(_ ->tallennaKierrokset());
yläpalkinNapit.getChildren().add(tallenna);
}
private void rakennaSarakkeet() {
mclv.getColumns().clear();
kaikkiAsiakkaat = Asiakas.haeKaikki();
ObservableList<Asiakas> eiKierroksella = FXCollections.observableArrayList(new ArrayList<>());
HashSet<Integer> kierroksellaOlevatAsiakasIDt = new HashSet<>();
if (!kierrokset.isEmpty()) {
for (Kierros kierros : kierrokset) {
lisaaKierros(kierros);
for (Asiakas asiakas : kierros.getAsiakkaat()) {
kierroksellaOlevatAsiakasIDt.add(asiakas.getId());
}
}
}
for (Asiakas k : Objects.requireNonNull(kaikkiAsiakkaat)) {
if (!kierroksellaOlevatAsiakasIDt.contains(k.getId())) {
eiKierroksella.add(k);
}
}
MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>();
Label labelEiKierroksella = new FontLabel(TEKSTI_FONT, "Ei vielä kierroksella");
colEiKierroksella.setHeader(labelEiKierroksella);
colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella));
mclv.getColumns().add(colEiKierroksella);
}
private void lisaaKierros(Kierros kierros) {
if (!kierrokset.contains(kierros)) kierrokset.add(kierros);
MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>();
uusiSarake.setHeader(new FontLabel(TEKSTI_FONT, "Kierros " + kierros.getKierrosNumero()));
uusiSarake.setItems(kierros.getAsiakkaat());
mclv.getColumns().add(kierros.getKierrosNumero()-1, uusiSarake);
}
private void tallennaKierrokset() {
int kierrosNumero = 1;
int index = 0;
for (int i = 0; i < kierrokset.size();) {
Kierros k = kierrokset.get(i);
k.setAsiakkaat(FXCollections.observableArrayList(new ArrayList<>()));
k.setAsiakkaat(mclv.getColumns().get(index).getItems());
index++;
if (k.getAsiakkaat().isEmpty()) {
k.poista();
kierrokset.remove(i);
continue;
}
k.setKierrosNumero(kierrosNumero);
kierrosNumero++;
k.tallenna();
i++;
}
rakennaSarakkeet();
Alert info = new Alert(Alert.AlertType.INFORMATION);
info.setTitle("Kierrokset tallennettu");
info.setHeaderText("Kierrokset tallennettu onnistuneesti");
info.setContentText(null);
info.showAndWait();
}
@Override
public void päivitä() {
rakennaSarakkeet();
}
}