package fi.lpam.gui; import fi.lpam.Main; 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.Button; import javafx.scene.control.Label; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.KeyCode; import javafx.scene.input.MouseEvent; import javafx.scene.layout.*; import java.awt.*; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Objects; import java.util.Optional; @SuppressWarnings("unchecked") public class Asiakashallinta extends TabPohja { final TableView 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(Double.parseDouble(Main.properties.getProperty("insets"))); yläpalkinNapit.setPadding(oletusInsets); yläpalkki.setRight(yläpalkinNapit); Button avaaVersioloki = new Button("VERSIOLOKI"); avaaVersioloki.setFont(buttonFont); avaaVersioloki.setOnAction(_ -> { try { Desktop.getDesktop().browse(new URI("https://git.lpam.fi/laurimaaninka/Ruokamanageri/src/branch/master/CHANGELOG.md")); } catch (IOException | URISyntaxException e) { System.out.println(e.getMessage()); } }); yläpalkinNapit.getChildren().add(avaaVersioloki); Button poistaValittu = new Button("Poista"); poistaValittu.setOnAction(_ -> poistaValittu()); poistaValittu.setFont(buttonFont); yläpalkinNapit.getChildren().add(poistaValittu); Button muokkaaAsiakasta = new Button("Muokkaa"); muokkaaAsiakasta.setOnAction(_ -> muokkaaValittua()); muokkaaAsiakasta.setFont(buttonFont); yläpalkinNapit.getChildren().add(muokkaaAsiakasta); Button uusiAsiakas = new Button("Uusi asiakas"); uusiAsiakas.setOnAction(_ -> uusiAsiakas()); uusiAsiakas.setFont(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 tcId = new TableColumn<>("Id"); tcId.setCellValueFactory(new PropertyValueFactory<>("id")); TableColumn tcNimi = new TableColumn<>("Nimi"); tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi")); TableColumn tcOsoite = new TableColumn<>("Osoite"); tcOsoite.setCellValueFactory(new PropertyValueFactory<>("osoite")); int minWidth = 40; TableColumn> tcKuljetuspäivät = new TableColumn<>("Kuljetukset per päivä"); MaaraTableColumn tcMaanantaiKpl = new MaaraTableColumn<>("MA", minWidth); tcMaanantaiKpl.setCellValueFactory(new PropertyValueFactory<>("maanantaiKpl")); MaaraTableColumn tcTiistaiKpl = new MaaraTableColumn<>("TI", minWidth); tcTiistaiKpl.setCellValueFactory(new PropertyValueFactory<>("tiistaiKpl")); MaaraTableColumn tcKeskiviikkoKpl = new MaaraTableColumn<>("KE", minWidth); tcKeskiviikkoKpl.setCellValueFactory(new PropertyValueFactory<>("keskiviikkoKpl")); MaaraTableColumn tcTorstaiKpl = new MaaraTableColumn<>("TO", minWidth); tcTorstaiKpl.setCellValueFactory(new PropertyValueFactory<>("torstaiKpl")); MaaraTableColumn tcPerjantaiKpl = new MaaraTableColumn<>("PE", minWidth); tcPerjantaiKpl.setCellValueFactory(new PropertyValueFactory<>("perjantaiKpl")); MaaraTableColumn tcLauantaiKpl = new MaaraTableColumn<>("LA", minWidth); tcLauantaiKpl.setCellValueFactory(new PropertyValueFactory<>("lauantaiKpl")); MaaraTableColumn tcSunnuntaiKpl = new MaaraTableColumn<>("SU", minWidth); tcSunnuntaiKpl.setCellValueFactory(new PropertyValueFactory<>("sunnuntaiKpl")); tcKuljetuspäivät.getColumns().addAll(tcMaanantaiKpl, tcTiistaiKpl, tcKeskiviikkoKpl, tcTorstaiKpl, tcPerjantaiKpl, tcLauantaiKpl, tcSunnuntaiKpl); TableColumn> tcKuljetusmäärät = new TableColumn<>("Määrät per kuljetus"); MaaraTableColumn tcSalaatit = new MaaraTableColumn<>("Salaatit", minWidth, 150); tcSalaatit.setCellValueFactory(new PropertyValueFactory<>("salaatit")); MaaraTableColumn tcPääruoat = new MaaraTableColumn<>("Pääruoat", minWidth, 150); tcPääruoat.setCellValueFactory(new PropertyValueFactory<>("pääruoat")); MaaraTableColumn tcJälkiruoat = new MaaraTableColumn<>("Jälkiruoat", minWidth, 150); tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat")); tcKuljetusmäärät.getColumns().addAll(tcSalaatit, tcPääruoat, tcJälkiruoat); TableColumn tcErityisruokavalio = new TableColumn<>("Ruokarajoitteet"); tcErityisruokavalio.setCellValueFactory(new PropertyValueFactory<>("erityisruokavalio")); TableColumn tcAvainTieto = new TableColumn<>("Avaintieto"); tcAvainTieto.setCellValueFactory(new PropertyValueFactory<>("avainTieto")); TableColumn tcLisätiedot = new TableColumn<>("Lisätieto kuljetukselle"); tcLisätiedot.setCellValueFactory(new PropertyValueFactory<>("lisätiedot")); TableColumn tcYhteyshenkilönNimi = new TableColumn<>("Yhteyshenkilö"); tcYhteyshenkilönNimi.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönNimi")); TableColumn tcLaskutusOsoite = new TableColumn<>("Laskutusosoite"); tcLaskutusOsoite.setCellValueFactory(new PropertyValueFactory<>("laskutusOsoite")); TableColumn tcYhteyshenkilönPuhelinnumero = new TableColumn<>("Yhteyshenkilön puhelinnumero"); tcYhteyshenkilönPuhelinnumero.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönPuhelinnumero")); TableColumn tcYhteyshenkilönSähköposti = new TableColumn<>("Yhteyshenkilön sähköposti"); tcYhteyshenkilönSähköposti.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönSähköposti")); tvAsiakkaat.getColumns().addAll(tcId, tcNimi, tcOsoite, tcKuljetuspäivät, tcKuljetusmäärät, tcErityisruokavalio, tcAvainTieto, tcLisätiedot, tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti); for (TableColumn column : tvAsiakkaat.getColumns()) { column.getColumns().forEach(this::määritäColumn); määritäColumn(column); } 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 asiakas?"); alert.setContentText(valittuAsiakas.getNimi()); Optional result = alert.showAndWait(); if (result.isPresent() && result.get() == ButtonType.OK) { läpi = valittuAsiakas.poista(); } if (läpi) { tvAsiakkaat.getItems().remove(valittuAsiakas); tvAsiakkaat.refresh(); } } } private void määritäColumn(TableColumn column) { column.setEditable(false); column.setReorderable(false); column.setResizable(true); column.setStyle( "-fx-alignment: CENTER;" + "-fx-font-size: " + Main.properties.getProperty("tekstiFonttiKoko") + "px;" + "-fx-font-family: " + Main.properties.getProperty("tekstiFontti") ); } }