Koodin siivousta
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
This commit is contained in:
@@ -0,0 +1,499 @@
|
||||
package fi.lpam.dataluokat;
|
||||
|
||||
import fi.lpam.gui.virheDialogit.SiirtoVirhe;
|
||||
|
||||
import java.sql.*;
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class Asiakas implements TietokantaOlio {
|
||||
private int id = -1;
|
||||
private String nimi;
|
||||
private String osoite;
|
||||
private int maanantaiKpl, tiistaiKpl, keskiviikkoKpl, torstaiKpl, perjantaiKpl, lauantaiKpl, sunnuntaiKpl;
|
||||
private int salaatit, pääruoat, jälkiruoat;
|
||||
private String erityisruokavalio;
|
||||
private String avainTieto;
|
||||
private String lisätiedot;
|
||||
private String laskutusOsoite, yhteyshenkilönNimi, yhteyshenkilönPuhelinnumero, yhteyshenkilönSähköposti;
|
||||
|
||||
/**
|
||||
* Tyhjä konstruktori uusien luomista varten
|
||||
*/
|
||||
public Asiakas() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Vain MultiColumnListViewin käyttöön
|
||||
* @param nimi Asiakkaan nimi
|
||||
*/
|
||||
public Asiakas(String nimi) {
|
||||
this.nimi = nimi;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kun luetaan asiakas tietokannasta
|
||||
* @param id asiakkaan id
|
||||
* @param nimi asiakkaan nimi
|
||||
* @param osoite osoite
|
||||
* @param maanantaiKpl kuljetettava määrä
|
||||
* @param tiistaiKpl kuljetettava määrä
|
||||
* @param keskiviikkoKpl kuljetettava määrä
|
||||
* @param torstaiKpl kuljetettava määrä
|
||||
* @param perjantaiKpl kuljetettava määrä
|
||||
* @param lauantaiKpl kuljetettava määrä
|
||||
* @param sunnuntaiKpl kuljetettava määrä
|
||||
* @param salaatit kuljetettava määrä
|
||||
* @param pääruoat kuljetettava määrä
|
||||
* @param jälkiruoat kuljetettava määrä
|
||||
* @param erityisruokavalio ...
|
||||
* @param avainTieto ...
|
||||
* @param lisätiedot mahdolliset lisätilaukset/tiedot
|
||||
* @param laskutusOsoite ...
|
||||
* @param yhteyshenkilönNimi ...
|
||||
* @param yhteyshenkilönPuhelinnumero ...
|
||||
* @param yhteyshenkilönSähköposti ...
|
||||
*/
|
||||
private Asiakas(int id,
|
||||
String nimi,
|
||||
String osoite,
|
||||
int maanantaiKpl,
|
||||
int tiistaiKpl,
|
||||
int keskiviikkoKpl,
|
||||
int torstaiKpl,
|
||||
int perjantaiKpl,
|
||||
int lauantaiKpl,
|
||||
int sunnuntaiKpl,
|
||||
int salaatit,
|
||||
int pääruoat,
|
||||
int jälkiruoat,
|
||||
String erityisruokavalio,
|
||||
String avainTieto,
|
||||
String lisätiedot,
|
||||
String laskutusOsoite,
|
||||
String yhteyshenkilönNimi,
|
||||
String yhteyshenkilönPuhelinnumero,
|
||||
String yhteyshenkilönSähköposti) {
|
||||
this.id = id;
|
||||
this.nimi = nimi;
|
||||
this.osoite = osoite;
|
||||
this.maanantaiKpl = maanantaiKpl;
|
||||
this.tiistaiKpl = tiistaiKpl;
|
||||
this.keskiviikkoKpl = keskiviikkoKpl;
|
||||
this.torstaiKpl = torstaiKpl;
|
||||
this.perjantaiKpl = perjantaiKpl;
|
||||
this.lauantaiKpl = lauantaiKpl;
|
||||
this.sunnuntaiKpl = sunnuntaiKpl;
|
||||
this.salaatit = salaatit;
|
||||
this.pääruoat = pääruoat;
|
||||
this.jälkiruoat = jälkiruoat;
|
||||
this.erityisruokavalio = erityisruokavalio;
|
||||
this.avainTieto = avainTieto;
|
||||
this.lisätiedot = lisätiedot;
|
||||
this.laskutusOsoite = laskutusOsoite;
|
||||
this.yhteyshenkilönNimi = yhteyshenkilönNimi;
|
||||
this.yhteyshenkilönPuhelinnumero = yhteyshenkilönPuhelinnumero;
|
||||
this.yhteyshenkilönSähköposti = yhteyshenkilönSähköposti;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hakee kaikki asiakkaat tietokannan asiakkaat taulusta
|
||||
* @return ArrayList<Asiakas>
|
||||
*/
|
||||
public static ArrayList<Asiakas> haeKaikki() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
Statement stmt = tietokanta.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("select * from asiakkaat");
|
||||
return parsiResultSet(rs);
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hakee tietokannasta asiakasidn perusteella asiakkaat ja palauttaa ne annetussa järjestyksessä
|
||||
* @param IDt haettavat asiakkkaat
|
||||
* @return Haetut asiakkaat tai null
|
||||
*/
|
||||
public static ArrayList<Asiakas> haeTietyt(int[] IDt) {
|
||||
StringBuilder sbIDt = new StringBuilder();
|
||||
sbIDt.append(IDt[0]);
|
||||
for (int i = 1; i < IDt.length; i++) {
|
||||
sbIDt.append(", ").append(IDt[i]);
|
||||
}
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
String sql = "select * from asiakkaat where id in (" + sbIDt + ")";
|
||||
Statement stmt = tietokanta.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(sql);
|
||||
|
||||
HashMap<Integer, Asiakas> asiakkaat = new HashMap<>(IDt.length);
|
||||
parsiResultSet(rs).forEach(asiakas -> asiakkaat.put(asiakas.getId(), asiakas));
|
||||
ArrayList<Asiakas> järjestetyt = new ArrayList<>(asiakkaat.size());
|
||||
for (int id : IDt) {
|
||||
järjestetyt.add(asiakkaat.get(id));
|
||||
}
|
||||
return järjestetyt;
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Käsittelee ResultSettiä
|
||||
* @param rs saatu ResultSet
|
||||
* @return ArrayList<Asiakas>
|
||||
*/
|
||||
private static ArrayList<Asiakas> parsiResultSet(ResultSet rs) {
|
||||
ArrayList<Asiakas> asiakkaat = new ArrayList<>();
|
||||
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Asiakas uusi = new Asiakas(
|
||||
rs.getInt("id"),
|
||||
rs.getString("nimi"),
|
||||
rs.getString("osoite"),
|
||||
rs.getInt("maanantaiKpl"),
|
||||
rs.getInt("tiistaiKpl"),
|
||||
rs.getInt("keskiviikkoKpl"),
|
||||
rs.getInt("torstaiKpl"),
|
||||
rs.getInt("perjantaiKpl"),
|
||||
rs.getInt("lauantaiKpl"),
|
||||
rs.getInt("sunnuntaiKpl"),
|
||||
rs.getInt("salaatit"),
|
||||
rs.getInt("pääruoat"),
|
||||
rs.getInt("jälkiruoat"),
|
||||
rs.getString("erityisruokavalio"),
|
||||
rs.getString("avainTieto"),
|
||||
rs.getString("lisätiedot"),
|
||||
rs.getString("laskutusOsoite"),
|
||||
rs.getString("yhteyshenkilönNimi"),
|
||||
rs.getString("yhteyshenkilönPuhelinnumero"),
|
||||
rs.getString("yhteyshenkilönSähköposti")
|
||||
);
|
||||
asiakkaat.add(uusi);
|
||||
}
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
}
|
||||
return asiakkaat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tallentaa uuden asiakkaan tietokantaan. Tietokanta luo automaattisesti id:n asiakkaalle.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public boolean tallennaUusi() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO asiakkaat (nimi, osoite, maanantaiKpl, tiistaiKpl, keskiviikkoKpl, torstaiKpl, perjantaiKpl, lauantaiKpl, sunnuntaiKpl, salaatit, pääruoat, jälkiruoat, erityisruokavalio, avainTieto, lisätiedot, laskutusosoite, yhteyshenkilönNimi, yhteyshenkilönPuhelinnumero, yhteyshenkilönSähköposti) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
|
||||
int i = 1;
|
||||
stmt.setString(i++, nimi);
|
||||
stmt.setString(i++, osoite);
|
||||
stmt.setInt(i++, maanantaiKpl);
|
||||
stmt.setInt(i++, tiistaiKpl);
|
||||
stmt.setInt(i++, keskiviikkoKpl);
|
||||
stmt.setInt(i++, torstaiKpl);
|
||||
stmt.setInt(i++, perjantaiKpl);
|
||||
stmt.setInt(i++, lauantaiKpl);
|
||||
stmt.setInt(i++, sunnuntaiKpl);
|
||||
stmt.setInt(i++, salaatit);
|
||||
stmt.setInt(i++, pääruoat);
|
||||
stmt.setInt(i++, jälkiruoat);
|
||||
stmt.setString(i++, erityisruokavalio);
|
||||
stmt.setString(i++, avainTieto);
|
||||
stmt.setString(i++, lisätiedot);
|
||||
stmt.setString(i++, laskutusOsoite);
|
||||
stmt.setString(i++, yhteyshenkilönNimi);
|
||||
stmt.setString(i++, yhteyshenkilönPuhelinnumero);
|
||||
stmt.setString(i++, yhteyshenkilönSähköposti);
|
||||
|
||||
int muokatutRivit = stmt.executeUpdate();
|
||||
|
||||
if (muokatutRivit == 0) {
|
||||
throw new SQLException("Käyttäjän luominen epäonnistui, rivejä ei muokattu");
|
||||
}
|
||||
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
|
||||
if (generatedKeys.next()) {
|
||||
this.setId(generatedKeys.getInt(1));
|
||||
}
|
||||
else {
|
||||
throw new SQLException("Käyttäjän luominen epäonnistui, id:tä ei saatu");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Päivittää kutsuvan asiakkaan tiedot tietokantaan
|
||||
*/
|
||||
@Override
|
||||
public boolean päivitäTietokantaan() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("UPDATE asiakkaat set nimi = ?, osoite = ?, maanantaiKpl = ?, tiistaiKpl = ?, keskiviikkoKpl = ?, torstaiKpl = ?, perjantaiKpl = ?, lauantaiKpl = ?, sunnuntaiKpl = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, erityisruokavalio = ?, avainTieto = ?, lisätiedot = ?, laskutusosoite = ?, yhteyshenkilönNimi = ?, yhteyshenkilönPuhelinnumero = ?, yhteyshenkilönSähköposti = ? WHERE id = ?");
|
||||
int i = 1;
|
||||
stmt.setString(i++, nimi);
|
||||
stmt.setString(i++, osoite);
|
||||
stmt.setInt(i++, maanantaiKpl);
|
||||
stmt.setInt(i++, tiistaiKpl);
|
||||
stmt.setInt(i++, keskiviikkoKpl);
|
||||
stmt.setInt(i++, torstaiKpl);
|
||||
stmt.setInt(i++, perjantaiKpl);
|
||||
stmt.setInt(i++, lauantaiKpl);
|
||||
stmt.setInt(i++, sunnuntaiKpl);
|
||||
stmt.setInt(i++, salaatit);
|
||||
stmt.setInt(i++, pääruoat);
|
||||
stmt.setInt(i++, jälkiruoat);
|
||||
stmt.setString(i++, erityisruokavalio);
|
||||
stmt.setString(i++, avainTieto);
|
||||
stmt.setString(i++, lisätiedot);
|
||||
stmt.setString(i++, laskutusOsoite);
|
||||
stmt.setString(i++, yhteyshenkilönNimi);
|
||||
stmt.setString(i++, yhteyshenkilönPuhelinnumero);
|
||||
stmt.setString(i++, yhteyshenkilönSähköposti);
|
||||
|
||||
stmt.setInt(i++, id);
|
||||
stmt.executeUpdate();
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Poistaa asiakkaan tietokannasta
|
||||
*/
|
||||
@Override
|
||||
public boolean poista() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
String sql = "DELETE FROM asiakkaat WHERE id = " + id;
|
||||
Statement stmt = tietokanta.createStatement();
|
||||
stmt.executeUpdate(sql);
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean tallenna() {
|
||||
if (this.id == -1) {
|
||||
return this.tallennaUusi();
|
||||
}
|
||||
else {
|
||||
return this.päivitäTietokantaan();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Kierroshallintaa varten toString
|
||||
* @return asiakkaan nimi
|
||||
*/
|
||||
public String toString() {
|
||||
return this.getNimi();
|
||||
}
|
||||
|
||||
public int getPäivänSalaatit(LocalDate päivä) {
|
||||
int kerroin = getKuljetusKerroin(päivä);
|
||||
return kerroin * getSalaatit();
|
||||
}
|
||||
|
||||
public int getPäivänPääruoat(LocalDate päivä) {
|
||||
int kerroin = getKuljetusKerroin(päivä);
|
||||
return kerroin * getPääruoat();
|
||||
}
|
||||
|
||||
public int getPäivänJälkiruoat(LocalDate päivä) {
|
||||
int kerroin = getKuljetusKerroin(päivä);
|
||||
return kerroin * getJälkiruoat();
|
||||
}
|
||||
|
||||
private int getKuljetusKerroin(LocalDate päivä) {
|
||||
return switch (päivä.getDayOfWeek()) {
|
||||
case DayOfWeek.MONDAY -> getMaanantaiKpl();
|
||||
case DayOfWeek.TUESDAY -> getTiistaiKpl();
|
||||
case DayOfWeek.WEDNESDAY -> getKeskiviikkoKpl();
|
||||
case DayOfWeek.THURSDAY -> getTorstaiKpl();
|
||||
case DayOfWeek.FRIDAY -> getPerjantaiKpl();
|
||||
case DayOfWeek.SATURDAY -> getLauantaiKpl();
|
||||
case DayOfWeek.SUNDAY -> getSunnuntaiKpl();
|
||||
};
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getNimi() {
|
||||
return nimi;
|
||||
}
|
||||
|
||||
public void setNimi(String nimi) {
|
||||
this.nimi = nimi;
|
||||
}
|
||||
|
||||
public String getOsoite() {
|
||||
return osoite;
|
||||
}
|
||||
|
||||
public void setOsoite(String osoite) {
|
||||
this.osoite = osoite;
|
||||
}
|
||||
|
||||
public int getMaanantaiKpl() {
|
||||
return maanantaiKpl;
|
||||
}
|
||||
|
||||
public void setMaanantaiKpl(int maanantaiKpl) {
|
||||
this.maanantaiKpl = maanantaiKpl;
|
||||
}
|
||||
|
||||
public int getTiistaiKpl() {
|
||||
return tiistaiKpl;
|
||||
}
|
||||
|
||||
public void setTiistaiKpl(int tiistaiKpl) {
|
||||
this.tiistaiKpl = tiistaiKpl;
|
||||
}
|
||||
|
||||
public int getKeskiviikkoKpl() {
|
||||
return keskiviikkoKpl;
|
||||
}
|
||||
|
||||
public void setKeskiviikkoKpl(int keskiviikkoKpl) {
|
||||
this.keskiviikkoKpl = keskiviikkoKpl;
|
||||
}
|
||||
|
||||
public int getTorstaiKpl() {
|
||||
return torstaiKpl;
|
||||
}
|
||||
|
||||
public void setTorstaiKpl(int torstaiKpl) {
|
||||
this.torstaiKpl = torstaiKpl;
|
||||
}
|
||||
|
||||
public int getPerjantaiKpl() {
|
||||
return perjantaiKpl;
|
||||
}
|
||||
|
||||
public void setPerjantaiKpl(int perjantaiKpl) {
|
||||
this.perjantaiKpl = perjantaiKpl;
|
||||
}
|
||||
|
||||
public int getLauantaiKpl() {
|
||||
return lauantaiKpl;
|
||||
}
|
||||
|
||||
public void setLauantaiKpl(int lauantaiKpl) {
|
||||
this.lauantaiKpl = lauantaiKpl;
|
||||
}
|
||||
|
||||
public int getSunnuntaiKpl() {
|
||||
return sunnuntaiKpl;
|
||||
}
|
||||
|
||||
public void setSunnuntaiKpl(int sunnuntaiKpl) {
|
||||
this.sunnuntaiKpl = sunnuntaiKpl;
|
||||
}
|
||||
|
||||
public int getSalaatit() {
|
||||
return salaatit;
|
||||
}
|
||||
|
||||
public void setSalaatit(int salaatit) {
|
||||
this.salaatit = salaatit;
|
||||
}
|
||||
|
||||
public int getPääruoat() {
|
||||
return pääruoat;
|
||||
}
|
||||
|
||||
public void setPääruoat(int pääruoat) {
|
||||
this.pääruoat = pääruoat;
|
||||
}
|
||||
|
||||
public int getJälkiruoat() {
|
||||
return jälkiruoat;
|
||||
}
|
||||
|
||||
public void setJälkiruoat(int jälkiruoat) {
|
||||
this.jälkiruoat = jälkiruoat;
|
||||
}
|
||||
|
||||
public String getErityisruokavalio() {
|
||||
return erityisruokavalio;
|
||||
}
|
||||
|
||||
public void setErityisruokavalio(String erityisruokavalio) {
|
||||
this.erityisruokavalio = erityisruokavalio;
|
||||
}
|
||||
|
||||
public String getAvainTieto() {
|
||||
return avainTieto;
|
||||
}
|
||||
|
||||
public void setAvainTieto(String avainTieto) {
|
||||
this.avainTieto = avainTieto;
|
||||
}
|
||||
|
||||
public String getLisätiedot() {
|
||||
return lisätiedot;
|
||||
}
|
||||
|
||||
public void setLisätiedot(String lisätiedot) {
|
||||
this.lisätiedot = lisätiedot;
|
||||
}
|
||||
|
||||
public String getLaskutusOsoite() {
|
||||
return laskutusOsoite;
|
||||
}
|
||||
|
||||
public void setLaskutusOsoite(String laskutusOsoite) {
|
||||
this.laskutusOsoite = laskutusOsoite;
|
||||
}
|
||||
|
||||
public String getYhteyshenkilönNimi() {
|
||||
return yhteyshenkilönNimi;
|
||||
}
|
||||
|
||||
public void setYhteyshenkilönNimi(String yhteyshenkilönNimi) {
|
||||
this.yhteyshenkilönNimi = yhteyshenkilönNimi;
|
||||
}
|
||||
|
||||
public String getYhteyshenkilönPuhelinnumero() {
|
||||
return yhteyshenkilönPuhelinnumero;
|
||||
}
|
||||
|
||||
public void setYhteyshenkilönPuhelinnumero(String yhteyshenkilönPuhelinnumero) {
|
||||
this.yhteyshenkilönPuhelinnumero = yhteyshenkilönPuhelinnumero;
|
||||
}
|
||||
|
||||
public String getYhteyshenkilönSähköposti() {
|
||||
return yhteyshenkilönSähköposti;
|
||||
}
|
||||
|
||||
public void setYhteyshenkilönSähköposti(String yhteyshenkilönSähköposti) {
|
||||
this.yhteyshenkilönSähköposti = yhteyshenkilönSähköposti;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
package fi.lpam.dataluokat;
|
||||
|
||||
import fi.lpam.gui.virheDialogit.SiirtoVirhe;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Kierros implements TietokantaOlio {
|
||||
private int id = -1;
|
||||
private int kierrosNumero;
|
||||
private ObservableList<Asiakas> asiakkaat;
|
||||
|
||||
public Kierros(int kierrosNumero, ObservableList<Asiakas> asiakkaat) {
|
||||
this.kierrosNumero = kierrosNumero;
|
||||
this.asiakkaat = asiakkaat;
|
||||
}
|
||||
|
||||
private Kierros(int id, int kierrosNumero, ObservableList<Asiakas> asiakkaat) {
|
||||
this.id = id;
|
||||
this.kierrosNumero = kierrosNumero;
|
||||
this.asiakkaat = asiakkaat;
|
||||
}
|
||||
|
||||
/** Hakee kaikki kierrokset tietokannasta
|
||||
* @return kaikki kierrokset
|
||||
*/
|
||||
public static ArrayList<Kierros> haeKaikki() {
|
||||
ArrayList<Kierros> kierrokset = new ArrayList<>();
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
Statement stmt = tietokanta.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("select id, kierrosNumero, asiakkaat from kierrokset");
|
||||
while (rs.next()) {
|
||||
kierrokset.add(new Kierros(rs.getInt(1), rs.getInt(2), FXCollections.observableArrayList(muutaMerkkijonoAsiakkaiksi(rs.getString(3)))));
|
||||
}
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
}
|
||||
return kierrokset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hakee tietyn kierroksen
|
||||
* @param kierrosNumero haettavan kierroksen numero
|
||||
* @return Kierros, null jos ei löydy
|
||||
*/
|
||||
public static Kierros haeKierros(int kierrosNumero) {
|
||||
Kierros kierros;
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("select id, kierrosNumero, asiakkaat from kierrokset where kierrosNumero = ?");
|
||||
stmt.setInt(1, kierrosNumero);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
kierros = new Kierros(rs.getInt(1), rs.getInt(2), FXCollections.observableArrayList(muutaMerkkijonoAsiakkaiksi(rs.getString(3))));
|
||||
return kierros;
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Haetaan uniikit kierrosnumerot
|
||||
* @return kierrosten uniikit kierrosnumerot
|
||||
*/
|
||||
public static ArrayList<Integer> haeKierrosNumerot() {
|
||||
ArrayList<Integer> numerot = new ArrayList<>();
|
||||
try (Connection tietotokanta = Tietokanta.haeYhteys()) {
|
||||
Statement stmt = tietotokanta.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("select distinct kierrosNumero from kierrokset ORDER BY kierrosNumero");
|
||||
while (rs.next()) {
|
||||
numerot.add(rs.getInt("kierrosNumero"));
|
||||
}
|
||||
return numerot;
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return numerot;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean tallennaUusi() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("insert into kierrokset (kierrosNumero, asiakkaat) values (?, ?)", Statement.RETURN_GENERATED_KEYS);
|
||||
stmt.setInt(1, kierrosNumero);
|
||||
stmt.setString(2, muutaAsiakkaatMerkkijonoksi());
|
||||
int muokatutRivit = stmt.executeUpdate();
|
||||
|
||||
if (muokatutRivit == 0) {
|
||||
throw new SQLException("Kierroksen luominen epäonnistui, rivejä ei muokattu");
|
||||
}
|
||||
|
||||
ResultSet luodutIDt = stmt.getGeneratedKeys();
|
||||
if (luodutIDt.next()) {
|
||||
this.id = luodutIDt.getInt(1);
|
||||
} else {
|
||||
throw new SQLException("Kierroksen luominen epäonnistui, idtä ei saatu");
|
||||
}
|
||||
}
|
||||
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean päivitäTietokantaan() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("update kierrokset set asiakkaat = ?, kierrosnumero = ? where id = ?");
|
||||
stmt.setString(1, muutaAsiakkaatMerkkijonoksi());
|
||||
stmt.setInt(2, kierrosNumero);
|
||||
stmt.setInt(3, id);
|
||||
int muokatutRivit = stmt.executeUpdate();
|
||||
if (muokatutRivit == 0) {
|
||||
throw new SQLException("Kierroksen muokkaaminen epäonnistui, rivejä ei muokattu");
|
||||
}
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean poista() {
|
||||
if (this.id < 0) return false;
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("delete from kierrokset where id = ?");
|
||||
stmt.setInt(1, id);
|
||||
int muokatutRivit = stmt.executeUpdate();
|
||||
if (muokatutRivit == 0) {
|
||||
throw new SQLException("Kierroksen poisto epäonnistui, rivejä ei muokattu");
|
||||
}
|
||||
}
|
||||
catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean tallenna() {
|
||||
if (this.id < 0) {
|
||||
return this.tallennaUusi();
|
||||
}
|
||||
else {
|
||||
return this.päivitäTietokantaan();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Muuttaa listan asiakkaista merkkijonoksi
|
||||
* @return listan asiakkaat muodossa "id id id..."
|
||||
*/
|
||||
private String muutaAsiakkaatMerkkijonoksi() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (asiakkaat.isEmpty()) {return sb.toString();}
|
||||
|
||||
Iterator<Asiakas> it = asiakkaat.iterator();
|
||||
sb.append(it.next().getId());
|
||||
while (it.hasNext()) {
|
||||
sb.append(" ").append(it.next().getId());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static ArrayList<Asiakas> muutaMerkkijonoAsiakkaiksi(String merkkijono) {
|
||||
String[] strAsiakasIDt = merkkijono.split(" ");
|
||||
int[] asiakasIDt = new int[strAsiakasIDt.length];
|
||||
for (int i = 0; i < strAsiakasIDt.length; i++) {
|
||||
asiakasIDt[i] = Integer.parseInt(strAsiakasIDt[i]);
|
||||
}
|
||||
return Asiakas.haeTietyt(asiakasIDt);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getKierrosNumero() {
|
||||
return kierrosNumero;
|
||||
}
|
||||
|
||||
public void setKierrosNumero(int kierrosNumero) {
|
||||
this.kierrosNumero = kierrosNumero;
|
||||
}
|
||||
|
||||
public ObservableList<Asiakas> getAsiakkaat() {
|
||||
return asiakkaat;
|
||||
}
|
||||
|
||||
public void setAsiakkaat(ObservableList<Asiakas> asiakkaat) {
|
||||
this.asiakkaat = asiakkaat;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.kierrosNumero + ": " + this.asiakkaat;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
package fi.lpam.dataluokat;
|
||||
|
||||
import fi.lpam.gui.virheDialogit.SiirtoVirhe;
|
||||
|
||||
import java.sql.*;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class Kuljetus implements TietokantaOlio {
|
||||
private int id = -1;
|
||||
private int asiakasID;
|
||||
private String nimi;
|
||||
private LocalDate kuljetusPäivämäärä;
|
||||
private int kuljetusKierros;
|
||||
private int salaatit, pääruoat, jälkiruoat;
|
||||
private String osoite, lisätieto, avainTieto, ruokarajoite;
|
||||
|
||||
public Kuljetus(Kuljetus vanha) {
|
||||
this.id = vanha.id;
|
||||
this.asiakasID = vanha.asiakasID;
|
||||
this.nimi = vanha.nimi;
|
||||
this.kuljetusPäivämäärä = vanha.kuljetusPäivämäärä;
|
||||
this.kuljetusKierros = vanha.kuljetusKierros;
|
||||
this.salaatit = vanha.salaatit;
|
||||
this.pääruoat = vanha.pääruoat;
|
||||
this.jälkiruoat = vanha.jälkiruoat;
|
||||
this.osoite = vanha.osoite;
|
||||
this.lisätieto = vanha.lisätieto;
|
||||
this.avainTieto = vanha.avainTieto;
|
||||
this.ruokarajoite = vanha.ruokarajoite;
|
||||
}
|
||||
|
||||
public Kuljetus(Asiakas asiakas, LocalDate pvm, int kuljetusKierros) {
|
||||
this.asiakasID = asiakas.getId();
|
||||
this.nimi = asiakas.getNimi();
|
||||
this.kuljetusPäivämäärä = pvm;
|
||||
this.kuljetusKierros = kuljetusKierros;
|
||||
this.salaatit = asiakas.getPäivänSalaatit(pvm);
|
||||
this.pääruoat = asiakas.getPäivänPääruoat(pvm);
|
||||
this.jälkiruoat = asiakas.getPäivänJälkiruoat(pvm);
|
||||
this.osoite = asiakas.getOsoite();
|
||||
this.avainTieto = asiakas.getAvainTieto();
|
||||
this.lisätieto = asiakas.getLisätiedot();
|
||||
this.ruokarajoite = asiakas.getErityisruokavalio();
|
||||
}
|
||||
|
||||
private Kuljetus(int id, int asiakasID, String nimi, LocalDate kuljetusPäivämäärä, int kuljetusKierros, int salaatit, int pääruoat, int jälkiruoat, String osoite, String lisätieto, String avainTieto, String ruokarajoite) {
|
||||
this.id = id;
|
||||
this.asiakasID = asiakasID;
|
||||
this.nimi = nimi;
|
||||
this.kuljetusPäivämäärä = kuljetusPäivämäärä;
|
||||
this.kuljetusKierros = kuljetusKierros;
|
||||
this.salaatit = salaatit;
|
||||
this.pääruoat = pääruoat;
|
||||
this.jälkiruoat = jälkiruoat;
|
||||
this.osoite = osoite;
|
||||
this.lisätieto = lisätieto;
|
||||
this.avainTieto = avainTieto;
|
||||
this.ruokarajoite = ruokarajoite;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hakee tietyn kierroksen kuljetukset
|
||||
* @param päivä kierroksen päivä
|
||||
* @param kuljetusKierros kierroksen numero
|
||||
* @return valitun päivän valitun kierroksen kuljetukset
|
||||
*/
|
||||
public static ArrayList<Kuljetus> haePäivänKuljetuksetKierroksella(LocalDate päivä, int kuljetusKierros) {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("SELECT * FROM kuljetukset WHERE kuljetusKierros = ? and kuljetusPäivämäärä = ?");
|
||||
stmt.setInt(1, kuljetusKierros);
|
||||
stmt.setDate(2, Date.valueOf(päivä));
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
return parsiResultSet(rs);
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe virhe = new SiirtoVirhe(e);
|
||||
virhe.showAndWait();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean tallennaUusi() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO kuljetukset (asiakasID, nimi, kuljetusPäivämäärä, kuljetusKierros, salaatit, pääruoat, jälkiruoat, ruokarajoite, osoite, avainTieto, lisätieto) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
|
||||
stmt.setInt(1, asiakasID);
|
||||
stmt.setString(2, nimi);
|
||||
stmt.setDate(3, Date.valueOf(kuljetusPäivämäärä));
|
||||
stmt.setInt(4, kuljetusKierros);
|
||||
stmt.setInt(5, salaatit);
|
||||
stmt.setInt(6, pääruoat);
|
||||
stmt.setInt(7, jälkiruoat);
|
||||
stmt.setString(8, ruokarajoite);
|
||||
stmt.setString(9, osoite);
|
||||
stmt.setString(10, avainTieto);
|
||||
stmt.setString(11, lisätieto);
|
||||
int muokatutRivit = stmt.executeUpdate();
|
||||
|
||||
if (muokatutRivit == 0) {
|
||||
throw new SQLException("Kuljetuksen luominen epäonnistui, rivejä ei muokattu");
|
||||
}
|
||||
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
|
||||
if (generatedKeys.next()) {
|
||||
this.setId(generatedKeys.getInt(1));
|
||||
} else {
|
||||
throw new SQLException("Kuljetuksen luominen epäonnistui, id:tä ei saatu");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean päivitäTietokantaan() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
PreparedStatement stmt = tietokanta.prepareStatement("UPDATE kuljetukset set asiakasID = ?, nimi = ?, kuljetusPäivämäärä = ?, kuljetusKierros = ?, salaatit = ?, pääruoat = ?, jälkiruoat = ?, ruokarajoite = ?, osoite = ?, avainTieto = ?, lisätieto = ? WHERE id = ?");
|
||||
stmt.setInt(1, asiakasID);
|
||||
stmt.setString(2, nimi);
|
||||
stmt.setDate(3, Date.valueOf(kuljetusPäivämäärä));
|
||||
stmt.setInt(4, kuljetusKierros);
|
||||
stmt.setInt(5, salaatit);
|
||||
stmt.setInt(6, pääruoat);
|
||||
stmt.setInt(7, jälkiruoat);
|
||||
stmt.setString(8, ruokarajoite);
|
||||
stmt.setString(9, osoite);
|
||||
stmt.setString(10, avainTieto);
|
||||
stmt.setString(11, lisätieto);
|
||||
stmt.setInt(12, id);
|
||||
stmt.executeUpdate();
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean poista() {
|
||||
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
||||
String sql = "DELETE FROM kuljetukset WHERE id = " + id;
|
||||
Statement stmt = tietokanta.createStatement();
|
||||
stmt.executeUpdate(sql);
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean tallenna() {
|
||||
if (this.id == -1) {
|
||||
return this.tallennaUusi();
|
||||
}
|
||||
else {
|
||||
return this.päivitäTietokantaan();
|
||||
}
|
||||
}
|
||||
|
||||
private static ArrayList<Kuljetus> parsiResultSet(ResultSet rs) {
|
||||
ArrayList<Kuljetus> kuljetukset = new ArrayList<>();
|
||||
|
||||
try {
|
||||
while (rs.next()) {
|
||||
Kuljetus uusi = new Kuljetus(
|
||||
rs.getInt("id"),
|
||||
rs.getInt("asiakasID"),
|
||||
rs.getString("nimi"),
|
||||
rs.getDate("kuljetusPäivämäärä").toLocalDate(),
|
||||
rs.getInt("kuljetusKierros"),
|
||||
rs.getInt("salaatit"),
|
||||
rs.getInt("pääruoat"),
|
||||
rs.getInt("jälkiruoat"),
|
||||
rs.getString("osoite"),
|
||||
rs.getString("lisätieto"),
|
||||
rs.getString("avainTieto"),
|
||||
rs.getString("ruokarajoite")
|
||||
);
|
||||
kuljetukset.add(uusi);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
SiirtoVirhe alert = new SiirtoVirhe(e);
|
||||
alert.showAndWait();
|
||||
}
|
||||
return kuljetukset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Kuljetus{" +
|
||||
"id=" + id +
|
||||
", asiakasID=" + asiakasID +
|
||||
", nimi='" + nimi + '\'' +
|
||||
", kuljetusPäivämäärä=" + kuljetusPäivämäärä +
|
||||
", kuljetusKierros=" + kuljetusKierros +
|
||||
", salaatit=" + salaatit +
|
||||
", pääruoat=" + pääruoat +
|
||||
", jälkiruoat=" + jälkiruoat +
|
||||
", osoite='" + osoite + '\'' +
|
||||
", lisätieto='" + lisätieto + '\'' +
|
||||
", avainTieto='" + avainTieto + '\'' +
|
||||
", ruokarajoite='" + ruokarajoite + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
public void nollaa() {
|
||||
setSalaatit(0);
|
||||
setPääruoat(0);
|
||||
setJälkiruoat(0);
|
||||
setLisätieto("");
|
||||
}
|
||||
|
||||
public void palautaMäärät(Asiakas asiakas) {
|
||||
setSalaatit(asiakas.getPäivänSalaatit(kuljetusPäivämäärä));
|
||||
setPääruoat(asiakas.getPäivänPääruoat(kuljetusPäivämäärä));
|
||||
setJälkiruoat(asiakas.getPäivänJälkiruoat(kuljetusPäivämäärä));
|
||||
setLisätieto(asiakas.getLisätiedot());
|
||||
}
|
||||
|
||||
public boolean kuljetetaan() {
|
||||
return salaatit > 0 || pääruoat > 0 || jälkiruoat > 0 || !lisätieto.isBlank();
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getAsiakasID() {
|
||||
return asiakasID;
|
||||
}
|
||||
|
||||
public void setAsiakasID(int asiakasID) {
|
||||
this.asiakasID = asiakasID;
|
||||
}
|
||||
|
||||
public String getNimi() {
|
||||
return nimi;
|
||||
}
|
||||
|
||||
public void setNimi(String nimi) {
|
||||
this.nimi = nimi;
|
||||
}
|
||||
|
||||
public LocalDate getKuljetusPäivämäärä() {
|
||||
return kuljetusPäivämäärä;
|
||||
}
|
||||
|
||||
public void setKuljetusPäivämäärä(LocalDate kuljetusPäivämäärä) {
|
||||
this.kuljetusPäivämäärä = kuljetusPäivämäärä;
|
||||
}
|
||||
|
||||
public int getKuljetusKierros() {
|
||||
return kuljetusKierros;
|
||||
}
|
||||
|
||||
public void setKuljetusKierros(int kuljetusKierros) {
|
||||
this.kuljetusKierros = kuljetusKierros;
|
||||
}
|
||||
|
||||
public int getSalaatit() {
|
||||
return salaatit;
|
||||
}
|
||||
|
||||
public void setSalaatit(int salaatit) {
|
||||
this.salaatit = salaatit;
|
||||
}
|
||||
|
||||
public int getPääruoat() {
|
||||
return pääruoat;
|
||||
}
|
||||
|
||||
public void setPääruoat(int pääruoat) {
|
||||
this.pääruoat = pääruoat;
|
||||
}
|
||||
|
||||
public int getJälkiruoat() {
|
||||
return jälkiruoat;
|
||||
}
|
||||
|
||||
public void setJälkiruoat(int jälkiruoat) {
|
||||
this.jälkiruoat = jälkiruoat;
|
||||
}
|
||||
|
||||
public String getOsoite() {
|
||||
return osoite;
|
||||
}
|
||||
|
||||
public void setOsoite(String osoite) {
|
||||
this.osoite = osoite;
|
||||
}
|
||||
|
||||
public String getLisätieto() {
|
||||
return lisätieto;
|
||||
}
|
||||
|
||||
public void setLisätieto(String lisätieto) {
|
||||
this.lisätieto = lisätieto;
|
||||
}
|
||||
|
||||
public String getAvainTieto() {
|
||||
return avainTieto;
|
||||
}
|
||||
|
||||
public void setAvainTieto(String avainTieto) {
|
||||
this.avainTieto = avainTieto;
|
||||
}
|
||||
|
||||
public String getRuokarajoite() {
|
||||
return ruokarajoite;
|
||||
}
|
||||
|
||||
public void setRuokarajoite(String ruokarajoite) {
|
||||
this.ruokarajoite = ruokarajoite;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
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 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 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.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) {
|
||||
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
|
||||
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(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 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(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);
|
||||
}
|
||||
}
|
||||
} 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 +
|
||||
"\nSal: " + 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package fi.lpam.dataluokat;
|
||||
|
||||
import fi.lpam.gui.virheDialogit.SiirtoVirhe;
|
||||
|
||||
import fi.lpam.Main;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.*;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Tietokanta {
|
||||
private static String osoite;
|
||||
private static String dbPath = SystemUtils.getUserHome().getAbsolutePath() + "\\OneDrive\\Kuljetusruokasovellus\\tietokanta.db";
|
||||
|
||||
public Tietokanta(boolean dev) {
|
||||
if (dev) dbPath = "testikanta.db";
|
||||
File file = new File(dbPath);
|
||||
try {
|
||||
boolean _ = file.getParentFile().mkdirs();
|
||||
boolean _ = file.createNewFile();
|
||||
}
|
||||
catch (Exception _) {}
|
||||
|
||||
osoite = "jdbc:sqlite:" + file.getAbsolutePath();
|
||||
|
||||
|
||||
try (Connection conn = haeYhteys()) {
|
||||
InputStream is = Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("tietokanta.sql"));
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(is));
|
||||
String sql = br.readAllAsString();
|
||||
|
||||
for (String query : sql.split(";")) {
|
||||
conn.createStatement().execute(query);
|
||||
}
|
||||
}
|
||||
catch (SQLException | IOException e) {
|
||||
handleException(e);
|
||||
}
|
||||
|
||||
//Lisää kuljetuspäivät asiakassarakkeeseen (v2.0.2->3.x.x)
|
||||
String[] sarakkeet = {"lauantaiKpl", "sunnuntaiKpl"};
|
||||
for (String sarake : sarakkeet) {
|
||||
try (Connection conn = haeYhteys()) {
|
||||
PreparedStatement stmt = conn.prepareStatement("alter table asiakkaat add column " + sarake + " int not null default 0");
|
||||
stmt.execute();
|
||||
} catch (SQLException e) {
|
||||
if (!e.getMessage().contains("duplicate column name")) {
|
||||
handleException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection haeYhteys() {
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = DriverManager.getConnection(osoite);
|
||||
} catch (SQLException e) {
|
||||
handleException(e);
|
||||
}
|
||||
return connection;
|
||||
}
|
||||
|
||||
private static void handleException(Exception e) {
|
||||
SiirtoVirhe virhe = new SiirtoVirhe(e);
|
||||
virhe.showAndWait();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package fi.lpam.dataluokat;
|
||||
|
||||
public interface TietokantaOlio {
|
||||
|
||||
boolean tallennaUusi();
|
||||
|
||||
boolean päivitäTietokantaan();
|
||||
|
||||
boolean poista();
|
||||
|
||||
boolean tallenna();
|
||||
}
|
||||
Reference in New Issue
Block a user