use of org.apache.isis.applib.value.Blob in project estatio by estatio.
the class Invoice_DocumentManagement_IntegTest method receiptAttachedToInvoice.
void receiptAttachedToInvoice(final Invoice invoice, final String fileName) throws IOException {
final InvoiceForLease_attachSupportingDocument invoice_attachSupportingDocument = mixin(InvoiceForLease_attachSupportingDocument.class, invoice);
final List<DocumentType> documentTypes = invoice_attachSupportingDocument.choices0$$();
assertThat(documentTypes).hasSize(2);
final DocumentType documentType = documentTypes.get(0);
final List<String> roleNames = invoice_attachSupportingDocument.choices3$$();
assertThat(roleNames).hasSize(1);
final String roleName = roleNames.get(0);
final Blob blob = asBlob(fileName);
wrap(invoice_attachSupportingDocument).$$(documentType, blob, null, roleName);
}
use of org.apache.isis.applib.value.Blob 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);
}
use of org.apache.isis.applib.value.Blob in project estatio by estatio.
the class InvoiceForLease_sendByPostPrelimLetterOrInvoiceDocAbstract method $$.
@Action(semantics = SemanticsOf.NON_IDEMPOTENT, domainEvent = DomainEvent.class)
@ActionLayout(contributed = Contributed.AS_ACTION)
public Blob $$(@ParameterLayout(named = "to:") final PostalAddress toChannel) throws IOException {
final Document document = findDocument();
createPostalCommunicationAsSent(document, toChannel);
final byte[] mergedBytes = mergePdfBytes(document);
final String fileName = document.getName();
return new Blob(fileName, DocumentConstants.MIME_TYPE_APPLICATION_PDF, mergedBytes);
}
use of org.apache.isis.applib.value.Blob in project estatio by estatio.
the class DocumentMenu_Upload_IntegTest method happy_case.
@Test
public void happy_case() throws Exception {
// given
List<Document> incomingDocumentsBefore = repository.findIncomingDocuments();
assertThat(incomingDocumentsBefore).isEmpty();
// when
final String fileName = "1020100123.pdf";
final byte[] pdfBytes = Resources.toByteArray(Resources.getResource(DocumentMenu_Upload_IntegTest.class, fileName));
final Blob blob = new Blob(fileName, "application/pdf", pdfBytes);
wrap(documentMenu).upload(blob);
transactionService.nextTransaction();
// then
List<Document> incomingDocumentsAfter = repository.findAllIncomingDocuments();
assertThat(incomingDocumentsAfter).hasSize(1);
final Document document = incomingDocumentsAfter.get(0);
final Blob documentBlob = document.getBlob();
assertThat(documentBlob.getName()).isEqualTo(blob.getName());
assertThat(documentBlob.getMimeType().getBaseType()).isEqualTo(blob.getMimeType().getBaseType());
assertThat(documentBlob.getBytes()).isEqualTo(blob.getBytes());
assertThat(JDOHelper.getVersion(document)).isEqualTo(1L);
assertThat(paperclipRepository.findByDocument(document).size()).isEqualTo(0);
// and then also
final List<IncomingDocumentCategorisationStateTransition> transitions = stateTransitionRepository.findByDomainObject(document);
assertThat(transitions).hasSize(2);
assertTransition(transitions.get(0), NEW, CATEGORISE, null);
assertTransition(transitions.get(1), null, INSTANTIATE, NEW);
// and when
final String fileName2 = "1020100123-altered.pdf";
final byte[] pdfBytes2 = Resources.toByteArray(Resources.getResource(DocumentMenu_Upload_IntegTest.class, fileName2));
final Blob similarNamedBlob = new Blob(fileName, "application/pdf", pdfBytes2);
wrap(documentMenu).upload(similarNamedBlob);
transactionService.nextTransaction();
// then
incomingDocumentsAfter = repository.findAllIncomingDocuments();
assertThat(incomingDocumentsAfter).hasSize(2);
assertThat(incomingDocumentsAfter.get(0).getName()).isEqualTo(fileName);
assertThat(incomingDocumentsAfter.get(0).getBlobBytes()).isEqualTo(similarNamedBlob.getBytes());
assertThat(JDOHelper.getVersion(incomingDocumentsAfter.get(0))).isEqualTo(2L);
assertThat(paperclipRepository.findByDocument(incomingDocumentsAfter.get(0)).size()).isEqualTo(1);
// has prefix arch-[date time indication]-
assertThat(incomingDocumentsAfter.get(1).getName()).contains(fileName);
assertThat(incomingDocumentsAfter.get(1).getBlobBytes()).isEqualTo(documentBlob.getBytes());
assertThat(JDOHelper.getVersion(incomingDocumentsAfter.get(1))).isEqualTo(1L);
assertThat(paperclipRepository.findByDocument(incomingDocumentsAfter.get(1)).size()).isEqualTo(0);
}
Aggregations