@Override public List<InvoicePayment> getPayments() { return MoreObjects.firstNonNull(invoice.getPayments(), ImmutableList.<InvoicePayment>of()); }
final Set<UUID> invoicePaymentIds = ImmutableSet.copyOf(Iterables.transform(invoice.getPayments(), new Function<InvoicePayment, UUID>() { @Override public UUID apply(final InvoicePayment input) {
private void canInvoiceBeVoided(final Invoice invoice) throws InvoiceApiException { final List<InvoicePayment> invoicePayments = invoice.getPayments(); final BigDecimal amountPaid = InvoiceCalculatorUtils.computeInvoiceAmountPaid(invoice.getCurrency(), invoicePayments) .add(InvoiceCalculatorUtils.computeInvoiceAmountRefunded(invoice.getCurrency(), invoicePayments)); if (amountPaid.compareTo(BigDecimal.ZERO) != 0) { throw new InvoiceApiException(ErrorCode.CAN_NOT_VOID_INVOICE_THAT_IS_PAID, invoice.getId().toString()); } } }
@Override public String getProcessedPaymentRate() { final Currency currency = getProcessedCurrency(); if (currency == null) { return null; } // If there were multiple payments (and refunds) we pick chose the last one DateTime latestPaymentDate = null; final Iterator<InvoicePayment> paymentIterator = invoice.getPayments().iterator(); while (paymentIterator.hasNext()) { final InvoicePayment cur = paymentIterator.next(); latestPaymentDate = latestPaymentDate != null && latestPaymentDate.isAfter(cur.getPaymentDate()) ? latestPaymentDate : cur.getPaymentDate(); } try { final CurrencyConversion conversion = currencyConversionApi.getCurrencyConversion(currency, latestPaymentDate); for (final Rate rate : conversion.getRates()) { if (rate.getCurrency() == getCurrency()) { return rate.getValue().toString(); } } } catch (final CurrencyConversionException e) { logger.warn("Failed to retrieve currency conversion rates for currency='{}', dateConversion='{}'", currency, latestPaymentDate, e); return null; } logger.warn("Failed to retrieve currency conversion rates for currency='{}', dateConversion='{}'", currency, latestPaymentDate); return null; }
public void checkInvoicesEqual(final InvoiceModelDao retrievedInvoice, final Invoice invoice) { Assert.assertEquals(retrievedInvoice.getId(), invoice.getId()); Assert.assertEquals(retrievedInvoice.getAccountId(), invoice.getAccountId()); Assert.assertEquals(retrievedInvoice.getCurrency(), invoice.getCurrency()); Assert.assertEquals(retrievedInvoice.getInvoiceDate(), invoice.getInvoiceDate()); Assert.assertEquals(retrievedInvoice.getTargetDate(), invoice.getTargetDate()); Assert.assertEquals(retrievedInvoice.getInvoiceItems().size(), invoice.getInvoiceItems().size()); Assert.assertEquals(retrievedInvoice.getInvoicePayments().size(), invoice.getPayments().size()); }
@Override public Object clone() { InvoiceModelDao parentInvoiceModelDao = (parentInvoice != null) ? new InvoiceModelDao(parentInvoice) : null; final Invoice clonedInvoice = new DefaultInvoice(getId(), getCreatedDate(), getAccountId(), getInvoiceNumber(), getInvoiceDate(), getTargetDate(), getCurrency(), getProcessedCurrency(), isMigrationInvoice(), isWrittenOff(), getStatus(), isParentInvoice(), parentInvoiceModelDao); clonedInvoice.getInvoiceItems().addAll(getInvoiceItems()); clonedInvoice.getPayments().addAll(getPayments()); return clonedInvoice; }
Assert.assertEquals(invoice1.getPayments().size(), 4); Assert.assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(new BigDecimal("4.00")), 0); Assert.assertNull(invoice1.getPayments().get(0).getLinkedInvoicePaymentId()); Assert.assertEquals(invoice1.getPayments().get(0).getPaymentCookieId(), payment1.getTransactions().get(0).getExternalKey()); Assert.assertEquals(invoice1.getPayments().get(0).getPaymentId(), payment1.getId()); Assert.assertEquals(invoice1.getPayments().get(0).getType(), InvoicePaymentType.ATTEMPT); Assert.assertTrue(invoice1.getPayments().get(0).isSuccess()); Assert.assertEquals(invoice1.getPayments().get(1).getAmount().compareTo(new BigDecimal("6.00")), 0); Assert.assertNull(invoice1.getPayments().get(1).getLinkedInvoicePaymentId()); Assert.assertEquals(invoice1.getPayments().get(1).getPaymentCookieId(), payment2.getTransactions().get(0).getExternalKey()); Assert.assertEquals(invoice1.getPayments().get(1).getPaymentId(), payment2.getId()); Assert.assertEquals(invoice1.getPayments().get(1).getType(), InvoicePaymentType.ATTEMPT); Assert.assertTrue(invoice1.getPayments().get(1).isSuccess()); Assert.assertEquals(invoice1.getPayments().get(2).getAmount().compareTo(new BigDecimal("-4.00")), 0); Assert.assertEquals(invoice1.getPayments().get(2).getLinkedInvoicePaymentId(), invoice1.getPayments().get(0).getId()); Assert.assertEquals(invoice1.getPayments().get(2).getPaymentCookieId(), payment1.getTransactions().get(1).getExternalKey()); Assert.assertEquals(invoice1.getPayments().get(2).getPaymentId(), payment1.getId()); Assert.assertEquals(invoice1.getPayments().get(2).getType(), InvoicePaymentType.REFUND); Assert.assertTrue(invoice1.getPayments().get(2).isSuccess()); Assert.assertEquals(invoice1.getPayments().get(3).getAmount().compareTo(new BigDecimal("-6.00")), 0); Assert.assertEquals(invoice1.getPayments().get(3).getLinkedInvoicePaymentId(), invoice1.getPayments().get(1).getId()); Assert.assertEquals(invoice1.getPayments().get(3).getPaymentCookieId(), payment2.getTransactions().get(1).getExternalKey()); Assert.assertEquals(invoice1.getPayments().get(3).getPaymentId(), payment2.getId()); Assert.assertEquals(invoice1.getPayments().get(3).getType(), InvoicePaymentType.REFUND); Assert.assertTrue(invoice1.getPayments().get(3).isSuccess());
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertTrue(invoice2.getPayments().get(0).isSuccess());
assertTrue(invoice1.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertTrue(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertEquals(invoice2.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice2.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice2.getPayments().get(0).isSuccess()); assertNotNull(invoice2.getPayments().get(0).getPaymentId());
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId());
Assert.assertEquals(updateInvoice2.getPayments().size(), 1); Assert.assertEquals(updateInvoice2.getPayments().get(0).getPaymentCookieId(), originalTransaction.getExternalKey()); Assert.assertEquals(updateInvoice3.getPayments().size(), 1); Assert.assertEquals(updateInvoice3.getPayments().get(0).getPaymentCookieId(), originalTransaction.getExternalKey()); Assert.assertTrue(updateInvoice3.getPayments().get(0).isSuccess()); Assert.assertEquals(invoiceUserApi.getAccountBalance(account.getId(), callContext).compareTo(invoice2.getBalance()), 0);
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertEquals(invoice2.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice2.getPayments().get(0).getCurrency(), Currency.USD); assertTrue(invoice2.getPayments().get(0).isSuccess()); assertNotNull(invoice2.getPayments().get(0).getPaymentId());
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertEquals(invoice2.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice2.getPayments().get(0).getCurrency(), Currency.USD); assertTrue(invoice2.getPayments().get(0).isSuccess()); assertNotNull(invoice2.getPayments().get(0).getPaymentId());
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertTrue(invoice2.getPayments().get(0).isSuccess());
assertTrue(invoice1.getPaidAmount().compareTo(BigDecimal.ZERO) == 0); assertTrue(invoice1.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice1.getPayments().size(), 1); assertEquals(invoice1.getPayments().get(0).getAmount().compareTo(BigDecimal.ZERO), 0); assertEquals(invoice1.getPayments().get(0).getCurrency(), Currency.USD); assertFalse(invoice1.getPayments().get(0).isSuccess()); assertNotNull(invoice1.getPayments().get(0).getPaymentId()); assertTrue(invoice2.getPaidAmount().compareTo(new BigDecimal("249.95")) == 0); assertTrue(invoice2.getChargedAmount().compareTo(new BigDecimal("249.95")) == 0); assertEquals(invoice2.getPayments().size(), 1); assertEquals(invoice2.getPayments().get(0).getAmount().compareTo(new BigDecimal("249.95")), 0); assertEquals(invoice2.getPayments().get(0).getCurrency(), Currency.USD); assertTrue(invoice2.getPayments().get(0).isSuccess()); assertNotNull(invoice2.getPayments().get(0).getPaymentId());
final Payment payment = paymentApi.getPayment(invoiceUserApi.getInvoicesByAccount(account.getId(), false, false, callContext).get(1).getPayments().get(0).getPaymentId(), false, false, PLUGIN_PROPERTIES, callContext); refundPaymentAndCheckForCompletion(account, payment, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT, NextEvent.BLOCK);
final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePayments(invoiceUserApi.getInvoicesByAccount(account.getId(), false, false, callContext).get(1).getPayments().get(0).getPaymentId(), callContext).get(0); Payment payment = paymentApi.getPayment(invoicePayment.getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext); payment = createChargeBackAndCheckForCompletion(account, payment, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT, NextEvent.BLOCK);
assertEquals(parentInvoice.getBalance().compareTo(new BigDecimal("249.95")), 0); assertEquals(parentInvoice.getPayments().size(), 1); assertEquals(paymentApi.getPayment(parentInvoice.getPayments().get(0).getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext).getPaymentMethodId(), parentAccount.getPaymentMethodId()); assertEquals(parentInvoice.getPayments().size(), 1); assertEquals(paymentApi.getPayment(parentInvoice.getPayments().get(0).getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext).getPaymentMethodId(), parentAccount.getPaymentMethodId()); assertEquals(childInvoices.get(2).getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(childInvoices.get(2).getPayments().size(), 1); assertEquals(paymentApi.getPayment(childInvoices.get(2).getPayments().get(0).getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext).getPaymentMethodId(), childAccount.getPaymentMethodId());
assertEquals(childInvoices.size(), 2); assertEquals(childInvoices.get(1).getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(childInvoices.get(1).getPayments().size(), 1); assertEquals(paymentApi.getPayment(childInvoices.get(1).getPayments().get(0).getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext).getPaymentMethodId(), childAccount.getPaymentMethodId()); assertTrue(parentInvoice.isParentInvoice()); assertEquals(parentInvoice.getBalance().compareTo(BigDecimal.ZERO), 0); assertEquals(parentInvoice.getPayments().size(), 1); assertEquals(paymentApi.getPayment(parentInvoice.getPayments().get(0).getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), callContext).getPaymentMethodId(), parentAccount.getPaymentMethodId());