Search in sources :

Example 1 with Stamp

use of org.estatio.module.capex.platform.pdfmanipulator.Stamp in project estatio by estatio.

the class DocumentPreparer method stampUsing.

DocumentPreparer stampUsing(final PdfManipulator pdfManipulator) {
    try {
        final String documentName = document.getName();
        final List<String> leftLineTexts = Lists.newArrayList();
        leftLineTexts.add(documentName);
        if (transitionIfAny != null) {
            final String completedBy = transitionIfAny.getCompletedBy();
            leftLineTexts.add(String.format("approved by: %s", completedBy != null ? completedBy : "(unknown)"));
            leftLineTexts.add("approved on: " + transitionIfAny.getCompletedOn().toString("dd-MMM-yyyy HH:mm"));
        } else {
            leftLineTexts.add("not yet approved");
        }
        final List<String> rightLineTexts = Lists.newArrayList();
        rightLineTexts.add(String.format("net Amt       : %s", new DecimalFormat("0.00").format(incomingInvoice.getNetAmount())));
        rightLineTexts.add(String.format("gross Amt     : %s", new DecimalFormat("0.00").format(incomingInvoice.getGrossAmount())));
        final String hyperlink = null;
        byte[] bytes = pdfManipulator.extractAndStamp(document.getBlobBytes(), new ExtractSpec(numFirstPages, numLastPages), new Stamp(leftLineTexts, rightLineTexts, hyperlink));
        tempFile = File.createTempFile(documentName, "pdf");
        final FileOutputStream fos = new FileOutputStream(tempFile);
        fos.write(bytes);
        fos.close();
        return this;
    } catch (IOException e) {
        throw new IncomingInvoiceDownloadManager.DownloadException("Failed to prepare: " + document.getName(), e);
    }
}
Also used : ExtractSpec(org.estatio.module.capex.platform.pdfmanipulator.ExtractSpec) Stamp(org.estatio.module.capex.platform.pdfmanipulator.Stamp) DecimalFormat(java.text.DecimalFormat) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException)

Example 2 with Stamp

use of org.estatio.module.capex.platform.pdfmanipulator.Stamp in project estatio by estatio.

the class PaymentBatch method downloadReviewPdf.

@Action(semantics = SemanticsOf.SAFE)
@ActionLayout(contributed = Contributed.AS_ACTION)
public Blob downloadReviewPdf(final String documentName, @ParameterLayout(named = "How many first pages of each invoice's PDF?") final Integer numFirstPages, @ParameterLayout(named = "How many final pages of each invoice's PDF?") final Integer numLastPages) throws IOException {
    final List<File> pdfFiles = Lists.newArrayList();
    final List<CreditTransfer> transfers = this.getTransfers();
    for (CreditTransfer transfer : transfers) {
        final List<PaymentLine> lines = transfer.getLines();
        for (final PaymentLine line : lines) {
            final IncomingInvoice invoice = line.getInvoice();
            final BankAccount bankAccount = invoice.getBankAccount();
            final Optional<org.incode.module.document.dom.impl.docs.Document> invoiceDocIfAny = lookupAttachedPdfService.lookupIncomingInvoicePdfFrom(invoice);
            if (invoiceDocIfAny.isPresent()) {
                final org.incode.module.document.dom.impl.docs.Document invoiceDoc = invoiceDocIfAny.get();
                final byte[] invoiceDocBytes = invoiceDoc.asBytes();
                final Optional<org.incode.module.document.dom.impl.docs.Document> ibanProofDocIfAny = lookupAttachedPdfService.lookupIbanProofPdfFrom(bankAccount);
                List<String> leftLines = Lists.newArrayList();
                leftLines.add("xfer id: " + transfer.getEndToEndId() + " / " + line.getSequence());
                for (IncomingInvoice.ApprovalString approvalString : invoice.getApprovals()) {
                    leftLines.add(String.format("approved by: %s", approvalString.getCompletedBy()));
                    leftLines.add("on: " + approvalString.getCompletedOn());
                }
                final List<String> rightLines = Lists.newArrayList();
                rightLines.add(String.format("debtor IBAN: %s", line.getBatch().getDebtorBankAccount().getIban()));
                rightLines.add(String.format("crdtor IBAN: %s", line.getCreditorBankAccount().getIban()));
                rightLines.add(String.format("gross Amt  : %s", new DecimalFormat("0.00").format(line.getAmount())));
                boolean attachProof = false;
                final String proof;
                if (ibanProofDocIfAny.isPresent()) {
                    final org.incode.module.document.dom.impl.docs.Document ibanProofDoc = ibanProofDocIfAny.get();
                    if (DocumentTypeData.IBAN_PROOF.isDocTypeFor(ibanProofDoc)) {
                        proof = "Separate IBAN proof (next page)";
                        attachProof = true;
                    } else {
                        proof = "Invoice used as IBAN proof";
                    }
                } else {
                    proof = "No IBAN proof";
                }
                rightLines.add(proof);
                URI uri = deepLinkService.deepLinkFor(invoice);
                final Stamp stamp = new Stamp(leftLines, rightLines, uri.toString());
                final byte[] extractedInvoiceDocBytes = pdfManipulator.extractAndStamp(invoiceDocBytes, new ExtractSpec(numFirstPages, numLastPages), stamp);
                appendTempFile(extractedInvoiceDocBytes, documentName, pdfFiles);
                if (attachProof) {
                    final org.incode.module.document.dom.impl.docs.Document ibanProofDoc = ibanProofDocIfAny.get();
                    final byte[] ibanProofBytes = ibanProofDoc.asBytes();
                    final byte[] firstPageIbanProofDocBytes = pdfManipulator.extract(ibanProofBytes, ExtractSpec.FIRST_PAGE_ONLY);
                    appendTempFile(firstPageIbanProofDocBytes, documentName, pdfFiles);
                }
            }
        }
    }
    byte[] pdfMergedBytes = pdfBoxService.merge(pdfFiles);
    pdfFiles.stream().forEach(this::cleanup);
    return new Blob(documentName, DocumentConstants.MIME_TYPE_APPLICATION_PDF, pdfMergedBytes);
}
Also used : DecimalFormat(java.text.DecimalFormat) Document(iso.std.iso._20022.tech.xsd.pain_001_001.Document) URI(java.net.URI) IncomingInvoice(org.estatio.module.capex.dom.invoice.IncomingInvoice) Blob(org.apache.isis.applib.value.Blob) Stamp(org.estatio.module.capex.platform.pdfmanipulator.Stamp) BankAccount(org.estatio.module.financial.dom.BankAccount) ExtractSpec(org.estatio.module.capex.platform.pdfmanipulator.ExtractSpec) File(java.io.File) Action(org.apache.isis.applib.annotation.Action) ActionLayout(org.apache.isis.applib.annotation.ActionLayout)

Aggregations

DecimalFormat (java.text.DecimalFormat)2 ExtractSpec (org.estatio.module.capex.platform.pdfmanipulator.ExtractSpec)2 Stamp (org.estatio.module.capex.platform.pdfmanipulator.Stamp)2 Document (iso.std.iso._20022.tech.xsd.pain_001_001.Document)1 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 URI (java.net.URI)1 Action (org.apache.isis.applib.annotation.Action)1 ActionLayout (org.apache.isis.applib.annotation.ActionLayout)1 Blob (org.apache.isis.applib.value.Blob)1 IncomingInvoice (org.estatio.module.capex.dom.invoice.IncomingInvoice)1 BankAccount (org.estatio.module.financial.dom.BankAccount)1