private InvoiceWithMetadata generateKillBillInvoice(final ImmutableAccountData account, final LocalDate targetDate, final BillingEventSet billingEvents, final List<Invoice> existingInvoices, final InternalCallContext context) throws InvoiceApiException {
final UUID targetInvoiceId;
if (billingEvents.isAccountAutoInvoiceReuseDraft()) {
final Invoice existingDraft = Iterables.tryFind(existingInvoices, new Predicate<Invoice>() {
@Override
public boolean apply(final Invoice input) {
return input.getStatus() == InvoiceStatus.DRAFT;
}
}).orNull();
targetInvoiceId = existingDraft != null ? existingDraft.getId() : null;
} else {
targetInvoiceId = null;
}
return generator.generateInvoice(account, billingEvents, existingInvoices, targetInvoiceId, targetDate, account.getCurrency(), context);
}