package fi.lpam.dataluokat; import fi.lpam.gui.virheDialogit.SiirtoVirhe; import java.sql.*; import java.time.LocalDate; import java.util.ArrayList; @SuppressWarnings("ClassCanBeRecord") public class RaporttiRivi { private final String nimi; private final LocalDate alkuPvm, loppuPvm; private final int salaatit, pääruoat, jälkiruoat; private final String lisätiedot; public RaporttiRivi(String nimi, LocalDate alkuPvm, LocalDate loppuPvm, int salaatit, int pääruoat, int jälkiruoat, String lisätiedot) { this.nimi = nimi; this.alkuPvm = alkuPvm; this.loppuPvm = loppuPvm; this.salaatit = salaatit; this.pääruoat = pääruoat; this.jälkiruoat = jälkiruoat; this.lisätiedot = lisätiedot; } public static ArrayList haeRaportti(LocalDate alkuPvm, LocalDate loppuPvm, boolean tarkka) { ArrayList raportti = new ArrayList<>(); try (Connection tietokanta = Tietokanta.haeYhteys()) { 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"); stmt.setDate(1, Date.valueOf(alkuPvm)); stmt.setDate(2, Date.valueOf(loppuPvm)); rs = stmt.executeQuery(); while (rs.next()) { 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) ); 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)); rs = stmt.executeQuery(); while (rs.next()) { RaporttiRivi uusi = new RaporttiRivi( rs.getString(1), alkuPvm, loppuPvm, rs.getInt(3), rs.getInt(4), rs.getInt(5), rs.getString(6) ); raportti.add(uusi); } } } catch (SQLException e) { SiirtoVirhe virhe = new SiirtoVirhe(e); virhe.showAndWait(); return null; } return raportti; } @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(); } public String getNimi() { return nimi; } public LocalDate getAlkuPvm() { return alkuPvm; } public LocalDate getLoppuPvm() { return loppuPvm; } public int getSalaatit() { return salaatit; } public int getPääruoat() { return pääruoat; } public int getJälkiruoat() { return jälkiruoat; } public String getLisätiedot() { return lisätiedot; } }