diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index 6a3623d..d28294d 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -8,5 +8,12 @@
jdbc:sqlite:C:\Users\TheHy\Ohjelmointi\Ruokamanageri\testikanta.db
$ProjectFileDir$
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:C:\Users\TheHy\OneDrive\Kuljetusruokasovellus\tietokanta.db
+ $ProjectFileDir$
+
\ No newline at end of file
diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml
new file mode 100644
index 0000000..2e42c93
--- /dev/null
+++ b/.idea/db-forest-config.xml
@@ -0,0 +1,10 @@
+
+
+
+ .
+ ----------------------------------------
+ 1:0:99c09b65-0631-4e8f-9a1e-89c4fd901b4e
+ 2:0:9acbcf20-b2bb-4f33-8c57-21f23780a86c
+ .
+
+
\ No newline at end of file
diff --git a/TODO.txt b/TODO.txt
index dc46b69..5428e18 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1 +1,5 @@
-TODO Kuljetuslistan luontiin riville nappi, josta nollata rivi/palauttaa oletuskuljetusmäärät
+TODO Kuljetuslistalle lisää tilaa vasemmalle, jotta voi rei'ittää kansioon
+
+TODO kierroshallinnassa asiakasta raahattaessa placeholderin fiksaus
+
+TODO Asiakkaalle laskutusosoite
\ No newline at end of file
diff --git a/src/main/java/fi/lpam/dataluokat/Kuljetus.java b/src/main/java/fi/lpam/dataluokat/Kuljetus.java
index 3a44a37..361d1a5 100644
--- a/src/main/java/fi/lpam/dataluokat/Kuljetus.java
+++ b/src/main/java/fi/lpam/dataluokat/Kuljetus.java
@@ -306,7 +306,7 @@ public class Kuljetus implements TietokantaOlio {
}
public boolean kuljetetaan() {
- return salaatit > 0 || pääruoat > 0 || jälkiruoat > 0 || !lisätieto.isEmpty();
+ return salaatit > 0 || pääruoat > 0 || jälkiruoat > 0 || !lisätieto.isBlank();
}
public int getId() {
return id;
diff --git a/src/main/java/fi/lpam/gui/KuljetusListat.java b/src/main/java/fi/lpam/gui/KuljetusListat.java
index 0639a07..13a2276 100644
--- a/src/main/java/fi/lpam/gui/KuljetusListat.java
+++ b/src/main/java/fi/lpam/gui/KuljetusListat.java
@@ -215,6 +215,6 @@ public class KuljetusListat extends TabPohja {
}
private void tulostaLista() {
- KuljetusListaTulostaja.tulosta(tableView.getItems(), kierrosValinta.getValue());
+ new KuljetusListaTulostaja().luoKuljetusLista(tableView.getItems(), kierrosValinta.getValue());
}
}
\ No newline at end of file
diff --git a/src/main/java/fi/lpam/gui/KuljetusRaportit.java b/src/main/java/fi/lpam/gui/KuljetusRaportit.java
index 8343ae1..d5aa1ad 100644
--- a/src/main/java/fi/lpam/gui/KuljetusRaportit.java
+++ b/src/main/java/fi/lpam/gui/KuljetusRaportit.java
@@ -30,7 +30,7 @@ public class KuljetusRaportit extends TabPohja {
}
void tulostaRaportti() {
- KuljetusRaporttiTulostaja.luoRaportti(raportti, alkuPvm.getValue(), loppuPvm.getValue());
+ new KuljetusRaporttiTulostaja().luoRaportti(raportti, alkuPvm.getValue(), loppuPvm.getValue());
}
public KuljetusRaportit() {
diff --git a/src/main/java/fi/lpam/tulostajat/KuljetusListaTulostaja.java b/src/main/java/fi/lpam/tulostajat/KuljetusListaTulostaja.java
index a31ce02..e6a7966 100644
--- a/src/main/java/fi/lpam/tulostajat/KuljetusListaTulostaja.java
+++ b/src/main/java/fi/lpam/tulostajat/KuljetusListaTulostaja.java
@@ -1,88 +1,56 @@
package fi.lpam.tulostajat;
import fi.lpam.dataluokat.Kuljetus;
-import fi.lpam.gui.virheDialogit.SiirtoVirhe;
import javafx.collections.ObservableList;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDPageContentStream;
-import org.apache.pdfbox.printing.PDFPageable;
-import java.awt.print.PrinterException;
-import java.awt.print.PrinterJob;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
@SuppressWarnings("DuplicatedCode")
public class KuljetusListaTulostaja extends Tulostaja{
- public static void tulosta(ObservableList kuljetukset, int kierrosnumero) {
- int kuljetuksetPerSivu = 14;
- try (PDDocument dokumentti = new PDDocument()) {
- PDPage sivu = new PDPage();
- dokumentti.addPage(sivu);
- PDPageContentStream sisältö = new PDPageContentStream(dokumentti, sivu);
- sisältö.beginText();
+ final float NIMEN_LEVEYS = 200;
+ final float OSOITTEEN_LEVEYS = 200;
+ public void luoKuljetusLista(ObservableList kuljetukset, int kierrosnumero) {
+ try {
+ sisältö.showText(kuljetukset.getFirst().getKuljetusPäivämäärä().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + ", kierros: " + kierrosnumero);
+ uusiRivi();
- sisältö.setFont(fontti, fonttiKoko);
- sisältö.setLeading(leading);
- sisältö.newLineAtOffset(25, 750);
- sisältö.showText(kuljetukset.getFirst().getKuljetusPäivämäärä().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) + ", kierros " + kierrosnumero);
- sisältö.newLineAtOffset(0, -25);
-
- int riviLaskuri = 1;
for (Kuljetus kuljetus : kuljetukset) {
//Tyhjää kuljetusta ei tulosteta
- if ((kuljetus.getSalaatit() + kuljetus.getPääruoat() + kuljetus.getJälkiruoat()) < 1) {continue;}
+ if (!kuljetus.kuljetetaan()) {continue;}
- if (riviLaskuri > kuljetuksetPerSivu) {
- sisältö.endText();
- sisältö.close();
- PDPage uusiSivu = new PDPage();
- dokumentti.addPage(uusiSivu);
- sisältö = new PDPageContentStream(dokumentti, uusiSivu);
- sisältö.beginText();
- sisältö.setFont(fontti, fonttiKoko);
- sisältö.setLeading(leading);
- sisältö.newLineAtOffset(25,750);
- riviLaskuri = 0;
+ if (yOffset - MARGINAALI < 4 * RIVI_KORKEUS) {
+ uusiSivu();
}
+
//Ensimmäinen rivi
+ uusiRivi();
sisältö.showText(kuljetus.getNimi());
- int nimenLeveys = 200;
- sisältö.newLineAtOffset(nimenLeveys, 0);
+ siirräOsoitinta(NIMEN_LEVEYS);
sisältö.showText(kuljetus.getOsoite());
- int osoitteenLeveys = 230;
- sisältö.newLineAtOffset(osoitteenLeveys, 0);
+ siirräOsoitinta(OSOITTEEN_LEVEYS);
sisältö.showText(kuljetus.getAvainTieto());
//Toinen rivi
- sisältö.newLineAtOffset(-nimenLeveys-osoitteenLeveys, -16);
+ uusiRivi();
sisältö.showText("Sal: " + kuljetus.getSalaatit()
+ " Pr: " + kuljetus.getPääruoat()
+ " Jr: " + kuljetus.getJälkiruoat());
- sisältö.newLineAtOffset(nimenLeveys, 0);
+ siirräOsoitinta(NIMEN_LEVEYS);
sisältö.showText(kuljetus.getRuokarajoite());
- sisältö.newLineAtOffset(osoitteenLeveys, 0);
+
+ //Kolmas rivi
+ uusiRivi();
+ siirräOsoitinta(NIMEN_LEVEYS);
sisältö.showText(kuljetus.getLisätieto());
-
- sisältö.newLineAtOffset(-nimenLeveys-osoitteenLeveys, -15);
- sisältö.showText("_______________________________________________________________________");
- sisältö.newLineAtOffset(0, -20);
-
- riviLaskuri++;
+ uusiRivi(RIVI_KORKEUS*0.1F);
+ sisältö.showText("___________________________________________________________________");
}
- sisältö.endText();
- sisältö.close();
-
- PrinterJob tuloste = PrinterJob.getPrinterJob();
- tuloste.setPageable(new PDFPageable(dokumentti));
- if (tuloste.printDialog()) {
- tuloste.print();
- }
- } catch (IOException | PrinterException e) {
- SiirtoVirhe virhe = new SiirtoVirhe(e);
- virhe.showAndWait();
+ tulosta();
+ }
+ catch (IOException e) {
+ handleIOException(e);
}
}
}
\ No newline at end of file
diff --git a/src/main/java/fi/lpam/tulostajat/KuljetusRaporttiTulostaja.java b/src/main/java/fi/lpam/tulostajat/KuljetusRaporttiTulostaja.java
index f349272..c838904 100644
--- a/src/main/java/fi/lpam/tulostajat/KuljetusRaporttiTulostaja.java
+++ b/src/main/java/fi/lpam/tulostajat/KuljetusRaporttiTulostaja.java
@@ -3,6 +3,7 @@ package fi.lpam.tulostajat;
import fi.lpam.dataluokat.RaporttiRivi;
import java.awt.print.PrinterJob;
+import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
@@ -10,58 +11,33 @@ import fi.lpam.gui.virheDialogit.SiirtoVirhe;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.printing.PDFPageable;
@SuppressWarnings("DuplicatedCode")
public class KuljetusRaporttiTulostaja extends Tulostaja {
- public static void luoRaportti(ArrayList raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) {
- int rivitPerSivu = 44;
- try (PDDocument dokumentti = new PDDocument()) {
- PDPage sivu = new PDPage();
- dokumentti.addPage(sivu);
- PDPageContentStream sisältö = new PDPageContentStream(dokumentti, sivu);
- sisältö.beginText();
-
-
- sisältö.setFont(fontti, fonttiKoko);
- sisältö.setLeading(leading);
- sisältö.newLineAtOffset(25,750);
+ public void luoRaportti(ArrayList raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) {
+ try {
sisältö.showText("Raportti aikaväliltä " + alkuPvm + " - " + loppuPvm);
- sisältö.newLineAtOffset(0, -25);
+ uusiRivi();
+ uusiRivi();
- int riviLaskuri = 2;
for (RaporttiRivi rivi : raporttiRivit) {
String[] teksti = rivi.toString().split("\n");
for (String t : teksti) {
- if (riviLaskuri % rivitPerSivu == 0) {
- sisältö.endText();
- sisältö.close();
- PDPage uusiSivu = new PDPage();
- dokumentti.addPage(uusiSivu);
- sisältö = new PDPageContentStream(dokumentti, uusiSivu);
- sisältö.beginText();
- sisältö.setFont(fontti, fonttiKoko);
- sisältö.setLeading(leading);
- sisältö.newLineAtOffset(25,750);
+ if (yOffset - MARGINAALI < 0) {
+ uusiSivu();
}
sisältö.showText(t);
- riviLaskuri++;
- sisältö.newLine();
+ uusiRivi();
}
- sisältö.newLineAtOffset(0, -5);
- }
- sisältö.endText();
- sisältö.close();
-
- PrinterJob tuloste = PrinterJob.getPrinterJob();
- tuloste.setPageable(new PDFPageable(dokumentti));
- if (tuloste.printDialog()) {
- tuloste.print();
+ uusiRivi();
}
+ tulosta();
}
- catch (Exception e) {
- SiirtoVirhe virhe = new SiirtoVirhe(e);
- virhe.showAndWait();
+
+ catch (IOException e) {
+ handleIOException(e);
}
}
}
\ No newline at end of file
diff --git a/src/main/java/fi/lpam/tulostajat/Tulostaja.java b/src/main/java/fi/lpam/tulostajat/Tulostaja.java
index a8eb970..85c2711 100644
--- a/src/main/java/fi/lpam/tulostajat/Tulostaja.java
+++ b/src/main/java/fi/lpam/tulostajat/Tulostaja.java
@@ -1,11 +1,114 @@
package fi.lpam.tulostajat;
+import fi.lpam.gui.virheDialogit.SiirtoVirhe;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
+import org.apache.pdfbox.printing.PDFPageable;
+
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.io.IOException;
public abstract class Tulostaja {
- static final PDFont fontti = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
- static final int fonttiKoko = 14;
- static final float leading = 14.5f;
+ PDRectangle SIVUKOKO = PDRectangle.A4;
+ final PDFont FONTTI = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
+ final float FONTTI_KOKO = 13;
+ final float MARGINAALI = 50;
+ final float RIVI_KORKEUS = FONTTI_KOKO * 1.2F;
+
+ PDDocument dokumentti;
+ PDPage nykyinenSivu = null;
+ PDPageContentStream sisältö = null;
+ float sivunLeveys;
+ float startX;
+ float startY;
+ float yOffset;
+ float xOffset;
+
+
+ public Tulostaja() {
+ dokumentti = new PDDocument();
+ sivunLeveys = SIVUKOKO.getWidth() - 2 * MARGINAALI;
+ startX = SIVUKOKO.getLowerLeftX() + MARGINAALI;
+ startY = SIVUKOKO.getUpperRightY() - MARGINAALI;
+ yOffset = startY;
+ xOffset = 0;
+ uusiSivu();
+ }
+
+ /**Luo uuden sivun dokumenttiin ja alustaa sisältö muuttujan valmiiksi*/
+ void uusiSivu() {
+ try {
+ if (sisältö != null) {
+ sisältö.endText();
+ sisältö.close();
+ }
+ PDPage uusiSivu = new PDPage(SIVUKOKO);
+ dokumentti.addPage(uusiSivu);
+ nykyinenSivu = uusiSivu;
+ sisältö = new PDPageContentStream(dokumentti, uusiSivu);
+ sisältö.setFont(FONTTI, FONTTI_KOKO);
+ sisältö.beginText();
+ sisältö.newLineAtOffset(startX, startY);
+ yOffset = startY;
+ } catch (IOException e) {
+ handleIOException(e);
+ }
+ }
+
+ /**Siirtää osoittimen rivin alkuun, siirtää riviä alaspäin tY verran*/
+ void uusiRivi(float tY) {
+ try {
+ sisältö.newLineAtOffset(-xOffset, -tY);
+ xOffset = 0;
+ yOffset -= tY;
+ }
+ catch (IOException e) {
+ handleIOException(e);
+ }
+ }
+
+ /**Siirtää osoittimen uuden rivin alkuun*/
+ void uusiRivi() {
+ uusiRivi(RIVI_KORKEUS);
+ }
+ /**Siirtää osoitinta sivulla. + oikealle, - vasemmalle*/
+ void siirräOsoitinta(float tX) {
+ try {
+ sisältö.newLineAtOffset(tX, 0);
+ xOffset += tX;
+ }
+ catch (IOException e) {
+ handleIOException(e);
+ }
+ }
+ /**Avaa järjestelmän tulostusikkunan dokumentille*/
+ void tulosta() {
+ try {
+ sisältö.endText();
+ sisältö.close();
+ PrinterJob tuloste = PrinterJob.getPrinterJob();
+ tuloste.setPageable(new PDFPageable(dokumentti));
+ if (tuloste.printDialog()) {
+ tuloste.print();
+ }
+ }
+ catch (PrinterException ex) {
+ System.out.println("Error: " + ex.getMessage());
+ }
+ catch (IOException ex) {
+ handleIOException(ex);
+ }
+ }
+
+ /**Käsittelee pdfboxin IOExceptionit*/
+ void handleIOException(IOException e) {
+ SiirtoVirhe virhe = new SiirtoVirhe(e);
+ virhe.showAndWait();
+ }
}