363 lines
12 KiB
Java
363 lines
12 KiB
Java
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 {
|
|
public enum Tyyppi {
|
|
Lounas,
|
|
Päivällinen;
|
|
}
|
|
|
|
private int id = -1;
|
|
private int asiakasID;
|
|
private String nimi;
|
|
private LocalDate kuljetusPäivämäärä;
|
|
private int kuljetusKierros;
|
|
private Tyyppi tyyppi;
|
|
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.tyyppi = vanha.tyyppi;
|
|
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, Tyyppi tyyppi) {
|
|
this.asiakasID = asiakas.getId();
|
|
this.nimi = asiakas.getNimi();
|
|
this.kuljetusPäivämäärä = pvm;
|
|
this.kuljetusKierros = kuljetusKierros;
|
|
this.tyyppi = tyyppi;
|
|
this.salaatit = asiakas.getKuljetuksenSalaatit(pvm, tyyppi);
|
|
this.pääruoat = asiakas.getKuljetuksenPääruoat(pvm, tyyppi);
|
|
this.jälkiruoat = asiakas.getKuljetuksenJälkiruoat(pvm, tyyppi);
|
|
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,
|
|
Tyyppi tyyppi) {
|
|
this.id = id;
|
|
this.asiakasID = asiakasID;
|
|
this.nimi = nimi;
|
|
this.kuljetusPäivämäärä = kuljetusPäivämäärä;
|
|
this.kuljetusKierros = kuljetusKierros;
|
|
this.tyyppi = tyyppi;
|
|
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
|
|
* @param tyyppi kuljetuksen tyyppi
|
|
* @return valitun päivän valitun kierroksen kuljetukset
|
|
*/
|
|
public static ArrayList<Kuljetus> haeKierroksenKuljetukset(LocalDate päivä, int kuljetusKierros, Tyyppi tyyppi) {
|
|
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
|
PreparedStatement stmt = tietokanta.prepareStatement("SELECT * FROM kuljetukset WHERE kuljetusKierros = ? and kuljetusPäivämäärä = ? and tyyppi = ?");
|
|
stmt.setInt(1, kuljetusKierros);
|
|
stmt.setDate(2, Date.valueOf(päivä));
|
|
stmt.setString(3, tyyppi.toString());
|
|
ResultSet rs = stmt.executeQuery();
|
|
return parsiResultSet(rs);
|
|
} catch (SQLException e) {
|
|
SiirtoVirhe virhe = new SiirtoVirhe(e);
|
|
virhe.showAndWait();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private boolean tallennaUusi() {
|
|
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
|
PreparedStatement stmt = tietokanta.prepareStatement("INSERT INTO kuljetukset (asiakasID, nimi, kuljetusPäivämäärä, kuljetusKierros, tyyppi, 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.setString(5, tyyppi.toString());
|
|
stmt.setInt(6, salaatit);
|
|
stmt.setInt(7, pääruoat);
|
|
stmt.setInt(8, jälkiruoat);
|
|
stmt.setString(9, ruokarajoite);
|
|
stmt.setString(10, osoite);
|
|
stmt.setString(11, avainTieto);
|
|
stmt.setString(12, 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;
|
|
}
|
|
|
|
private boolean päivitäTietokantaan() {
|
|
try (Connection tietokanta = Tietokanta.haeYhteys()) {
|
|
PreparedStatement stmt = tietokanta.prepareStatement("UPDATE kuljetukset set asiakasID = ?, nimi = ?, kuljetusPäivämäärä = ?, kuljetusKierros = ?, tyyppi = ?, 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.setString(5, tyyppi.toString());
|
|
stmt.setInt(6, salaatit);
|
|
stmt.setInt(7, pääruoat);
|
|
stmt.setInt(8, jälkiruoat);
|
|
stmt.setString(9, ruokarajoite);
|
|
stmt.setString(10, osoite);
|
|
stmt.setString(11, avainTieto);
|
|
stmt.setString(12, lisätieto);
|
|
stmt.setInt(13, 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"),
|
|
Tyyppi.valueOf(rs.getString("tyyppi").strip())
|
|
);
|
|
System.out.println(rs.getString("tyyppi").equals(Tyyppi.Lounas.toString()));
|
|
System.out.println(Tyyppi.Lounas);
|
|
System.out.println(uusi.getTyyppi());
|
|
System.out.println(Tyyppi.valueOf(rs.getString("tyyppi")));
|
|
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 +
|
|
", tyyppi =" + tyyppi +
|
|
", 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.getKuljetuksenSalaatit(kuljetusPäivämäärä, tyyppi));
|
|
setPääruoat(asiakas.getKuljetuksenPääruoat(kuljetusPäivämäärä, tyyppi));
|
|
setJälkiruoat(asiakas.getKuljetuksenJälkiruoat(kuljetusPäivämäärä, tyyppi));
|
|
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;
|
|
}
|
|
|
|
public Tyyppi getTyyppi() {
|
|
return tyyppi;
|
|
}
|
|
|
|
public void setTyyppi(Tyyppi tyyppi) {
|
|
this.tyyppi = tyyppi;
|
|
}
|
|
} |