de.schneefisch.fruas.transactions.BillPDFCreator.java Source code

Java tutorial

Introduction

Here is the source code for de.schneefisch.fruas.transactions.BillPDFCreator.java

Source

package de.schneefisch.fruas.transactions;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import de.schneefisch.fruas.database.CustomerDAO;
import de.schneefisch.fruas.database.DeliveryNoteDAO;
import de.schneefisch.fruas.database.DeliveryNotePositionDAO;
import de.schneefisch.fruas.database.FiCustomerDAO;
import de.schneefisch.fruas.database.LicenseDAO;
import de.schneefisch.fruas.database.LocationDAO;
import de.schneefisch.fruas.database.MaintenanceDAO;
import de.schneefisch.fruas.database.ProductDAO;
import de.schneefisch.fruas.model.Bill;
import de.schneefisch.fruas.model.Customer;
import de.schneefisch.fruas.model.DeliveryNote;
import de.schneefisch.fruas.model.DeliveryNotePosition;
import de.schneefisch.fruas.model.FiCustomer;
import de.schneefisch.fruas.model.License;
import de.schneefisch.fruas.model.Location;
import de.schneefisch.fruas.model.Maintenance;
import de.schneefisch.fruas.model.Product;

public class BillPDFCreator {

    private Bill bill;
    private DeliveryNote deliveryNote;
    private Customer customer;
    private FiCustomer fiCustomer;
    private Location location;
    private List<DeliveryNotePosition> deliveryNotePositions;

    public BillPDFCreator(Bill bill) {
        this.bill = bill;

        DeliveryNoteDAO dnDAO = new DeliveryNoteDAO();
        DeliveryNotePositionDAO dnpDAO = new DeliveryNotePositionDAO();
        LicenseDAO lDAO = new LicenseDAO();
        CustomerDAO cDAO = new CustomerDAO();
        FiCustomerDAO fDAO = new FiCustomerDAO();
        LocationDAO locDAO = new LocationDAO();

        try {
            this.deliveryNote = dnDAO.selectDeliveryNoteById(bill.getDeliveryNoteId());
            this.deliveryNotePositions = dnpDAO.selectAllPositionsForDeliveryNote(deliveryNote.getId());
            License license = lDAO.selectLicenseById(deliveryNotePositions.get(0).getLicenseId());

            this.customer = cDAO.searchCustomerById(license.getCustomerId());
            this.fiCustomer = fDAO.selectFiCustomer(customer.getFiKuId());
            this.location = locDAO.findLocationByFiCustomerId(fiCustomer.getId());

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void createPDF() {

        String filename = "Rechnung-" + bill.getId() + ".pdf";

        try {
            PDDocument doc = new PDDocument();
            PDPage page = new PDPage();
            doc.addPage(page);

            PDPageContentStream content = new PDPageContentStream(doc, page);

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 14);
            content.newLineAtOffset(70, 750);
            content.showText("Schneefisch GmbH");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 13);
            content.newLineAtOffset(70, 725);
            content.showText("Nibelungenplatz 1");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 14);
            content.newLineAtOffset(70, 700);
            content.showText("D-60318 Frankfurt am Main");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 640);
            content.showText(fiCustomer.getName());
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 620);
            content.showText("Rechnungsprfung");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 600);
            content.showText(location.getStreet() + " " + location.getHouseNumber());
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 580);
            content.showText(location.getPostalCode() + " " + location.getCity());
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 540);
            content.showText("Rechnung " + bill.getId() + " fuer KN " + fiCustomer.getId());
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 520);
            content.showText("Sehr geehrte Damen und Herren, ");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 500);
            content.showText("hiermit erlauben wir uns fr unsere Lieferung Nr. " + deliveryNote.getId() + " vom "
                    + deliveryNote.getDate());
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, 485);
            content.showText("folgenden Betrag in Rechnung zu stellen:");
            content.endText();

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(75, 470);
            content.showText("POS");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(120, 470);
            content.showText("Bezeichnung");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(440, 470);
            content.showText("Preis");
            content.endText();

            int count = 1;
            float yoffset = 460;
            for (DeliveryNotePosition dnp : deliveryNotePositions) {
                LicenseDAO licDAO = new LicenseDAO();
                License license = licDAO.selectLicenseById(dnp.getLicenseId());
                ProductDAO pDAO = new ProductDAO();
                Product product = pDAO.searchProductById(license.getProductId());

                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(75, yoffset);
                content.showText(Integer.toString(count));
                content.endText();
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset);
                content.showText(product.getName());
                content.endText();
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset - 20);
                content.showText("Lizenz: " + license.getId() + " von " + license.getSoldDate() + " bis "
                        + license.getEndDate() + ".");
                content.endText();
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(440, yoffset - 20);
                content.showText("Eur " + product.getPrice() * ((100 - license.getDiscount()) / 100));
                content.endText();
                if (license.getMaintenanceId() == 0) {
                    content.beginText();
                    content.setFont(PDType1Font.HELVETICA, 12);
                    content.newLineAtOffset(120, yoffset - 40);
                    content.showText("Ohne Maintenance-Vertrag.");
                    content.endText();
                } else {
                    MaintenanceDAO mDAO = new MaintenanceDAO();
                    Maintenance maintenance = mDAO.searchMaintenanceById(license.getMaintenanceId());
                    content.beginText();
                    content.setFont(PDType1Font.HELVETICA, 12);
                    content.newLineAtOffset(120, yoffset - 40);
                    content.showText("Mit " + maintenance.getInfo() + " als Maintenance-Vertrag.");
                    content.endText();
                    content.beginText();
                    content.setFont(PDType1Font.HELVETICA, 12);
                    content.newLineAtOffset(440, yoffset - 40);
                    content.showText("Eur " + maintenance.getPrice());
                    content.endText();
                }
                count++;
                yoffset -= 100;
            }

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("Summe ");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(440, yoffset);
            content.showText(String.valueOf("EUR " + bill.getPrice()));
            content.endText();
            yoffset -= 20;

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("USt. 19%");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(440, yoffset);
            double ust = (bill.getPrice() * 0.19);
            content.showText(String.valueOf("EUR " + ust));
            content.endText();
            yoffset -= 20;

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("Gesamtsumme");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(440, yoffset);
            double priceTotal = bill.getPrice() + ust;
            content.showText(String.valueOf("EUR " + priceTotal));
            content.endText();
            yoffset -= 40;

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("Wir bitten Sie, den Gesamtbetrag von EUR " + priceTotal + " auf unser Konto 123456,");
            content.endText();
            yoffset -= 20;
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("bei der Bank Unserort, BLZ4321, IBAN123 zu berweisen. Zahlungsziel: 30 Tage netto.");
            content.endText();
            yoffset -= 25;

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("Mit freundlichen Gruessen");
            content.endText();
            yoffset -= 20;

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(70, yoffset);
            content.showText("Schneefisch GmbH");
            content.endText();
            content.close();

            doc.save(filename);
            doc.close();
            System.out.println(filename + " erstellt in: " + System.getProperty("user.dir"));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

}