ed76bab9a1
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
209 lines
9.1 KiB
Java
209 lines
9.1 KiB
Java
package fi.lpam.dataluokat;
|
|
|
|
import fi.lpam.gui.virheDialogit.SiirtoVirhe;
|
|
|
|
import java.sql.*;
|
|
import java.time.LocalDate;
|
|
import java.util.ArrayList;
|
|
|
|
@SuppressWarnings({"ClassCanBeRecord", "DuplicatedCode"})
|
|
public class RaporttiRivi {
|
|
private final String nimi;
|
|
private final LocalDate pvm;
|
|
private final Kuljetus.Tyyppi tyyppi;
|
|
private final int salaatit, pääruoat, jälkiruoat;
|
|
private final String erva;
|
|
private final String lisätiedot;
|
|
private final String yhteyshenkilönNimi, laskutusOsoite, yhteyshenkilönPuhelinnumero, yhteyshenkilönSähköposti;
|
|
|
|
private 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,
|
|
String erva,
|
|
Kuljetus.Tyyppi tyyppi) {
|
|
this.nimi = nimi;
|
|
this.pvm = pvm;
|
|
this.tyyppi = tyyppi;
|
|
this.salaatit = salaatit;
|
|
this.pääruoat = pääruoat;
|
|
this.jälkiruoat = jälkiruoat;
|
|
this.lisätiedot = lisätiedot;
|
|
this.erva = erva;
|
|
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) {
|
|
ArrayList<RaporttiRivi> raportti = new ArrayList<>();
|
|
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
|
ResultSet rs;
|
|
if (tarkka) {
|
|
//Jokainen kuljetus saa oman rivin
|
|
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,
|
|
asiakkaat.erityisruokavalio,
|
|
kuljetukset.tyyppi
|
|
from kuljetukset
|
|
left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id
|
|
where (kuljetusPäivämäärä between ? and ?) and (kuljetukset.salaatit > 0 or kuljetukset.pääruoat > 0 or kuljetukset.jälkiruoat > 0 or LENGTH(kuljetukset.lisätieto) > 3)
|
|
order by asiakkaat.yhteyshenkilönNimi DESC, kuljetukset.nimi, kuljetukset.kuljetusPäivämäärä, kuljetukset.tyyppi
|
|
""");
|
|
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(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++),
|
|
rs.getString(i++),
|
|
Kuljetus.Tyyppi.valueOf(rs.getString(i++))
|
|
);
|
|
raportti.add(uusi);
|
|
}
|
|
|
|
} else {
|
|
//Kuljetukset summataan yhteen riviin per vastaanottaja
|
|
PreparedStatement stmt = tietokanta.prepareStatement("""
|
|
select kuljetukset.asiakasID,
|
|
kuljetukset.nimi,
|
|
kuljetukset.kuljetusPäivämäärä,
|
|
sum(kuljetukset.salaatit) as salaatit,
|
|
sum(kuljetukset.pääruoat) as pääruoat,
|
|
sum(kuljetukset.jälkiruoat) as jälkiruoat,
|
|
group_concat(kuljetukset.lisätieto, ?),
|
|
asiakkaat.yhteyshenkilönNimi,
|
|
asiakkaat.laskutusosoite,
|
|
asiakkaat.yhteyshenkilönPuhelinnumero,
|
|
asiakkaat.yhteyshenkilönSähköposti,
|
|
asiakkaat.erityisruokavalio,
|
|
kuljetukset.tyyppi
|
|
from kuljetukset
|
|
left join asiakkaat on kuljetukset.asiakasID=asiakkaat.id
|
|
where (kuljetusPäivämäärä between ? and ?) and (kuljetukset.salaatit > 0 or kuljetukset.pääruoat > 0 or kuljetukset.jälkiruoat > 0 or LENGTH(kuljetukset.lisätieto) > 3)
|
|
group by kuljetukset.nimi, kuljetukset.tyyppi
|
|
order by asiakkaat.yhteyshenkilönNimi DESC, kuljetukset.nimi, kuljetukset.kuljetusPäivämäärä, kuljetukset.tyyppi
|
|
""");
|
|
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(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++),
|
|
rs.getString(i++),
|
|
Kuljetus.Tyyppi.valueOf(rs.getString(i++))
|
|
);
|
|
raportti.add(uusi);
|
|
}
|
|
}
|
|
} catch (SQLException e) {
|
|
SiirtoVirhe virhe = new SiirtoVirhe(e);
|
|
virhe.showAndWait();
|
|
return null;
|
|
}
|
|
return raportti;
|
|
}
|
|
@Override
|
|
public String toString() {
|
|
|
|
String laskutustiedot = "\n" + yhteyshenkilönNimi +
|
|
"\n" + laskutusOsoite +
|
|
"\n" + yhteyshenkilönPuhelinnumero +
|
|
"\n" + yhteyshenkilönSähköposti;
|
|
|
|
return nimi + " " + erva +
|
|
"\n" + tyyppi + " Sal: " + salaatit + ", Pr: " + pääruoat + ", Jr: " + jälkiruoat +
|
|
"\nLisätiedot:\n" +
|
|
getLisätiedot() +
|
|
laskutustiedot.replace("\nnull", "").strip();
|
|
}
|
|
|
|
public String getNimi() {
|
|
return nimi;
|
|
}
|
|
|
|
public LocalDate getPvm() {
|
|
return pvm;
|
|
}
|
|
|
|
public int getSalaatit() {
|
|
return salaatit;
|
|
}
|
|
|
|
public int getPääruoat() {
|
|
return pääruoat;
|
|
}
|
|
|
|
public int getJälkiruoat() {
|
|
return jälkiruoat;
|
|
}
|
|
|
|
public String getLisä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;
|
|
}
|
|
|
|
public String getErva() {
|
|
return erva;
|
|
}
|
|
|
|
public Kuljetus.Tyyppi getTyyppi() {
|
|
return tyyppi;
|
|
}
|
|
} |