Tulostamisen uudelleenrakentaminen
Signed-off-by: laurimaaninka <lauri.maaninka@gmail.com>
This commit is contained in:
Generated
+7
@@ -8,5 +8,12 @@
|
||||
<jdbc-url>jdbc:sqlite:C:\Users\TheHy\Ohjelmointi\Ruokamanageri\testikanta.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
<data-source source="LOCAL" name="tietokanta.db" uuid="9acbcf20-b2bb-4f33-8c57-21f23780a86c">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:C:\Users\TheHy\OneDrive\Kuljetusruokasovellus\tietokanta.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
Generated
+10
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="db-forest-configuration">
|
||||
<data version="2">.
|
||||
----------------------------------------
|
||||
1:0:99c09b65-0631-4e8f-9a1e-89c4fd901b4e
|
||||
2:0:9acbcf20-b2bb-4f33-8c57-21f23780a86c
|
||||
.</data>
|
||||
</component>
|
||||
</project>
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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<Kuljetus> 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<Kuljetus> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<RaporttiRivi> 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<RaporttiRivi> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user