Versio 1, ensimmäinen committi!
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
package fi.lpam.gui;
|
||||
|
||||
import fi.lpam.dataluokat.Asiakas;
|
||||
|
||||
import fi.lpam.gui.elementit.IntegerSpinner;
|
||||
import fi.lpam.gui.elementit.TabPohja;
|
||||
import fi.lpam.Main;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
public class AsiakasIkkuna extends Stage {
|
||||
final Asiakas käsiteltäväAsiakas;
|
||||
final TextField tfNimi, tfOsoite, tfRuokarajoitteet, tfAvainTieto, tfLisätiedot;
|
||||
final IntegerSpinner tfMaanantai, tfTiistai, tfKeskiviikko, tfTorstai, tfPerjantai, tfSalaatit, tfPääruoat, tfJälkiruoat;
|
||||
|
||||
/**
|
||||
* Luo ikkunan jossa muokataan saatua asiakasta
|
||||
* @param käsiteltäväAsiakas voi olla uusi, tai vanha. Ikkuna ei välitä
|
||||
*/
|
||||
public AsiakasIkkuna(Asiakas käsiteltäväAsiakas) {
|
||||
this.käsiteltäväAsiakas = käsiteltäväAsiakas;
|
||||
this.setTitle("Asiakasikkuna");
|
||||
|
||||
GridPane root = new GridPane();
|
||||
root.setPadding(new Insets(15));
|
||||
root.setHgap(10);
|
||||
root.setVgap(10);
|
||||
root.setOnKeyPressed(e -> {
|
||||
switch (e.getCode()) {
|
||||
case ENTER: tallenna(); break;
|
||||
case ESCAPE: close(); break;
|
||||
default: break;
|
||||
}});
|
||||
|
||||
root.addRow(root.getRowCount(), new Label("Vahvistetut kentät pakollisia"));
|
||||
|
||||
Label nimi = new Label("Asiakkaan etu- ja sukunimi");
|
||||
nimi.setStyle("-fx-font-weight: bold;");
|
||||
tfNimi = new TextField();
|
||||
tfNimi.setPromptText("Pakollinen tieto");
|
||||
root.addRow(root.getRowCount(), nimi, tfNimi);
|
||||
|
||||
Label osoite = new Label("Osoite");
|
||||
osoite.setStyle("-fx-font-weight: bold;");
|
||||
tfOsoite = new TextField();
|
||||
tfOsoite.setPromptText("Pakollinen tieto");
|
||||
root.addRow(root.getRowCount(), osoite, tfOsoite);
|
||||
|
||||
root.addRow(root.getRowCount(), new Label("Määrät per kuljetus"));
|
||||
|
||||
Label salaatit = new Label("Salaatit");
|
||||
tfSalaatit = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), salaatit, tfSalaatit);
|
||||
|
||||
Label pääruoat = new Label("Pääruoat");
|
||||
tfPääruoat = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), pääruoat, tfPääruoat);
|
||||
|
||||
Label jälkiruoat = new Label("Jälkiruoat");
|
||||
tfJälkiruoat = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), jälkiruoat, tfJälkiruoat);
|
||||
|
||||
root.addRow(root.getRowCount(), new Label("Kuljetukset per päivä"));
|
||||
|
||||
Label maanantai = new Label("Maanantai");
|
||||
tfMaanantai = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), maanantai, tfMaanantai);
|
||||
|
||||
Label tiistai = new Label("Tiistai");
|
||||
tfTiistai = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), tiistai, tfTiistai);
|
||||
|
||||
Label keskiviikko = new Label("Keskiviikko");
|
||||
tfKeskiviikko = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), keskiviikko, tfKeskiviikko);
|
||||
|
||||
Label torstai = new Label("Torstai");
|
||||
tfTorstai = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), torstai, tfTorstai);
|
||||
|
||||
Label perjantai = new Label("Perjantai");
|
||||
tfPerjantai = new IntegerSpinner();
|
||||
root.addRow(root.getRowCount(), perjantai, tfPerjantai);
|
||||
|
||||
Label ruokarajoitteet = new Label("Ruokarajoitteet");
|
||||
tfRuokarajoitteet = new TextField();
|
||||
root.addRow(root.getRowCount(), ruokarajoitteet, tfRuokarajoitteet);
|
||||
|
||||
Label avainTieto = new Label("Avaintieto");
|
||||
tfAvainTieto = new TextField();
|
||||
root.addRow(root.getRowCount(), avainTieto, tfAvainTieto);
|
||||
|
||||
Label lisätiedot = new Label("Kuljetuksen lisätiedot");
|
||||
tfLisätiedot = new TextField();
|
||||
tfLisätiedot.setPromptText("Näkyy raporteilla");
|
||||
root.addRow(root.getRowCount(), lisätiedot, tfLisätiedot);
|
||||
|
||||
Button peruuta = new Button("Peruuta");
|
||||
peruuta.setFont(TabPohja.buttonFont);
|
||||
peruuta.setMinWidth(160);
|
||||
peruuta.setOnAction(_ -> this.close());
|
||||
Button tallenna = new Button("Tallenna");
|
||||
tallenna.setFont(TabPohja.buttonFont);
|
||||
tallenna.setMinWidth(160);
|
||||
tallenna.setOnAction(_ -> tallenna());
|
||||
root.addRow(root.getRowCount(), peruuta, tallenna);
|
||||
|
||||
|
||||
this.setScene(new Scene(root));
|
||||
this.getIcons().add(new Image(Objects.requireNonNull(Main.class.getResourceAsStream("kuljetusruokalaatikko.jpg"))));
|
||||
this.setAlwaysOnTop(true);
|
||||
this.setResizable(false);
|
||||
|
||||
//Saatu asiakas on tullut muokattavaksi
|
||||
if (käsiteltäväAsiakas.getId() > 0) {
|
||||
näytäAsiakas();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Jos saadulla asiakkaalla on id (eli asiakas löytyy tietokannasta ja sillä on tietoja)
|
||||
* tällä funktiolla täytetään asiakkaan tiedot ikkunan kenttiin
|
||||
*/
|
||||
private void näytäAsiakas() {
|
||||
tfNimi.setText(käsiteltäväAsiakas.getNimi());
|
||||
tfOsoite.setText(käsiteltäväAsiakas.getOsoite());
|
||||
tfMaanantai.getValueFactory().setValue(käsiteltäväAsiakas.getMaanantaiKpl());
|
||||
tfTiistai.getValueFactory().setValue(käsiteltäväAsiakas.getTiistaiKpl());
|
||||
tfKeskiviikko.getValueFactory().setValue(käsiteltäväAsiakas.getKeskiviikkoKpl());
|
||||
tfTorstai.getValueFactory().setValue(käsiteltäväAsiakas.getTorstaiKpl());
|
||||
tfPerjantai.getValueFactory().setValue(käsiteltäväAsiakas.getPerjantaiKpl());
|
||||
tfSalaatit.getValueFactory().setValue(käsiteltäväAsiakas.getSalaatit());
|
||||
tfPääruoat.getValueFactory().setValue(käsiteltäväAsiakas.getPääruoat());
|
||||
tfJälkiruoat.getValueFactory().setValue(käsiteltäväAsiakas.getJälkiruoat());
|
||||
tfRuokarajoitteet.setText(käsiteltäväAsiakas.getErityisruokavalio());
|
||||
tfAvainTieto.setText(käsiteltäväAsiakas.getAvainTieto());
|
||||
tfLisätiedot.setText(käsiteltäväAsiakas.getLisätiedot());
|
||||
}
|
||||
|
||||
private void tallenna() {
|
||||
this.setAlwaysOnTop(false);
|
||||
String nimi = tfNimi.getText();
|
||||
String osoite = tfOsoite.getText();
|
||||
|
||||
if (nimi.isEmpty() || osoite.isEmpty()) {
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Tarkista tiedot");
|
||||
alert.setHeaderText(null);
|
||||
alert.setContentText("Nimi tai osoite ei voi olla tyhjiä");
|
||||
alert.showAndWait();
|
||||
return;
|
||||
}
|
||||
|
||||
käsiteltäväAsiakas.setNimi(nimi);
|
||||
käsiteltäväAsiakas.setOsoite(osoite);
|
||||
käsiteltäväAsiakas.setMaanantaiKpl(tfMaanantai.getValue());
|
||||
käsiteltäväAsiakas.setTiistaiKpl(tfTiistai.getValue());
|
||||
käsiteltäväAsiakas.setKeskiviikkoKpl(tfKeskiviikko.getValue());
|
||||
käsiteltäväAsiakas.setTorstaiKpl(tfTorstai.getValue());
|
||||
käsiteltäväAsiakas.setPerjantaiKpl(tfPerjantai.getValue());
|
||||
käsiteltäväAsiakas.setSalaatit(tfSalaatit.getValue());
|
||||
käsiteltäväAsiakas.setPääruoat(tfPääruoat.getValue());
|
||||
käsiteltäväAsiakas.setJälkiruoat(tfJälkiruoat.getValue());
|
||||
käsiteltäväAsiakas.setErityisruokavalio(tfRuokarajoitteet.getText());
|
||||
käsiteltäväAsiakas.setAvainTieto(tfAvainTieto.getText());
|
||||
käsiteltäväAsiakas.setLisätiedot(tfLisätiedot.getText());
|
||||
|
||||
boolean läpi = false;
|
||||
int maxYritykset = 3;
|
||||
int yritykset = 0;
|
||||
while (!läpi) {
|
||||
if (käsiteltäväAsiakas.getId() > 0) {
|
||||
läpi = käsiteltäväAsiakas.päivitäTietokantaan();
|
||||
}
|
||||
else {
|
||||
läpi = käsiteltäväAsiakas.tallennaUusi();
|
||||
}
|
||||
yritykset++;
|
||||
if (yritykset > maxYritykset) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (läpi) {
|
||||
int viikonKuljetukset = käsiteltäväAsiakas.getMaanantaiKpl() + käsiteltäväAsiakas.getTiistaiKpl() + käsiteltäväAsiakas.getKeskiviikkoKpl() + käsiteltäväAsiakas.getTorstaiKpl() + käsiteltäväAsiakas.getPerjantaiKpl();
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Onnistuimme!");
|
||||
alert.setHeaderText("Asiakkaan tallentaminen onnistui!");
|
||||
alert.setContentText(String.format("%s saa jatkossa yhteensä \n%s salaattia, %s pääruokaa ja %s jälkiruokaa viikossa",
|
||||
käsiteltäväAsiakas.getNimi(), käsiteltäväAsiakas.getSalaatit()*viikonKuljetukset, käsiteltäväAsiakas.getPääruoat()*viikonKuljetukset, käsiteltäväAsiakas.getPääruoat()*viikonKuljetukset));
|
||||
alert.showAndWait();
|
||||
this.close();
|
||||
}
|
||||
this.setAlwaysOnTop(true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
package fi.lpam.gui;
|
||||
|
||||
import fi.lpam.dataluokat.Asiakas;
|
||||
import fi.lpam.gui.elementit.MaaraTableColumn;
|
||||
import fi.lpam.gui.elementit.TabPohja;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.*;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class Asiakashallinta extends TabPohja {
|
||||
final TableView<Asiakas> tvAsiakkaat = new TableView<>();
|
||||
|
||||
public Asiakashallinta() {
|
||||
BorderPane root = new BorderPane();
|
||||
this.getChildren().add(root);
|
||||
root.setPadding(oletusInsets);
|
||||
|
||||
BorderPane yläpalkki = new BorderPane();
|
||||
root.setTop(yläpalkki);
|
||||
Label otsikko = new Label("Asiakashallinta");
|
||||
otsikko.setFont(tekstiFont);
|
||||
yläpalkki.setLeft(otsikko);
|
||||
|
||||
HBox yläpalkinNapit = new HBox();
|
||||
yläpalkinNapit.setSpacing(5);
|
||||
yläpalkki.setRight(yläpalkinNapit);
|
||||
|
||||
Button poistaValittu = new Button("Poista");
|
||||
poistaValittu.setOnAction(_ -> poistaValittu());
|
||||
poistaValittu.setFont(TabPohja.buttonFont);
|
||||
yläpalkinNapit.getChildren().add(poistaValittu);
|
||||
|
||||
Button muokkaaAsiakasta = new Button("Muokkaa");
|
||||
muokkaaAsiakasta.setOnAction(_ -> muokkaaValittua());
|
||||
muokkaaAsiakasta.setFont(TabPohja.buttonFont);
|
||||
yläpalkinNapit.getChildren().add(muokkaaAsiakasta);
|
||||
|
||||
Button uusiAsiakas = new Button("Uusi asiakas");
|
||||
uusiAsiakas.setOnAction(_ -> uusiAsiakas());
|
||||
uusiAsiakas.setFont(TabPohja.buttonFont);
|
||||
yläpalkinNapit.getChildren().add(uusiAsiakas);
|
||||
|
||||
tvAsiakkaat.setEditable(false);
|
||||
tvAsiakkaat.setPlaceholder(new Label("Ei vielä tietoja"));
|
||||
tvAsiakkaat.setOnMouseClicked((MouseEvent mouseEvent) -> {
|
||||
if (mouseEvent.getClickCount() == 2) {
|
||||
muokkaaValittua();
|
||||
}
|
||||
});
|
||||
tvAsiakkaat.setOnKeyPressed(e -> {
|
||||
if (tvAsiakkaat.getSelectionModel().getSelectedItem() != null) {
|
||||
if (e.getCode() == KeyCode.ENTER) {
|
||||
muokkaaValittua();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
root.setCenter(tvAsiakkaat);
|
||||
|
||||
TableColumn<Asiakas, String> tcNimi = new TableColumn<>("Nimi");
|
||||
tcNimi.setMinWidth(180);
|
||||
tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi"));
|
||||
TableColumn<Asiakas, String> tcOsoite = new TableColumn<>("Osoite");
|
||||
tcOsoite.setMinWidth(250);
|
||||
tcOsoite.setCellValueFactory(new PropertyValueFactory<>("osoite"));
|
||||
|
||||
TableColumn<Asiakas, MaaraTableColumn<Asiakas, Integer>> tcKuljetuspäivät = new TableColumn<>("Kuljetukset per päivä");
|
||||
MaaraTableColumn<Asiakas, Integer> tcMaanantaiKpl = new MaaraTableColumn<>("MA", 20);
|
||||
tcMaanantaiKpl.setCellValueFactory(new PropertyValueFactory<>("maanantaiKpl"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcTiistaiKpl = new MaaraTableColumn<>("TI", 20);
|
||||
tcTiistaiKpl.setCellValueFactory(new PropertyValueFactory<>("tiistaiKpl"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcKeskiviikkoKpl = new MaaraTableColumn<>("KE", 20);
|
||||
tcKeskiviikkoKpl.setCellValueFactory(new PropertyValueFactory<>("keskiviikkoKpl"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcTorstaiKpl = new MaaraTableColumn<>("TO", 20);
|
||||
tcTorstaiKpl.setCellValueFactory(new PropertyValueFactory<>("torstaiKpl"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcPerjantaiKpl = new MaaraTableColumn<>("PE", 20);
|
||||
tcPerjantaiKpl.setCellValueFactory(new PropertyValueFactory<>("perjantaiKpl"));
|
||||
tcKuljetuspäivät.getColumns().addAll(tcMaanantaiKpl, tcTiistaiKpl, tcKeskiviikkoKpl, tcTorstaiKpl, tcPerjantaiKpl);
|
||||
|
||||
TableColumn<Asiakas, MaaraTableColumn<Asiakas, Integer>> tcKuljetusmäärät = new TableColumn<>("Määrät per kuljetus");
|
||||
MaaraTableColumn<Asiakas, Integer> tcSalaatit = new MaaraTableColumn<>("Salaatit", 90);
|
||||
tcSalaatit.setCellValueFactory(new PropertyValueFactory<>("salaatit"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcPääruoat = new MaaraTableColumn<>("Pääruoat", 90);
|
||||
tcPääruoat.setCellValueFactory(new PropertyValueFactory<>("pääruoat"));
|
||||
MaaraTableColumn<Asiakas, Integer> tcJälkiruoat = new MaaraTableColumn<>("Jälkiruoat", 90);
|
||||
tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat"));
|
||||
tcKuljetusmäärät.getColumns().addAll(tcSalaatit, tcPääruoat, tcJälkiruoat);
|
||||
|
||||
TableColumn<Asiakas, String> tcErityisruokavalio = new TableColumn<>("Ruokarajoitteet");
|
||||
tcErityisruokavalio.setMinWidth(150);
|
||||
tcErityisruokavalio.setCellValueFactory(new PropertyValueFactory<>("erityisruokavalio"));
|
||||
TableColumn<Asiakas, String> tcAvainTieto = new TableColumn<>("Avaintieto");
|
||||
tcAvainTieto.setMinWidth(150);
|
||||
tcAvainTieto.setCellValueFactory(new PropertyValueFactory<>("avainTieto"));
|
||||
TableColumn<Asiakas, String> tcLisätiedot = new TableColumn<>("Lisätieto kuljetukselle");
|
||||
tcLisätiedot.setMinWidth(250);
|
||||
tcLisätiedot.setCellValueFactory(new PropertyValueFactory<>("lisätiedot"));
|
||||
|
||||
tvAsiakkaat.getColumns().addAll(tcNimi, tcOsoite, tcKuljetuspäivät, tcKuljetusmäärät, tcErityisruokavalio, tcAvainTieto, tcLisätiedot);
|
||||
for (TableColumn<Asiakas, ?> column : tvAsiakkaat.getColumns()) {
|
||||
column.setEditable(false);
|
||||
column.setReorderable(false);
|
||||
column.setResizable(false);
|
||||
column.setStyle("-fx-alignment: CENTER; -fx-font-size: 16px;");
|
||||
|
||||
}
|
||||
|
||||
tvAsiakkaat.setItems(FXCollections.observableArrayList(Objects.requireNonNull(Asiakas.haeKaikki())));
|
||||
}
|
||||
|
||||
private void uusiAsiakas() {
|
||||
Asiakas luotavaAsiakas = new Asiakas();
|
||||
AsiakasIkkuna asiakasIkkuna = new AsiakasIkkuna(luotavaAsiakas);
|
||||
asiakasIkkuna.showAndWait();
|
||||
if (luotavaAsiakas.getId() != -1) {
|
||||
//Asiakas luotu ja id saatu tietokannasta
|
||||
tvAsiakkaat.getItems().add(luotavaAsiakas);
|
||||
tvAsiakkaat.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
private void muokkaaValittua() {
|
||||
Asiakas muokattavaAsiakas = tvAsiakkaat.getSelectionModel().getSelectedItem();
|
||||
if (muokattavaAsiakas == null) {return;}
|
||||
AsiakasIkkuna asiakasIkkuna = new AsiakasIkkuna(muokattavaAsiakas);
|
||||
asiakasIkkuna.showAndWait();
|
||||
tvAsiakkaat.refresh();
|
||||
}
|
||||
|
||||
private void poistaValittu() {
|
||||
Asiakas valittuAsiakas = tvAsiakkaat.getSelectionModel().getSelectedItem();
|
||||
boolean läpi = false;
|
||||
if (valittuAsiakas != null) {
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Oletko varma?");
|
||||
alert.setHeaderText("Poistetaanko valittu valittu asiakas?");
|
||||
alert.setContentText(valittuAsiakas.getNimi());
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
if (result.isPresent() && result.get() == ButtonType.OK) {
|
||||
läpi = valittuAsiakas.poista();
|
||||
}
|
||||
if (läpi) {
|
||||
tvAsiakkaat.getItems().remove(valittuAsiakas);
|
||||
tvAsiakkaat.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
package fi.lpam.gui;
|
||||
|
||||
import fi.lpam.dataluokat.Asiakas;
|
||||
import fi.lpam.dataluokat.Kierros;
|
||||
import fi.lpam.dataluokat.Kuljetus;
|
||||
import fi.lpam.tulostajat.KuljetusListaTulostaja;
|
||||
import fi.lpam.gui.elementit.MaaraTableColumn;
|
||||
import fi.lpam.gui.elementit.TabPohja;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.cell.ChoiceBoxTableCell;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.control.cell.TextFieldTableCell;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class KuljetusListat extends TabPohja {
|
||||
private final TableView<Kuljetus> tableView = new TableView<>();
|
||||
private final DatePicker datePicker = new DatePicker(LocalDate.now());
|
||||
private final ComboBox<Integer> kierrosValinta = new ComboBox<>(FXCollections.observableArrayList(Kierros.haeKierrosNumerot()));
|
||||
private final Label tallennusStatus;
|
||||
private final Button btnTulosta;
|
||||
|
||||
public KuljetusListat() {
|
||||
ObservableList<Integer> määräVaihtoehdot = FXCollections.observableArrayList();
|
||||
for (int i = 0; i <= 10; i++) {
|
||||
määräVaihtoehdot.add(i);}
|
||||
|
||||
BorderPane root = new BorderPane();
|
||||
root.setPadding(oletusInsets);
|
||||
this.getChildren().add(root);
|
||||
|
||||
BorderPane yläpalkki = new BorderPane();
|
||||
Label infoTeksti = new Label("Kuljetuslistojen luonti");
|
||||
infoTeksti.setFont(tekstiFont);
|
||||
yläpalkki.setLeft(infoTeksti);
|
||||
|
||||
HBox kierroksenValintaLaatikko = new HBox();
|
||||
kierroksenValintaLaatikko.setSpacing(5);
|
||||
kierroksenValintaLaatikko.setSpacing(5);
|
||||
kierroksenValintaLaatikko.setAlignment(Pos.CENTER);
|
||||
Button valitse = new Button("Valitse");
|
||||
valitse.setFont(buttonFont);
|
||||
valitse.setOnAction(_ -> päivitäListanäkymä());
|
||||
tallennusStatus = new Label("Tallennettu: Kyllä");
|
||||
tallennusStatus.setFont(tekstiFont);
|
||||
datePicker.valueProperty().addListener(_ -> päivitäListanäkymä());
|
||||
kierrosValinta.valueProperty().addListener(_ -> päivitäListanäkymä());
|
||||
kierroksenValintaLaatikko.getChildren().addAll(
|
||||
new Label("Valitse päivämäärä:"),
|
||||
datePicker,
|
||||
new Label("Valitse kierros:"),
|
||||
kierrosValinta, tallennusStatus);
|
||||
yläpalkki.setCenter(kierroksenValintaLaatikko);
|
||||
|
||||
HBox napit = new HBox();
|
||||
napit.setSpacing(5);
|
||||
Button poista = new Button("Poista kuljetusrivi");
|
||||
poista.setOnAction(_ ->poistaRivi());
|
||||
poista.setFont(buttonFont);
|
||||
Button tallenna = new Button("Tallenna");
|
||||
tallenna.setFont(buttonFont);
|
||||
tallenna.setOnAction(_ -> tallennaKierros());
|
||||
btnTulosta = new Button("Tulosta lista");
|
||||
btnTulosta.setDisable(true);
|
||||
btnTulosta.setFont(buttonFont);
|
||||
btnTulosta.setOnAction(_ ->tulostaLista());
|
||||
napit.getChildren().addAll(poista, tallenna, btnTulosta);
|
||||
yläpalkki.setRight(napit);
|
||||
root.setTop(yläpalkki);
|
||||
|
||||
tableView.setEditable(true);
|
||||
tableView.setPlaceholder(new Label("Valitse kierros aloittaaksesi"));
|
||||
root.setCenter(tableView);
|
||||
|
||||
TableColumn<Kuljetus, String> tcNimi = new TableColumn<>("Nimi");
|
||||
tcNimi.setMinWidth(150);
|
||||
tcNimi.setCellFactory(TextFieldTableCell.forTableColumn());
|
||||
tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi"));
|
||||
tcNimi.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, String> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setNimi(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, String> tcOsoite = new TableColumn<>("Osoite");
|
||||
tcOsoite.setMinWidth(250);
|
||||
tcOsoite.setCellFactory(TextFieldTableCell.forTableColumn());
|
||||
tcOsoite.setCellValueFactory(new PropertyValueFactory<>("osoite"));
|
||||
tcOsoite.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, String> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setOsoite(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, Integer> tcSalaatit = new MaaraTableColumn<>("Salaatit", 100);
|
||||
tcSalaatit.setCellFactory(ChoiceBoxTableCell.forTableColumn(määräVaihtoehdot));
|
||||
tcSalaatit.setCellValueFactory(new PropertyValueFactory<>("salaatit"));
|
||||
tcSalaatit.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, Integer> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setSalaatit(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, Integer> tcPääruoat = new MaaraTableColumn<>("Pääruoat", 100);
|
||||
tcPääruoat.setCellFactory(ChoiceBoxTableCell.forTableColumn(määräVaihtoehdot));
|
||||
tcPääruoat.setCellValueFactory(new PropertyValueFactory<>("pääruoat"));
|
||||
tcPääruoat.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, Integer> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setPääruoat(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, Integer> tcJälkiruoat = new MaaraTableColumn<>("Jälkiruoat", 100);
|
||||
tcJälkiruoat.setCellFactory(ChoiceBoxTableCell.forTableColumn(määräVaihtoehdot));
|
||||
tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat"));
|
||||
tcJälkiruoat.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, Integer> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setJälkiruoat(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, String> tcRuokarajoite = new TableColumn<>("Ruokarajoite");
|
||||
tcRuokarajoite.setMinWidth(200);
|
||||
tcRuokarajoite.setCellFactory(TextFieldTableCell.forTableColumn());
|
||||
tcRuokarajoite.setCellValueFactory(new PropertyValueFactory<>("ruokarajoite"));
|
||||
tcRuokarajoite.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, String> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setRuokarajoite(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, String> tcLisätieto = new TableColumn<>("Lisätieto kuljetukselle");
|
||||
tcLisätieto.setMinWidth(200);
|
||||
tcLisätieto.setCellFactory(TextFieldTableCell.forTableColumn());
|
||||
tcLisätieto.setCellValueFactory(new PropertyValueFactory<>("lisätieto"));
|
||||
tcLisätieto.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, String> event) -> {event.getTableView().getItems().get(event.getTablePosition().getRow()).setLisätieto(event.getNewValue()); tallennusStatus.setText("Tallennettu: Ei");});
|
||||
|
||||
TableColumn<Kuljetus, String> tcAvainTieto = new TableColumn<>("Avaintieto");
|
||||
tcAvainTieto.setMinWidth(200);
|
||||
tcAvainTieto.setCellFactory(TextFieldTableCell.forTableColumn());
|
||||
tcAvainTieto.setCellValueFactory(new PropertyValueFactory<>("avainTieto"));
|
||||
tcAvainTieto.setOnEditCommit((TableColumn.CellEditEvent<Kuljetus, String> 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);
|
||||
|
||||
for (TableColumn<Kuljetus, ?> sarake : tableView.getColumns()) {
|
||||
sarake.setSortable(false);
|
||||
sarake.setEditable(true);
|
||||
sarake.setResizable(true);
|
||||
sarake.setStyle("-fx-alignment: CENTER; -fx-font-size: 16px;");
|
||||
}
|
||||
}
|
||||
|
||||
private void päivitäListanäkymä() {
|
||||
LocalDate valittuPäivä = datePicker.getValue();
|
||||
int valittuKierros = kierrosValinta.getValue();
|
||||
|
||||
ArrayList<Kuljetus> luetutKuljetuksetKierrokselle = Kuljetus.haePäivänKuljetuksetKierroksella(valittuPäivä, valittuKierros);
|
||||
ObservableList<Asiakas> kierroksenAsiakkaat = Objects.requireNonNull(Kierros.haeKierros(valittuKierros)).getAsiakkaat();
|
||||
ArrayList<Kuljetus> näytettävätKuljetukset = new ArrayList<>();
|
||||
HashSet<Integer> näytettävätAsiakasIDt = new HashSet<>();
|
||||
//Luodaan kierroksen kuljetusdata kierrosjärjestyksen mukaan
|
||||
for (Asiakas asiakas : kierroksenAsiakkaat) {
|
||||
näytettävätKuljetukset.add(new Kuljetus(asiakas, valittuPäivä, valittuKierros));
|
||||
näytettävätAsiakasIDt.add(asiakas.getId());
|
||||
}
|
||||
//Yhdistetään tietokannan data järjestys säilyttäen
|
||||
for (Kuljetus luettuKuljetus : Objects.requireNonNull(luetutKuljetuksetKierrokselle)) {
|
||||
if (näytettävätAsiakasIDt.contains(luettuKuljetus.getAsiakasID())) {
|
||||
for (Kuljetus näytettäväKuljetus : näytettävätKuljetukset) {
|
||||
if (näytettäväKuljetus.getAsiakasID() == luettuKuljetus.getAsiakasID()) {
|
||||
näytettävätKuljetukset.set(näytettävätKuljetukset.indexOf(näytettäväKuljetus), luettuKuljetus);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
näytettävätKuljetukset.add(luettuKuljetus);
|
||||
}
|
||||
}
|
||||
|
||||
tableView.setItems(FXCollections.observableArrayList(näytettävätKuljetukset));
|
||||
tallennusStatus.setText("Tallennettu: Ei");
|
||||
btnTulosta.setDisable(true);
|
||||
}
|
||||
|
||||
private void poistaRivi() {
|
||||
Kuljetus valittu = tableView.getSelectionModel().getSelectedItem();
|
||||
tableView.getItems().remove(valittu);
|
||||
if (valittu.getId() > 0) {valittu.poista();}
|
||||
tableView.refresh();
|
||||
tallennusStatus.setText("Tallennettu: Ei");
|
||||
}
|
||||
|
||||
private void tallennaKierros() {
|
||||
try {
|
||||
for (Kuljetus kuljetus : tableView.getItems()) {
|
||||
if (kuljetus.getId() > 0) {
|
||||
kuljetus.päivitäTietokantaan();
|
||||
} else {
|
||||
kuljetus.tallennaUusi();
|
||||
}
|
||||
}
|
||||
tallennusStatus.setText("Tallennettu: Kyllä");
|
||||
btnTulosta.setDisable(false);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Virhe");
|
||||
alert.setHeaderText("Tallennus epäonnistui");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
}
|
||||
}
|
||||
|
||||
private void tulostaLista() {
|
||||
KuljetusListaTulostaja.tulosta(tableView.getItems(), kierrosValinta.getValue());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package fi.lpam.gui;
|
||||
|
||||
import fi.lpam.dataluokat.RaporttiRivi;
|
||||
import fi.lpam.tulostajat.KuljetusRaporttiTulostaja;
|
||||
import fi.lpam.gui.elementit.PaivamaaraTableCell;
|
||||
import fi.lpam.gui.elementit.TabPohja;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class KuljetusRaportit extends TabPohja {
|
||||
private final TableView<RaporttiRivi> tableView = new TableView<>();
|
||||
private final DatePicker alkuPvm, loppuPvm;
|
||||
private ArrayList<RaporttiRivi> raportti;
|
||||
private final CheckBox tarkka;
|
||||
|
||||
void haeRaportti() {
|
||||
raportti = RaporttiRivi.haeRaportti(alkuPvm.getValue(), loppuPvm.getValue(), tarkka.isSelected());
|
||||
tableView.setItems(FXCollections.observableArrayList(Objects.requireNonNull(raportti)));
|
||||
tableView.refresh();
|
||||
}
|
||||
|
||||
void tulostaRaportti() {
|
||||
KuljetusRaporttiTulostaja.luoRaportti(raportti, alkuPvm.getValue(), loppuPvm.getValue());
|
||||
}
|
||||
|
||||
public KuljetusRaportit() {
|
||||
BorderPane root = new BorderPane();
|
||||
root.setPadding(oletusInsets);
|
||||
this.getChildren().add(root);
|
||||
|
||||
BorderPane yläpalkki = new BorderPane();
|
||||
root.setTop(yläpalkki);
|
||||
|
||||
Label infoTeksti = new Label("Kuljetusraportit");
|
||||
infoTeksti.setFont(tekstiFont);
|
||||
yläpalkki.setLeft(infoTeksti);
|
||||
|
||||
HBox yläpalkinNapit = new HBox();
|
||||
yläpalkinNapit.setAlignment(Pos.CENTER);
|
||||
yläpalkinNapit.setSpacing(5);
|
||||
yläpalkki.setRight(yläpalkinNapit);
|
||||
|
||||
tarkka = new CheckBox("Tarkka");
|
||||
alkuPvm = new DatePicker(LocalDate.now().minusDays(LocalDate.now().getDayOfMonth() - 1));
|
||||
loppuPvm = new DatePicker(LocalDate.now());
|
||||
Button haeKuljetukset = new Button("Hae");
|
||||
haeKuljetukset.setFont(buttonFont);
|
||||
haeKuljetukset.setOnAction(_ ->haeRaportti());
|
||||
Button tulostaRaportti = new Button("Tulosta raportti");
|
||||
tulostaRaportti.setFont(buttonFont);
|
||||
tulostaRaportti.setOnAction(_ ->tulostaRaportti());
|
||||
yläpalkinNapit.getChildren().addAll(tarkka, new Label("Hae kuljetukset välillä:"), alkuPvm, new Label("-"), loppuPvm, haeKuljetukset, tulostaRaportti);
|
||||
|
||||
root.setCenter(tableView);
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcNimi = new TableColumn<>("Nimi");
|
||||
tcNimi.setMinWidth(150);
|
||||
tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi"));
|
||||
|
||||
TableColumn<RaporttiRivi, LocalDate> tcPvm = new TableColumn<>("Päivämäärä");
|
||||
tcPvm.setMinWidth(150);
|
||||
tcPvm.setCellFactory(_ ->new PaivamaaraTableCell());
|
||||
tcPvm.setCellValueFactory(new PropertyValueFactory<>("loppuPvm"));
|
||||
|
||||
TableColumn<RaporttiRivi, Integer> tcSalaatit = new TableColumn<>("Salaatit");
|
||||
tcSalaatit.setMinWidth(100);
|
||||
tcSalaatit.setCellValueFactory(new PropertyValueFactory<>("salaatit"));
|
||||
|
||||
TableColumn<RaporttiRivi, Integer> tcPääruoat = new TableColumn<>("Pääruoat");
|
||||
tcPääruoat.setMinWidth(100);
|
||||
tcPääruoat.setCellValueFactory(new PropertyValueFactory<>("pääruoat"));
|
||||
|
||||
TableColumn<RaporttiRivi, Integer> tcJälkiruoat = new TableColumn<>("Jälkiruoat");
|
||||
tcJälkiruoat.setMinWidth(100);
|
||||
tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat"));
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcLisätiedot = new TableColumn<>("Lisätiedot");
|
||||
tcLisätiedot.setMinWidth(500);
|
||||
tcLisätiedot.setCellValueFactory(new PropertyValueFactory<>("lisätiedot"));
|
||||
|
||||
tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot);
|
||||
tableView.setPlaceholder(new Label("Hae raportti"));
|
||||
for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) {
|
||||
sarake.setSortable(false);
|
||||
sarake.setEditable(false);
|
||||
sarake.setResizable(true);
|
||||
sarake.setStyle("-fx-alignment: CENTER; -fx-font-size: 16px;");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package fi.lpam.gui.elementit;
|
||||
|
||||
import com.dlsc.gemsfx.MultiColumnListView;
|
||||
import fi.lpam.dataluokat.Asiakas;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.ContentDisplay;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.layout.VBox;
|
||||
|
||||
|
||||
public class AsiakasListCell extends MultiColumnListView.ColumnListCell<Asiakas> {
|
||||
private final StackPane wrapper;
|
||||
|
||||
public AsiakasListCell(MultiColumnListView multiColumnListView) {
|
||||
//noinspection unchecked
|
||||
super(multiColumnListView);
|
||||
this.setHeight(150);
|
||||
this.setPrefHeight(50);
|
||||
|
||||
|
||||
VBox content = new VBox();
|
||||
content.visibleProperty().bind(placeholder.not().and(emptyProperty().not()));
|
||||
content.managedProperty().bind(placeholder.not().and(emptyProperty().not()));
|
||||
|
||||
VBox contentPlaceholder = new VBox();
|
||||
contentPlaceholder.visibleProperty().bind(placeholder);
|
||||
contentPlaceholder.managedProperty().bind(placeholder);
|
||||
|
||||
Label label = new Label();
|
||||
label.textProperty().bind(textProperty());
|
||||
|
||||
wrapper = new StackPane(content, contentPlaceholder, label);
|
||||
setGraphic(wrapper);
|
||||
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Node getSnapshotNode() {
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
private final BooleanProperty placeholder = new SimpleBooleanProperty(this, "placeholder", false);
|
||||
|
||||
@Override
|
||||
protected void updateItem(Asiakas Asiakas, boolean empty) {
|
||||
super.updateItem(Asiakas, empty);
|
||||
|
||||
placeholder.set(false);
|
||||
|
||||
|
||||
if (Asiakas != null && !empty) {
|
||||
if (Asiakas == getMultiColumnListView().getPlaceholderFrom()) {
|
||||
placeholder.set(true);
|
||||
setText(Asiakas.getNimi() + ": " + Asiakas.getOsoite());
|
||||
} else if (Asiakas == getMultiColumnListView().getPlaceholderTo()) {
|
||||
placeholder.set(true);
|
||||
setText(Asiakas.getNimi() + ": " + Asiakas.getOsoite());
|
||||
} else {
|
||||
setText(Asiakas.getNimi() + ": " + Asiakas.getOsoite());
|
||||
}
|
||||
} else {
|
||||
setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package fi.lpam.gui.elementit;
|
||||
|
||||
import javafx.scene.control.Spinner;
|
||||
import javafx.scene.control.SpinnerValueFactory;
|
||||
|
||||
public class IntegerSpinner extends Spinner<Integer> {
|
||||
/**
|
||||
* Min 0, Max 50
|
||||
*/
|
||||
public IntegerSpinner() {
|
||||
super(new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 50));
|
||||
this.setEditable(true);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param min _
|
||||
* @param max _
|
||||
*/
|
||||
public IntegerSpinner(int min, int max) {
|
||||
super(new SpinnerValueFactory.IntegerSpinnerValueFactory(min, max));
|
||||
this.setEditable(true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package fi.lpam.gui.elementit;
|
||||
|
||||
import javafx.scene.control.TableColumn;
|
||||
|
||||
public class MaaraTableColumn<Asiakas, Integer> extends TableColumn<Asiakas, Integer> {
|
||||
public MaaraTableColumn(String columnLabel, int minWidth) {
|
||||
super(columnLabel);
|
||||
this.setResizable(false);
|
||||
this.setReorderable(false);
|
||||
this.setMinWidth(minWidth);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package fi.lpam.gui.elementit;
|
||||
|
||||
import fi.lpam.dataluokat.RaporttiRivi;
|
||||
import javafx.scene.control.TableCell;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
/**
|
||||
* Kustomoitu TableCell, joka päivitäTietokantaan sen sisältämän LocalDaten muotoon dd.MM.yyyy
|
||||
*/
|
||||
public class PaivamaaraTableCell extends TableCell<RaporttiRivi, LocalDate> {
|
||||
public PaivamaaraTableCell() {}
|
||||
|
||||
@Override
|
||||
protected void updateItem(LocalDate aika, boolean empty) {
|
||||
super.updateItem(aika, empty);
|
||||
if (empty || aika == null) return;
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
|
||||
String muokattuAika = aika.format(formatter);
|
||||
setText(muokattuAika);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package fi.lpam.gui.elementit;
|
||||
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.layout.*;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.text.Font;
|
||||
import javafx.scene.text.FontWeight;
|
||||
|
||||
/**
|
||||
* Käyttöliittymän pohja
|
||||
*/
|
||||
public class TabPohja extends StackPane {
|
||||
public static final Insets oletusInsets = new Insets(5);
|
||||
public static final String oletusStyle = "-fx-background-color: lightgray;";
|
||||
public static final Font otsikkoFont = Font.font("Open Sans", FontWeight.BOLD, 18);
|
||||
public static final Font buttonFont = Font.font("Open Sans", FontWeight.BOLD, 16);
|
||||
public static final Font tekstiFont = Font.font("Open Sans", FontWeight.NORMAL, 16);
|
||||
public static final Border oletusBorder = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), BorderWidths.DEFAULT));
|
||||
|
||||
public TabPohja() {
|
||||
this.setStyle(oletusStyle);
|
||||
this.setPadding(oletusInsets);
|
||||
this.setBorder(oletusBorder);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package fi.lpam.gui.virheDialogit;
|
||||
|
||||
public class SiirtoVirhe extends TietokantaVirhe{
|
||||
public SiirtoVirhe(Exception e){
|
||||
this.setHeaderText("Virhe datan siirrossa");
|
||||
this.setContentText(e.getMessage());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package fi.lpam.gui.virheDialogit;
|
||||
|
||||
import fi.lpam.Main;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
abstract class TietokantaVirhe extends Alert {
|
||||
public TietokantaVirhe() {
|
||||
super(AlertType.ERROR);
|
||||
this.setTitle("Tietokanta");
|
||||
ImageView sql = new ImageView(new Image(Objects.requireNonNull(Main.class.getResourceAsStream("tietokanta.png"))));
|
||||
sql.setPreserveRatio(true);
|
||||
sql.setFitHeight(100);
|
||||
this.setGraphic(sql);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package fi.lpam.gui.virheDialogit;
|
||||
|
||||
public class YhteysVirhe extends TietokantaVirhe{
|
||||
public YhteysVirhe(Exception error){
|
||||
this.setHeaderText("Virhe yhdistäessä tietokantaan");
|
||||
this.setContentText(error.getMessage());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user