Versio 1, ensimmäinen committi!

This commit is contained in:
2026-04-08 19:34:00 +03:00
commit 7eddb935dc
42 changed files with 2699 additions and 0 deletions
@@ -0,0 +1,129 @@
package fi.lpam.gui;
import com.dlsc.gemsfx.MultiColumnListView;
import fi.lpam.dataluokat.Asiakas;
import fi.lpam.dataluokat.Kierros;
import fi.lpam.gui.elementit.AsiakasListCell;
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 final ArrayList<Asiakas> kaikkiAsiakkaat = Asiakas.haeKaikki();
public Kierroshallinta() {
BorderPane root = new BorderPane();
this.getChildren().add(root);
root.setPadding(oletusInsets);
root.setCenter(mclv);
mclv.setCellFactory(_ -> new AsiakasListCell(mclv));
mclv.setPlaceholderFrom(new Asiakas(""));
mclv.setPlaceholderTo(new Asiakas(""));
rakennaSarakkeet();
BorderPane yläpalkki = new BorderPane();
root.setTop(yläpalkki);
Label infoTeksti = new Label("Siirrä asiakkaat haluamallesi kierrokselle. Kierroksia voit lisätä painamalla lisää kierros painiketta.\nTyhjät kierrokset poistuvat kierroksia tallentaessa.");
infoTeksti.setFont(tekstiFont);
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(_ -> lisaaKierros());
lisääKierros.setFont(TabPohja.buttonFont);
yläpalkinNapit.getChildren().add(lisääKierros);
Button tallenna = new Button("Tallenna kierrokset");
tallenna.setFont(TabPohja.buttonFont);
tallenna.setOnAction(_ ->tallennaKierrokset());
yläpalkinNapit.getChildren().add(tallenna);
}
private void rakennaSarakkeet() {
mclv.getColumns().clear();
ObservableList<Asiakas> eiKierroksella = FXCollections.observableArrayList(new ArrayList<>());
HashSet<Integer> kierroksellaOlevatAsiakasIDt = new HashSet<>();
if (!kierrokset.isEmpty()) {
for (Kierros k : kierrokset) {
MultiColumnListView.ListViewColumn<Asiakas> sarake = new MultiColumnListView.ListViewColumn<>();
sarake.setHeader(new Label("Kierros " + k.getKierrosNumero()));
sarake.setItems(k.getAsiakkaat());
for (Asiakas asiakas : k.getAsiakkaat()) {
kierroksellaOlevatAsiakasIDt.add(asiakas.getId());
}
mclv.getColumns().add(sarake);
}
}
for (Asiakas k : Objects.requireNonNull(kaikkiAsiakkaat)) {
if (!kierroksellaOlevatAsiakasIDt.contains(k.getId())) {
eiKierroksella.add(k);
}
}
MultiColumnListView.ListViewColumn<Asiakas> colEiKierroksella = new MultiColumnListView.ListViewColumn<>();
colEiKierroksella.setHeader(new Label("Ei vielä kierroksella"));
colEiKierroksella.setItems(FXCollections.observableArrayList(eiKierroksella));
mclv.getColumns().add(colEiKierroksella);
}
private void lisaaKierros() {
int uudenKierroksenNumero = mclv.getColumns().size();
Kierros lisättäväKierros = new Kierros(uudenKierroksenNumero, FXCollections.observableArrayList(new ArrayList<>()));
kierrokset.add(lisättäväKierros);
MultiColumnListView.ListViewColumn<Asiakas> uusiSarake = new MultiColumnListView.ListViewColumn<>();
uusiSarake.setHeader(new Label("Kierros " + uudenKierroksenNumero));
uusiSarake.setItems(lisättäväKierros.getAsiakkaat());
mclv.getColumns().add(uudenKierroksenNumero-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(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();
}
}