From 1d06dfcfc458e798a5c01689161faeb348142b93 Mon Sep 17 00:00:00 2001 From: laurimaaninka Date: Sun, 12 Apr 2026 23:53:23 +0300 Subject: [PATCH] Versio 2.0.0 Signed-off-by: laurimaaninka --- CHANGELOG.md | 5 +- pom.xml | 2 +- .../dataluokat/RaporttiRivi.java | 140 ++++++++++++++---- .../ruokamanageri/gui/KuljetusRaportit.java | 30 +++- .../tulostajat/KuljetusListaTulostaja.java | 3 +- .../tulostajat/KuljetusRaporttiTulostaja.java | 3 +- 6 files changed, 142 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 648d9fd..b8d757a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ -# 2.0.0-wip -- Asiakkaalle laskutusosoite? +# 2.0.0 +- Asiakkaalle lisätty tietoihin laskutusosoite ja yhteyshenkilön yhteystiedot +- Tiedot nousevat kuljetusraportille laskutusta varten # 1.1.1 - Integroitu versionumenointi projektiin diff --git a/pom.xml b/pom.xml index bcee7b3..be06f6f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 fi.lpam.ruokamanageri Ruokamanageri - 2.0.0-wip + 2.0.0 UTF-8 25 diff --git a/src/main/java/fi/lpam/ruokamanageri/dataluokat/RaporttiRivi.java b/src/main/java/fi/lpam/ruokamanageri/dataluokat/RaporttiRivi.java index d376af6..822d5f6 100644 --- a/src/main/java/fi/lpam/ruokamanageri/dataluokat/RaporttiRivi.java +++ b/src/main/java/fi/lpam/ruokamanageri/dataluokat/RaporttiRivi.java @@ -6,21 +6,34 @@ import java.sql.*; import java.time.LocalDate; import java.util.ArrayList; -@SuppressWarnings("ClassCanBeRecord") +@SuppressWarnings({"ClassCanBeRecord", "DuplicatedCode"}) public class RaporttiRivi { private final String nimi; - private final LocalDate alkuPvm, loppuPvm; + private final LocalDate pvm; private final int salaatit, pääruoat, jälkiruoat; private final String lisätiedot; + private final String yhteyshenkilönNimi, laskutusOsoite, yhteyshenkilönPuhelinnumero, yhteyshenkilönSähköposti; - public RaporttiRivi(String nimi, LocalDate alkuPvm, LocalDate loppuPvm, int salaatit, int pääruoat, int jälkiruoat, String lisätiedot) { + public RaporttiRivi(String nimi, + LocalDate pvm, + int salaatit, + int pääruoat, + int jälkiruoat, + String lisätiedot, + String yhteyshenkilönNimi, + String laskutusOsoite, + String yhteyshenkilönPuhelinnumero, + String yhteyshenkilönSähköposti) { this.nimi = nimi; - this.alkuPvm = alkuPvm; - this.loppuPvm = loppuPvm; + this.pvm = pvm; this.salaatit = salaatit; this.pääruoat = pääruoat; this.jälkiruoat = jälkiruoat; this.lisätiedot = lisätiedot; + this.yhteyshenkilönNimi = yhteyshenkilönNimi; + this.laskutusOsoite = laskutusOsoite; + this.yhteyshenkilönPuhelinnumero = yhteyshenkilönPuhelinnumero; + this.yhteyshenkilönSähköposti = yhteyshenkilönSähköposti; } public static ArrayList haeRaportti(LocalDate alkuPvm, LocalDate loppuPvm, boolean tarkka) { @@ -29,40 +42,82 @@ public class RaporttiRivi { ResultSet rs; if (tarkka) { //Jokainen kuljetus saa oman rivin - PreparedStatement stmt = tietokanta.prepareStatement("select nimi, kuljetusPäivämäärä, salaatit, pääruoat, jälkiruoat, lisätieto from kuljetukset where kuljetusPäivämäärä between ? and ? order by nimi"); + PreparedStatement stmt = tietokanta.prepareStatement(""" + select kuljetukset.asiakasID, + kuljetukset.nimi, + kuljetukset.kuljetusPäivämäärä, + kuljetukset.salaatit, + kuljetukset.pääruoat, + kuljetukset.jälkiruoat, + kuljetukset.lisätieto, + asiakkaat.yhteyshenkilönNimi, + asiakkaat.laskutusosoite, + asiakkaat.yhteyshenkilönPuhelinnumero, + asiakkaat.yhteyshenkilönSähköposti + from kuljetukset + left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id + where kuljetusPäivämäärä between ? and ? + order by kuljetukset.nimi + """); stmt.setDate(1, Date.valueOf(alkuPvm)); stmt.setDate(2, Date.valueOf(loppuPvm)); rs = stmt.executeQuery(); while (rs.next()) { + int i = 2; RaporttiRivi uusi = new RaporttiRivi( - rs.getString(1), - rs.getDate(2).toLocalDate(), - rs.getDate(2).toLocalDate(), - rs.getInt(3), - rs.getInt(4), - rs.getInt(5), - rs.getString(6) + rs.getString(i++), + rs.getDate(i++).toLocalDate(), + rs.getInt(i++), + rs.getInt(i++), + rs.getInt(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++) ); raportti.add(uusi); } } else { //Kuljetukset summataan yhteen riviin per vastaanottaja - PreparedStatement stmt = tietokanta.prepareStatement("select nimi, kuljetusPäivämäärä, sum(salaatit), sum(pääruoat), sum(jälkiruoat), group_concat(lisätieto, '\n') from kuljetukset where kuljetusPäivämäärä between ? and ? group by nimi order by nimi;"); - stmt.setDate(1, Date.valueOf(alkuPvm)); - stmt.setDate(2, Date.valueOf(loppuPvm)); + PreparedStatement stmt = tietokanta.prepareStatement(""" + select kuljetukset.asiakasID, + kuljetukset.nimi, + kuljetukset.kuljetusPäivämäärä, + sum(kuljetukset.salaatit), + sum(kuljetukset.pääruoat), + sum(kuljetukset.jälkiruoat), + group_concat(kuljetukset.lisätieto, ?), + asiakkaat.yhteyshenkilönNimi, + asiakkaat.laskutusosoite, + asiakkaat.yhteyshenkilönPuhelinnumero, + asiakkaat.yhteyshenkilönSähköposti + from kuljetukset + left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id + where kuljetusPäivämäärä between ? and ? + group by kuljetukset.nimi + order by kuljetukset.nimi + """); + stmt.setString(1, "\n"); + stmt.setDate(2, Date.valueOf(alkuPvm)); + stmt.setDate(3, Date.valueOf(loppuPvm)); rs = stmt.executeQuery(); while (rs.next()) { + int i = 2; RaporttiRivi uusi = new RaporttiRivi( - rs.getString(1), - alkuPvm, - loppuPvm, - rs.getInt(3), - rs.getInt(4), - rs.getInt(5), - rs.getString(6) + rs.getString(i++), + rs.getDate(i++).toLocalDate(), + rs.getInt(i++), + rs.getInt(i++), + rs.getInt(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++), + rs.getString(i++) ); raportti.add(uusi); } @@ -76,19 +131,25 @@ public class RaporttiRivi { } @Override public String toString() { - return this.nimi + ":\nSal: " + this.salaatit + ", Pr: " + this.pääruoat + ", Jr: " + this.jälkiruoat + "\nLisätiedot:\n" + this.lisätiedot.strip(); + + String laskutustiedot = "\n" + yhteyshenkilönNimi + + "\n" + laskutusOsoite + + "\n" + yhteyshenkilönPuhelinnumero + + "\n" + yhteyshenkilönSähköposti; + + return nimi + + "\nSal: " + salaatit + ", Pr: " + pääruoat + ", Jr: " + jälkiruoat + + "\nLisätiedot:\n" + + getLisätiedot() + + laskutustiedot.replace("\nnull", "").strip(); } public String getNimi() { return nimi; } - public LocalDate getAlkuPvm() { - return alkuPvm; - } - - public LocalDate getLoppuPvm() { - return loppuPvm; + public LocalDate getPvm() { + return pvm; } public int getSalaatit() { @@ -104,6 +165,23 @@ public class RaporttiRivi { } public String getLisätiedot() { - return lisätiedot; + if (lisätiedot == null) return null; + return lisätiedot.strip().trim().stripLeading().stripTrailing(); + } + + public String getYhteyshenkilönNimi() { + return yhteyshenkilönNimi; + } + + public String getLaskutusOsoite() { + return laskutusOsoite; + } + + public String getYhteyshenkilönPuhelinnumero() { + return yhteyshenkilönPuhelinnumero; + } + + public String getYhteyshenkilönSähköposti() { + return yhteyshenkilönSähköposti; } } \ No newline at end of file diff --git a/src/main/java/fi/lpam/ruokamanageri/gui/KuljetusRaportit.java b/src/main/java/fi/lpam/ruokamanageri/gui/KuljetusRaportit.java index 313f9de..58110bd 100644 --- a/src/main/java/fi/lpam/ruokamanageri/gui/KuljetusRaportit.java +++ b/src/main/java/fi/lpam/ruokamanageri/gui/KuljetusRaportit.java @@ -59,18 +59,21 @@ public class KuljetusRaportit extends TabPohja { 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); + yläpalkinNapit.getChildren().addAll(tarkka, + new Label("Hae kuljetukset välillä:"), + alkuPvm, new Label("-"), loppuPvm, + haeKuljetukset, tulostaRaportti); root.setCenter(tableView); TableColumn tcNimi = new TableColumn<>("Nimi"); - tcNimi.setMinWidth(150); + tcNimi.setMinWidth(200); tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi")); TableColumn tcPvm = new TableColumn<>("Päivämäärä"); tcPvm.setMinWidth(150); tcPvm.setCellFactory(_ ->new PaivamaaraTableCell()); - tcPvm.setCellValueFactory(new PropertyValueFactory<>("loppuPvm")); + tcPvm.setCellValueFactory(new PropertyValueFactory<>("pvm")); TableColumn tcSalaatit = new TableColumn<>("Salaatit"); tcSalaatit.setMinWidth(100); @@ -85,10 +88,27 @@ public class KuljetusRaportit extends TabPohja { tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat")); TableColumn tcLisätiedot = new TableColumn<>("Lisätiedot"); - tcLisätiedot.setMinWidth(500); + tcLisätiedot.setMinWidth(300); tcLisätiedot.setCellValueFactory(new PropertyValueFactory<>("lisätiedot")); - tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot); + TableColumn tcYhteyshenkilönNimi = new TableColumn<>("Yhteyshenkilön nimi"); + tcYhteyshenkilönNimi.setMinWidth(200); + tcYhteyshenkilönNimi.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönNimi")); + + TableColumn tcLaskutusOsoite = new TableColumn<>("Laskutusosoite"); + tcLaskutusOsoite.setMinWidth(200); + tcLaskutusOsoite.setCellValueFactory(new PropertyValueFactory<>("laskutusOsoite")); + + TableColumn tcYhteyshenkilönPuhelinnumero = new TableColumn<>("Puhelinnumero"); + tcYhteyshenkilönPuhelinnumero.setMinWidth(200); + tcYhteyshenkilönPuhelinnumero.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönPuhelinnumero")); + + TableColumn tcYhteyshenkilönSähköposti = new TableColumn<>("Sähköposti"); + tcYhteyshenkilönSähköposti.setMinWidth(200); + tcYhteyshenkilönSähköposti.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönSähköposti")); + + tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot, + tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti); tableView.setPlaceholder(new Label("Hae raportti")); for (TableColumn sarake : tableView.getColumns()) { sarake.setSortable(false); diff --git a/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusListaTulostaja.java b/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusListaTulostaja.java index 0730dcf..0325734 100644 --- a/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusListaTulostaja.java +++ b/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusListaTulostaja.java @@ -45,8 +45,9 @@ public class KuljetusListaTulostaja extends Tulostaja{ siirräOsoitinta(NIMEN_LEVEYS); sisältö.showText(kuljetus.getLisätieto()); uusiRivi(RIVI_KORKEUS*0.1F); - sisältö.showText("___________________________________________________________________"); + sisältö.showText("___________________________________________________________________"); //67 alaviivaa (noin sivun leveys) } + tulosta(); } catch (IOException e) { diff --git a/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusRaporttiTulostaja.java b/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusRaporttiTulostaja.java index abc6d90..cb384f5 100644 --- a/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusRaporttiTulostaja.java +++ b/src/main/java/fi/lpam/ruokamanageri/tulostajat/KuljetusRaporttiTulostaja.java @@ -4,13 +4,14 @@ import fi.lpam.ruokamanageri.dataluokat.RaporttiRivi; import java.io.IOException; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @SuppressWarnings("DuplicatedCode") public class KuljetusRaporttiTulostaja extends Tulostaja { public void luoRaportti(ArrayList raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) { try { - sisältö.showText("Raportti aikaväliltä " + alkuPvm + " - " + loppuPvm); + sisältö.showText("Raportti aikaväliltä " + alkuPvm.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + " - " + loppuPvm.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); uusiRivi(); uusiRivi();