@Override public Iterable<DefaultInvoice> prepareInvoices() throws InvoiceApiException { final DefaultInvoice invoice = getInvoiceAndCheckCurrency(invoiceId, currency, context); final InvoiceItem adjustmentItem = invoiceApiHelper.createAdjustmentItem(invoice, invoiceItemId, amount, currency, effectiveDate, description, itemDetails, internalCallContextFactory.createInternalCallContext(accountId, context)); if (adjustmentItem != null) { invoice.addInvoiceItem(adjustmentItem); } return ImmutableList.<DefaultInvoice>of(invoice); } };
final Collection<InvoiceItem> adjustmentInvoiceItems = Collections2.<InvoiceItem>filter(invoiceApiHelper.dispatchToInvoicePluginsAndInsertItems(accountId, false, withAccountLock, properties, context), new Predicate<InvoiceItem>() { @Override
final List<InvoiceItemModelDao> invoiceItemModelDaos = toInvoiceItemModelDao(invoiceItems); invoiceModelDao.addInvoiceItems(invoiceItemModelDaos); success = true; return fromInvoiceItemModelDao(createdInvoiceItems); } catch (final LockFailedException e) { log.warn("Failed to process invoice items for accountId='{}'", accountId.toString(), e);
@Override public InvoicePayment recordRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final String transactionExternalKey, final InternalCallContext context) throws InvoiceApiException { if (amount.compareTo(BigDecimal.ZERO) <= 0) { throw new InvoiceApiException(ErrorCode.PAYMENT_REFUND_AMOUNT_NEGATIVE_OR_NULL, paymentId, amount); } final InvoicePaymentModelDao refund = dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, transactionExternalKey, context); // See https://github.com/killbill/killbill/issues/265 final CallContext callContext = internalCallContextFactory.createCallContext(context); final DefaultInvoice invoice = getInvoiceByIdInternal(refund.getInvoiceId(), context); final UUID accountId = invoice.getAccountId(); final WithAccountLock withAccountLock = new WithAccountLock() { @Override public Iterable<DefaultInvoice> prepareInvoices() throws InvoiceApiException { return ImmutableList.<DefaultInvoice>of(invoice); } }; invoiceApiHelper.dispatchToInvoicePluginsAndInsertItems(accountId, false, withAccountLock, ImmutableList.<PluginProperty>of(), callContext); return new DefaultInvoicePayment(refund); }
return invoiceApiHelper.dispatchToInvoicePluginsAndInsertItems(accountId, false, withAccountLock, properties, context);