b406ee3e0b
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
133 lines
4.9 KiB
Java
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();
|
|
}
|
|
} |