use of org.apache.isis.applib.annotation.ActionLayout 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.annotation.ActionLayout in project estatio by estatio.
the class InvoiceForLease_attachSupportingDocument method $$.
@Action(semantics = SemanticsOf.NON_IDEMPOTENT, commandDtoProcessor = DeriveBlobFromDummyPdfArg1.class)
@ActionLayout(contributed = Contributed.AS_ACTION, cssClassFa = "paperclip")
public Invoice $$(final DocumentType supportingDocumentType, @Parameter(fileAccept = "application/pdf") @ParameterLayout(named = "Receipt (PDF)") final Blob blob, @Parameter(optionality = Optionality.OPTIONAL) final String fileName, final String roleName) throws IOException {
//
// if appropriate, we will automatically attach the supporting doc (once created)
// to any unsent documents for this Invoice
// before we do anything, therefore, we get hold of those invoice documents.
//
DocumentTypeData supportedBy = DocumentTypeData.supportedBy(supportingDocumentType);
final List<DocumentAbstract> unsentDocuments = findUnsentDocumentsFor(invoiceForLease, supportedBy);
//
// now we create the receiptDoc, and attach to the invoice
//
String documentName = determineName(blob, fileName);
// unlike documents that are generated from a template (where we call documentTemplate#render), in this case
// we have the actual bytes; so we just set up the remaining state of the document manually.
final Document supportingDoc = documentService.createAndAttachDocumentForBlob(supportingDocumentType, this.invoiceForLease.getAtPath(), documentName, blob, PaperclipRoleNames.SUPPORTING_DOCUMENT, this.invoiceForLease);
//
for (DocumentAbstract unsentDocument : unsentDocuments) {
paperclipRepository.attach(supportingDoc, roleName, unsentDocument);
}
return this.invoiceForLease;
}
use of org.apache.isis.applib.annotation.ActionLayout in project estatio by estatio.
the class FixedBreakOption method updateReminderDate.
// //////////////////////////////////////
/**
* Creates/updates/deletes a corresponding {@link Event} with a
* {@link Event#getCalendarName() calendar name} of
* {@link #CALENDAR_NAME_FIXED_BREAK_EXERCISE_REMINDER}.
*/
@ActionLayout(named = "Update")
public FixedBreakOption updateReminderDate(@Parameter(optionality = Optionality.OPTIONAL) @ParameterLayout(named = CALENDAR_NAME_FIXED_BREAK_EXERCISE_REMINDER, describedAs = "Reminder to exercise (or leave blank to clear)") final LocalDate reminderDate) {
setReminderDate(reminderDate);
final Event reminderEvent = eventRepository.findBySourceAndCalendarName(this, CALENDAR_NAME_FIXED_BREAK_EXERCISE_REMINDER);
if (reminderDate != null) {
if (reminderEvent == null) {
// create...
createEvent(getReminderDate(), this, CALENDAR_NAME_FIXED_BREAK_EXERCISE_REMINDER);
} else {
// update...
reminderEvent.setDate(reminderDate);
}
} else {
if (reminderEvent != null) {
// delete...
removeIfNotAlready(reminderEvent);
}
}
return this;
}
use of org.apache.isis.applib.annotation.ActionLayout in project estatio by estatio.
the class Document_sendByEmail method act.
@Action(semantics = SemanticsOf.NON_IDEMPOTENT, domainEvent = ActionDomainEvent.class)
@ActionLayout(cssClassFa = "at", contributed = Contributed.AS_ACTION)
public Communication act(@ParameterLayout(named = "to:") final EmailAddress toChannel, @Parameter(optionality = Optionality.OPTIONAL, maxLength = CommunicationChannel.EmailType.Meta.MAX_LEN, regexPattern = CommunicationChannel.EmailType.Meta.REGEX, regexPatternReplacement = CommunicationChannel.EmailType.Meta.REGEX_DESC) @ParameterLayout(named = "cc:") final String cc, @Parameter(optionality = Optionality.OPTIONAL, maxLength = CommunicationChannel.EmailType.Meta.MAX_LEN, regexPattern = CommunicationChannel.EmailType.Meta.REGEX, regexPatternReplacement = CommunicationChannel.EmailType.Meta.REGEX_DESC) @ParameterLayout(named = "cc (2):") final String cc2, @Parameter(optionality = Optionality.OPTIONAL, maxLength = CommunicationChannel.EmailType.Meta.MAX_LEN, regexPattern = CommunicationChannel.EmailType.Meta.REGEX, regexPatternReplacement = CommunicationChannel.EmailType.Meta.REGEX_DESC) @ParameterLayout(named = "cc (3):") final String cc3, @Parameter(optionality = Optionality.OPTIONAL, maxLength = CommunicationChannel.EmailType.Meta.MAX_LEN, regexPattern = CommunicationChannel.EmailType.Meta.REGEX, regexPatternReplacement = CommunicationChannel.EmailType.Meta.REGEX_DESC) @ParameterLayout(named = "bcc:") final String bcc, @Parameter(optionality = Optionality.OPTIONAL, maxLength = CommunicationChannel.EmailType.Meta.MAX_LEN, regexPattern = CommunicationChannel.EmailType.Meta.REGEX, regexPatternReplacement = CommunicationChannel.EmailType.Meta.REGEX_DESC) @ParameterLayout(named = "bcc (2):") final String bcc2) throws IOException {
if (this.document.getState() == DocumentState.NOT_RENDERED) {
// this shouldn't happen, but want to fail-fast in case a future programmer calls this directly
throw new IllegalArgumentException("Document is not yet rendered");
}
// create cover note
//
// nb: there is a presumption is that the cover note will not be automatically attached to any other objects,
// ie its AttachmentAdvisor should be AttachToNone.
final DocumentTemplate coverNoteTemplate = determineEmailCoverNoteTemplate();
final Document coverNoteDoc = documentCreatorService.createDocumentAndAttachPaperclips(this.document, coverNoteTemplate);
coverNoteDoc.render(coverNoteTemplate, this.document);
// create comm and correspondents
final String atPath = document.getAtPath();
final String subject = stripFileExtensionIfAny(coverNoteDoc.getName());
final Communication communication = communicationRepository.createEmail(subject, atPath, toChannel, cc, cc2, cc3, bcc, bcc2);
transactionService.flushTransaction();
// manually attach the cover note to the comm
paperclipRepository.attach(coverNoteDoc, DocumentConstants.PAPERCLIP_ROLE_COVER, communication);
// also attach this "primary" document to the comm
paperclipRepository.attach(this.document, DocumentConstants.PAPERCLIP_ROLE_PRIMARY, communication);
// also copy over as attachments to the comm anything else also attached to primary document
final List<Document> communicationAttachments = attachmentProvider.attachmentsFor(document);
for (Document communicationAttachment : communicationAttachments) {
paperclipRepository.attach(communicationAttachment, DocumentConstants.PAPERCLIP_ROLE_ATTACHMENT, communication);
}
transactionService.flushTransaction();
// finally, schedule the email to be sent
communication.scheduleSend();
return communication;
}
use of org.apache.isis.applib.annotation.ActionLayout in project estatio by estatio.
the class T_createAndAttachDocumentAndRender method $$.
@Action(domainEvent = ActionDomainEvent.class, semantics = SemanticsOf.NON_IDEMPOTENT)
@ActionLayout(contributed = Contributed.AS_ACTION)
@MemberOrder(name = "documents", sequence = "3.1")
public Object $$(final DocumentTemplate template) throws IOException {
final Document document = documentCreatorService.createDocumentAndAttachPaperclips(domainObject, template);
render(template, document);
return document;
}
Aggregations