use of org.killbill.billing.invoice.plugin.api.PriorInvoiceResult in project killbill by killbill.
the class InvoicePluginDispatcher method priorCall.
public DateTime priorCall(final LocalDate targetDate, final List<Invoice> existingInvoices, final boolean isDryRun, final boolean isRescheduled, final CallContext callContext, // The pluginProperties list passed to plugins is mutable by the plugins
@SuppressWarnings("TypeMayBeWeakened") final LinkedList<PluginProperty> properties, final InternalTenantContext internalTenantContext) throws InvoiceApiException {
log.debug("Invoking invoice plugins priorCall: targetDate='{}', isDryRun='{}', isRescheduled='{}'", targetDate, isDryRun, isRescheduled);
final Map<String, InvoicePluginApi> invoicePlugins = getInvoicePlugins(internalTenantContext);
if (invoicePlugins.isEmpty()) {
return null;
}
DateTime earliestRescheduleDate = null;
final InvoiceContext invoiceContext = new DefaultInvoiceContext(targetDate, null, existingInvoices, isDryRun, isRescheduled, callContext);
for (final Entry<String, InvoicePluginApi> entry : invoicePlugins.entrySet()) {
final String invoicePluginName = entry.getKey();
final PriorInvoiceResult priorInvoiceResult = entry.getValue().priorCall(invoiceContext, properties);
log.debug("Invoice plugin {} returned priorInvoiceResult='{}'", invoicePluginName, priorInvoiceResult);
if (priorInvoiceResult == null) {
// Naughty plugin...
continue;
}
if (priorInvoiceResult.getRescheduleDate() != null && (earliestRescheduleDate == null || earliestRescheduleDate.compareTo(priorInvoiceResult.getRescheduleDate()) > 0)) {
earliestRescheduleDate = priorInvoiceResult.getRescheduleDate();
log.info("Invoice plugin {} rescheduled invoice generation to {} for targetDate {}", invoicePluginName, earliestRescheduleDate, targetDate);
}
if (priorInvoiceResult.isAborted()) {
log.info("Invoice plugin {} aborted invoice generation for targetDate {}", invoicePluginName, targetDate);
throw new InvoiceApiException(ErrorCode.INVOICE_PLUGIN_API_ABORTED, invoicePluginName);
}
}
return earliestRescheduleDate;
}
Aggregations