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.geometry.Pos; import javafx.geometry.Side; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; 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, tfYhteyshenkilönNimi, tfLaskutusOsoite, tfYhteyshenkilönPuhelinnumero, tfYhteyshenkilönSähköposti; final IntegerSpinner tfMaanantai, tfTiistai, tfKeskiviikko, tfTorstai, tfPerjantai, tfLauantai, tfSunnuntai, tfSalaatit, tfPääruoat, tfJälkiruoat; final IntegerSpinner tfDinnerMaanantai, tfDinnerTiistai, tfDinnerKeskiviikko, tfDinnerTorstai, tfDinnerPerjantai, tfDinnerLauantai, tfDinnerSunnuntai, tfDinnerSalaatit, tfDinnerPääruoat, tfDinnerJä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; if (käsiteltäväAsiakas.getNimi() != null) { this.setTitle(käsiteltäväAsiakas.getNimi()); } else { this.setTitle("Uusi asiakas"); } HBox hbTiedot = new HBox(); hbTiedot.setOnKeyPressed(e -> { switch (e.getCode()) { case ENTER: tallenna(); break; case ESCAPE: close(); break; default: break; }}); GridPane lounasTiedot = new GridPane(); lounasTiedot.setPadding(new Insets(15)); lounasTiedot.setHgap(10); lounasTiedot.setVgap(10); lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lounaat per kuljetus")); Label salaatit = new Label("Salaatit"); tfSalaatit = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), salaatit, tfSalaatit); Label pääruoat = new Label("Pääruoat"); tfPääruoat = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), pääruoat, tfPääruoat); Label jälkiruoat = new Label("Jälkiruoat"); tfJälkiruoat = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), jälkiruoat, tfJälkiruoat); lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Kuljetukset per päivä")); Label maanantai = new Label("Maanantai"); tfMaanantai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), maanantai, tfMaanantai); Label tiistai = new Label("Tiistai"); tfTiistai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), tiistai, tfTiistai); Label keskiviikko = new Label("Keskiviikko"); tfKeskiviikko = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), keskiviikko, tfKeskiviikko); Label torstai = new Label("Torstai"); tfTorstai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), torstai, tfTorstai); Label perjantai = new Label("Perjantai"); tfPerjantai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), perjantai, tfPerjantai); tfLauantai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Lauantai"), tfLauantai); tfSunnuntai = new IntegerSpinner(); lounasTiedot.addRow(lounasTiedot.getRowCount(), new Label("Sunnuntai"), tfSunnuntai); GridPane päivällisTiedot = new GridPane(); päivällisTiedot.setPadding(new Insets(15)); päivällisTiedot.setHgap(10); päivällisTiedot.setVgap(10); Button kopioiLounasPäivälliseen = new Button("Kopioi lounasmäärät"); kopioiLounasPäivälliseen.setOnAction(_->kopioiLounasmäärätPäivälliselle()); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Päivälliset per kuljetus"), kopioiLounasPäivälliseen); tfDinnerSalaatit = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Salaatit"), tfDinnerSalaatit); tfDinnerPääruoat = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Pääruoat"), tfDinnerPääruoat); tfDinnerJälkiruoat = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Jälkiruoat"), tfDinnerJälkiruoat); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Kuljetukset per päivä")); tfDinnerMaanantai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Maanantai"), tfDinnerMaanantai); tfDinnerTiistai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Tiistai"), tfDinnerTiistai); tfDinnerKeskiviikko = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Keskiviikko"), tfDinnerKeskiviikko); tfDinnerTorstai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Torstai"), tfDinnerTorstai); tfDinnerPerjantai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Perjantai"), tfDinnerPerjantai); tfDinnerLauantai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Lauantai"), tfDinnerLauantai); tfDinnerSunnuntai = new IntegerSpinner(); päivällisTiedot.addRow(päivällisTiedot.getRowCount(), new Label("Sunnuntai"), tfDinnerSunnuntai); GridPane asiakasTiedot = new GridPane(); asiakasTiedot.setPadding(new Insets(15)); asiakasTiedot.setHgap(10); asiakasTiedot.setVgap(10); Label nimi = new Label("Asiakkaan etu- ja sukunimi"); nimi.setStyle("-fx-font-weight: bold;"); tfNimi = new TextField(); tfNimi.setPromptText("Pakollinen tieto"); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), nimi, tfNimi); Label osoite = new Label("Osoite"); osoite.setStyle("-fx-font-weight: bold;"); tfOsoite = new TextField(); tfOsoite.setPromptText("Pakollinen tieto"); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), osoite, tfOsoite); Label yhteyshenkilönNimi = new Label("Yhteyshenkilön etu- ja sukunimi"); tfYhteyshenkilönNimi = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönNimi, tfYhteyshenkilönNimi); Label laskutusOsoite = new Label("Laskutusosoite"); tfLaskutusOsoite = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), laskutusOsoite, tfLaskutusOsoite); Label yhteyshenkilönPuhelinnumero = new Label("Puhelinnumero"); tfYhteyshenkilönPuhelinnumero = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönPuhelinnumero, tfYhteyshenkilönPuhelinnumero); Label yhteyshenkilönSähköposti = new Label("Sähköposti"); tfYhteyshenkilönSähköposti = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), yhteyshenkilönSähköposti, tfYhteyshenkilönSähköposti); Label ruokarajoitteet = new Label("Ruokarajoitteet"); tfRuokarajoitteet = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), ruokarajoitteet, tfRuokarajoitteet); Label avainTieto = new Label("Avaintieto"); tfAvainTieto = new TextField(); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), avainTieto, tfAvainTieto); Label lisätiedot = new Label("Kuljetuksen lisätiedot"); tfLisätiedot = new TextField(); tfLisätiedot.setPromptText("Näkyy raporteilla"); asiakasTiedot.addRow(asiakasTiedot.getRowCount(), lisätiedot, tfLisätiedot); hbTiedot.getChildren().addAll(asiakasTiedot, lounasTiedot, päivällisTiedot); HBox napit = new HBox(); Button peruuta = new Button("Peruuta"); peruuta.setFont(TabPohja.BUTTON_FONT); peruuta.setOnAction(_ -> this.close()); Button tallenna = new Button("Tallenna"); tallenna.setFont(TabPohja.BUTTON_FONT); tallenna.setOnAction(_ -> tallenna()); napit.getChildren().addAll(peruuta, tallenna); napit.setAlignment(Pos.CENTER_RIGHT); napit.setSpacing(10); napit.setPadding(TabPohja.INSETS); VBox root = new VBox(); root.getChildren().addAll(hbTiedot, napit); this.setScene(new Scene(root)); this.getIcons().add(new Image(Objects.requireNonNull(Main.class.getClassLoader().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()); tfLauantai.getValueFactory().setValue(käsiteltäväAsiakas.getLauantaiKpl()); tfSunnuntai.getValueFactory().setValue(käsiteltäväAsiakas.getSunnuntaiKpl()); 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()); tfDinnerMaanantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerMaanantaiKpl()); tfDinnerTiistai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerTiistaiKpl()); tfDinnerKeskiviikko.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerKeskiviikkoKpl()); tfDinnerTorstai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerTorstaiKpl()); tfDinnerPerjantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerPerjantaiKpl()); tfDinnerLauantai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerLauantaiKpl()); tfDinnerSunnuntai.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerSunnuntaiKpl()); tfDinnerSalaatit.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerSalaatit()); tfDinnerPääruoat.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerPääruoat()); tfDinnerJälkiruoat.getValueFactory().setValue(käsiteltäväAsiakas.getDinnerJälkiruoat()); tfRuokarajoitteet.setText(käsiteltäväAsiakas.getErityisruokavalio()); tfAvainTieto.setText(käsiteltäväAsiakas.getAvainTieto()); tfLisätiedot.setText(käsiteltäväAsiakas.getLisätiedot()); tfYhteyshenkilönNimi.setText(käsiteltäväAsiakas.getYhteyshenkilönNimi()); tfLaskutusOsoite.setText(käsiteltäväAsiakas.getLaskutusOsoite()); tfYhteyshenkilönPuhelinnumero.setText(käsiteltäväAsiakas.getYhteyshenkilönPuhelinnumero()); tfYhteyshenkilönSähköposti.setText(käsiteltäväAsiakas.getYhteyshenkilönSähköposti()); } 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.setLauantaiKpl(tfLauantai.getValue()); käsiteltäväAsiakas.setSunnuntaiKpl(tfSunnuntai.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.setDinnerMaanantaiKpl(tfDinnerMaanantai.getValue()); käsiteltäväAsiakas.setDinnerTiistaiKpl(tfDinnerTiistai.getValue()); käsiteltäväAsiakas.setDinnerKeskiviikkoKpl(tfDinnerKeskiviikko.getValue()); käsiteltäväAsiakas.setDinnerTorstaiKpl(tfDinnerTorstai.getValue()); käsiteltäväAsiakas.setDinnerPerjantaiKpl(tfDinnerPerjantai.getValue()); käsiteltäväAsiakas.setDinnerLauantaiKpl(tfDinnerLauantai.getValue()); käsiteltäväAsiakas.setDinnerSunnuntaiKpl(tfDinnerSunnuntai.getValue()); käsiteltäväAsiakas.setDinnerSalaatit(tfDinnerSalaatit.getValue()); käsiteltäväAsiakas.setDinnerPääruoat(tfDinnerPääruoat.getValue()); käsiteltäväAsiakas.setDinnerJälkiruoat(tfDinnerJä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()); käsiteltäväAsiakas.setYhteyshenkilönNimi(tfYhteyshenkilönNimi.getText()); käsiteltäväAsiakas.setLaskutusOsoite(tfLaskutusOsoite.getText()); käsiteltäväAsiakas.setYhteyshenkilönPuhelinnumero(tfYhteyshenkilönPuhelinnumero.getText()); käsiteltäväAsiakas.setYhteyshenkilönSähköposti(tfYhteyshenkilönSähköposti.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() + käsiteltäväAsiakas.getLauantaiKpl() + käsiteltäväAsiakas.getSunnuntaiKpl(); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Onnistuimme!"); alert.setHeaderText("Asiakkaan tallentaminen onnistui!"); //TODO tähän myös dinneri määrät... alert.setContentText(String.format("%s saa lounaalla 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); } private void kopioiLounasmäärätPäivälliselle() { tfDinnerMaanantai.getValueFactory().setValue(tfMaanantai.getValue()); tfDinnerTiistai.getValueFactory().setValue(tfTiistai.getValue()); tfDinnerKeskiviikko.getValueFactory().setValue(tfKeskiviikko.getValue()); tfDinnerTorstai.getValueFactory().setValue(tfTorstai.getValue()); tfDinnerPerjantai.getValueFactory().setValue(tfPerjantai.getValue()); tfDinnerLauantai.getValueFactory().setValue(tfLauantai.getValue()); tfDinnerSunnuntai.getValueFactory().setValue(tfSunnuntai.getValue()); tfDinnerSalaatit.getValueFactory().setValue(tfSalaatit.getValue()); tfDinnerPääruoat.getValueFactory().setValue(tfPääruoat.getValue()); tfDinnerJälkiruoat.getValueFactory().setValue(tfJälkiruoat.getValue()); } }