Versio 2.0.0

Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
This commit is contained in:
2026-04-12 23:53:23 +03:00
parent 1fee120043
commit 4d3946d4b0
6 changed files with 142 additions and 41 deletions
@@ -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<RaporttiRivi> 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;
}
}