+4
-2
@@ -1,5 +1,7 @@
|
||||
# 2.0.0-wip
|
||||
- Asiakkaalle laskutusosoite?
|
||||
# 2.0.0
|
||||
- Asiakkaalle lisätty tietoihin laskutusosoite ja yhteyshenkilön yhteystiedot
|
||||
- Tiedot nousevat kuljetusraportille laskutusta varten
|
||||
- Lisätty ohjelmaan linkki muutoslokiin
|
||||
|
||||
# 1.1.1
|
||||
- Integroitu versionumenointi projektiin
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>fi.lpam.ruokamanageri</groupId>
|
||||
<artifactId>Ruokamanageri</artifactId>
|
||||
<version>2.0.0-wip</version>
|
||||
<version>2.0.0</version>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>25</maven.compiler.source>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,24 @@
|
||||
package fi.lpam.ruokamanageri.gui;
|
||||
|
||||
import fi.lpam.ruokamanageri.Main;
|
||||
import fi.lpam.ruokamanageri.dataluokat.Asiakas;
|
||||
import fi.lpam.ruokamanageri.gui.elementit.MaaraTableColumn;
|
||||
import fi.lpam.ruokamanageri.gui.elementit.TabPohja;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -33,19 +42,30 @@ public class Asiakashallinta extends TabPohja {
|
||||
yläpalkinNapit.setSpacing(5);
|
||||
yläpalkki.setRight(yläpalkinNapit);
|
||||
|
||||
Button avaaVersioloki = new Button("Avaa muutosloki");
|
||||
avaaVersioloki.setFont(buttonFont);
|
||||
avaaVersioloki.setOnAction(_ -> {
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URI("https://git.lpam.fi/laurimaaninka/Ruokamanageri/src/branch/master/CHANGELOG.md"));
|
||||
} catch (IOException | URISyntaxException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
});
|
||||
yläpalkinNapit.getChildren().add(avaaVersioloki);
|
||||
|
||||
Button poistaValittu = new Button("Poista");
|
||||
poistaValittu.setOnAction(_ -> poistaValittu());
|
||||
poistaValittu.setFont(TabPohja.buttonFont);
|
||||
poistaValittu.setFont(buttonFont);
|
||||
yläpalkinNapit.getChildren().add(poistaValittu);
|
||||
|
||||
Button muokkaaAsiakasta = new Button("Muokkaa");
|
||||
muokkaaAsiakasta.setOnAction(_ -> muokkaaValittua());
|
||||
muokkaaAsiakasta.setFont(TabPohja.buttonFont);
|
||||
muokkaaAsiakasta.setFont(buttonFont);
|
||||
yläpalkinNapit.getChildren().add(muokkaaAsiakasta);
|
||||
|
||||
Button uusiAsiakas = new Button("Uusi asiakas");
|
||||
uusiAsiakas.setOnAction(_ -> uusiAsiakas());
|
||||
uusiAsiakas.setFont(TabPohja.buttonFont);
|
||||
uusiAsiakas.setFont(buttonFont);
|
||||
yläpalkinNapit.getChildren().add(uusiAsiakas);
|
||||
|
||||
tvAsiakkaat.setEditable(false);
|
||||
|
||||
@@ -59,18 +59,21 @@ public class KuljetusRaportit extends TabPohja {
|
||||
Button tulostaRaportti = new Button("Tulosta raportti");
|
||||
tulostaRaportti.setFont(buttonFont);
|
||||
tulostaRaportti.setOnAction(_ ->tulostaRaportti());
|
||||
yläpalkinNapit.getChildren().addAll(tarkka, new Label("Hae kuljetukset välillä:"), alkuPvm, new Label("-"), loppuPvm, haeKuljetukset, tulostaRaportti);
|
||||
yläpalkinNapit.getChildren().addAll(tarkka,
|
||||
new Label("Hae kuljetukset välillä:"),
|
||||
alkuPvm, new Label("-"), loppuPvm,
|
||||
haeKuljetukset, tulostaRaportti);
|
||||
|
||||
root.setCenter(tableView);
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcNimi = new TableColumn<>("Nimi");
|
||||
tcNimi.setMinWidth(150);
|
||||
tcNimi.setMinWidth(200);
|
||||
tcNimi.setCellValueFactory(new PropertyValueFactory<>("nimi"));
|
||||
|
||||
TableColumn<RaporttiRivi, LocalDate> tcPvm = new TableColumn<>("Päivämäärä");
|
||||
tcPvm.setMinWidth(150);
|
||||
tcPvm.setCellFactory(_ ->new PaivamaaraTableCell());
|
||||
tcPvm.setCellValueFactory(new PropertyValueFactory<>("loppuPvm"));
|
||||
tcPvm.setCellValueFactory(new PropertyValueFactory<>("pvm"));
|
||||
|
||||
TableColumn<RaporttiRivi, Integer> tcSalaatit = new TableColumn<>("Salaatit");
|
||||
tcSalaatit.setMinWidth(100);
|
||||
@@ -85,10 +88,27 @@ public class KuljetusRaportit extends TabPohja {
|
||||
tcJälkiruoat.setCellValueFactory(new PropertyValueFactory<>("jälkiruoat"));
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcLisätiedot = new TableColumn<>("Lisätiedot");
|
||||
tcLisätiedot.setMinWidth(500);
|
||||
tcLisätiedot.setMinWidth(300);
|
||||
tcLisätiedot.setCellValueFactory(new PropertyValueFactory<>("lisätiedot"));
|
||||
|
||||
tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot);
|
||||
TableColumn<RaporttiRivi, String> tcYhteyshenkilönNimi = new TableColumn<>("Yhteyshenkilön nimi");
|
||||
tcYhteyshenkilönNimi.setMinWidth(200);
|
||||
tcYhteyshenkilönNimi.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönNimi"));
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcLaskutusOsoite = new TableColumn<>("Laskutusosoite");
|
||||
tcLaskutusOsoite.setMinWidth(200);
|
||||
tcLaskutusOsoite.setCellValueFactory(new PropertyValueFactory<>("laskutusOsoite"));
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcYhteyshenkilönPuhelinnumero = new TableColumn<>("Puhelinnumero");
|
||||
tcYhteyshenkilönPuhelinnumero.setMinWidth(200);
|
||||
tcYhteyshenkilönPuhelinnumero.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönPuhelinnumero"));
|
||||
|
||||
TableColumn<RaporttiRivi, String> tcYhteyshenkilönSähköposti = new TableColumn<>("Sähköposti");
|
||||
tcYhteyshenkilönSähköposti.setMinWidth(200);
|
||||
tcYhteyshenkilönSähköposti.setCellValueFactory(new PropertyValueFactory<>("yhteyshenkilönSähköposti"));
|
||||
|
||||
tableView.getColumns().addAll(tcNimi, tcPvm, tcSalaatit, tcPääruoat, tcJälkiruoat, tcLisätiedot,
|
||||
tcYhteyshenkilönNimi, tcLaskutusOsoite, tcYhteyshenkilönPuhelinnumero, tcYhteyshenkilönSähköposti);
|
||||
tableView.setPlaceholder(new Label("Hae raportti"));
|
||||
for (TableColumn<RaporttiRivi, ?> sarake : tableView.getColumns()) {
|
||||
sarake.setSortable(false);
|
||||
|
||||
@@ -45,8 +45,9 @@ public class KuljetusListaTulostaja extends Tulostaja{
|
||||
siirräOsoitinta(NIMEN_LEVEYS);
|
||||
sisältö.showText(kuljetus.getLisätieto());
|
||||
uusiRivi(RIVI_KORKEUS*0.1F);
|
||||
sisältö.showText("___________________________________________________________________");
|
||||
sisältö.showText("___________________________________________________________________"); //67 alaviivaa (noin sivun leveys)
|
||||
}
|
||||
|
||||
tulosta();
|
||||
}
|
||||
catch (IOException e) {
|
||||
|
||||
@@ -4,13 +4,14 @@ import fi.lpam.ruokamanageri.dataluokat.RaporttiRivi;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class KuljetusRaporttiTulostaja extends Tulostaja {
|
||||
public void luoRaportti(ArrayList<RaporttiRivi> raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) {
|
||||
try {
|
||||
sisältö.showText("Raportti aikaväliltä " + alkuPvm + " - " + loppuPvm);
|
||||
sisältö.showText("Raportti aikaväliltä " + alkuPvm.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + " - " + loppuPvm.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
|
||||
uusiRivi();
|
||||
uusiRivi();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user