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();