@Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } }));
@Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } });
@Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } }));
@Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } }));
@Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } }));
@Nullable @Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } }));
@Override public void notifyOfPayment(final UUID invoiceId, final BigDecimal amount, final Currency currency, final Currency processedCurrency, final UUID paymentId, final DateTime paymentDate, final InternalCallContext context) throws InvoiceApiException { final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amount, currency, processedCurrency); notifyOfPayment(invoicePayment, context); }
@Override public List<InvoicePayment> getChargebacksByPaymentId(final UUID paymentId, final TenantContext context) { return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getChargebacksByPaymentId(paymentId, internalCallContextFactory.createInternalTenantContext(paymentId, ObjectType.PAYMENT, context)), new Function<InvoicePaymentModelDao, InvoicePayment>() { @Override public InvoicePayment apply(final InvoicePaymentModelDao input) { return new DefaultInvoicePayment(input); } })); }
@Override public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId, final InternalCallContext context) throws InvoiceApiException { if (amount.compareTo(BigDecimal.ZERO) <= 0) { throw new InvoiceApiException(ErrorCode.PAYMENT_REFUND_AMOUNT_NEGATIVE_OR_NULL); } return new DefaultInvoicePayment(dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, paymentCookieId, context)); }
@Override public InvoicePayment getChargebackById(final UUID chargebackId, final TenantContext context) throws InvoiceApiException { return new DefaultInvoicePayment(dao.getChargebackById(chargebackId, internalCallContextFactory.createInternalTenantContext(chargebackId, ObjectType.INVOICE_PAYMENT, context))); }
@Override public InvoicePayment createChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException { return new DefaultInvoicePayment(dao.postChargeback(invoicePaymentId, amount, internalCallContextFactory.createInternalCallContext(invoicePaymentId, ObjectType.INVOICE_PAYMENT, context))); } }
@Test(groups = "slow") public void testAccountBalanceWithNoInvoiceItems() throws EntityPersistenceException { final UUID accountId = account.getId(); final LocalDate targetDate1 = new LocalDate(2011, 10, 6); final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD); invoiceUtil.createInvoice(invoice1, true, context); final BigDecimal payment1 = new BigDecimal("48.0"); final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD, Currency.USD); invoiceUtil.createPayment(payment, context); final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context); assertEquals(balance.compareTo(BigDecimal.ZERO.subtract(payment1)), 0); }
@Override public InvoicePayment createChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException { InvoicePayment existingPayment = null; for (final InvoicePayment payment : invoicePayments) { if (payment.getId() == invoicePaymentId) { existingPayment = payment; break; } } if (existingPayment != null) { invoicePayments.add(new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.CHARGED_BACK, null, null, DateTime.now(DateTimeZone.UTC), amount, existingPayment.getCurrency(), existingPayment.getProcessedCurrency(), null, existingPayment.getId())); } return existingPayment; }
@Test(groups = "slow") public void testInvoicePayment() throws InvoiceApiException { final UUID accountId = account.getId(); final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), clock.getUTCToday(), Currency.USD); final UUID invoiceId = invoice.getId(); final UUID subscriptionId = UUID.randomUUID(); final UUID bundleId = UUID.randomUUID(); final LocalDate startDate = new LocalDate(2010, 1, 1); final LocalDate endDate = new LocalDate(2010, 4, 1); final InvoiceItem invoiceItem = new RecurringInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, "test plan", "test phase", startDate, endDate, new BigDecimal("21.00"), new BigDecimal("7.00"), Currency.USD); invoice.addInvoiceItem(invoiceItem); invoiceUtil.createInvoice(invoice, true, context); final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, context); assertNotNull(savedInvoice); assertEquals(InvoiceModelDaoHelper.getBalance(savedInvoice).compareTo(new BigDecimal("21.00")), 0); assertEquals(savedInvoice.getInvoiceItems().size(), 1); final BigDecimal paymentAmount = new BigDecimal("11.00"); final UUID paymentId = UUID.randomUUID(); final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, clock.getUTCNow().plusDays(12), paymentAmount, Currency.USD, Currency.USD); invoiceDao.notifyOfPayment(new InvoicePaymentModelDao(defaultInvoicePayment), context); final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoiceId, context); assertNotNull(retrievedInvoice); assertEquals(retrievedInvoice.getInvoiceItems().size(), 1); assertEquals(InvoiceModelDaoHelper.getBalance(retrievedInvoice).compareTo(new BigDecimal("10.00")), 0); }
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), new DateTime(), payment1, Currency.USD, Currency.USD); invoiceUtil.createPayment(payment, context); balance = invoiceDao.getAccountBalance(accountId, context);
@Test(groups = "slow") public void testAccountBalance() throws EntityPersistenceException { final UUID accountId = account.getId(); final UUID bundleId = UUID.randomUUID(); final LocalDate targetDate1 = new LocalDate(2011, 10, 6); final Invoice invoice1 = new DefaultInvoice(accountId, clock.getUTCToday(), targetDate1, Currency.USD); invoiceUtil.createInvoice(invoice1, true, context); final LocalDate startDate = new LocalDate(2011, 3, 1); final LocalDate endDate = startDate.plusMonths(1); final BigDecimal rate1 = new BigDecimal("17.0"); final BigDecimal rate2 = new BigDecimal("42.0"); final RecurringInvoiceItem item1 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase A", startDate, endDate, rate1, rate1, Currency.USD); invoiceUtil.createInvoiceItem(item1, context); final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice1.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate, endDate, rate2, rate2, Currency.USD); invoiceUtil.createInvoiceItem(item2, context); final BigDecimal payment1 = new BigDecimal("48.0"); final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), new DateTime(), payment1, Currency.USD, Currency.USD); invoiceUtil.createPayment(payment, context); final BigDecimal balance = invoiceDao.getAccountBalance(accountId, context); assertEquals(balance.compareTo(rate1.add(rate2).subtract(payment1)), 0); }
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice.getId(), new DateTime(), payment1, Currency.USD, Currency.USD); invoiceUtil.createPayment(payment, context); balancePriorRefund = invoiceDao.getAccountBalance(accountId, context);
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), new DateTime(), payment1, Currency.USD, Currency.USD); invoiceUtil.createPayment(payment, context); balance = invoiceDao.getAccountBalance(accountId, context);
invoice1.addPayment(new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, UUID.randomUUID(), invoice1.getId(), april25.toDateTimeAtCurrentTime(), TEN, Currency.USD, Currency.USD)); assertEquals(invoice1.getBalance().compareTo(ZERO), 0);
final DefaultInvoicePayment defaultInvoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice1.getId(), clock.getUTCNow().plusDays(12), new BigDecimal("10.0"), Currency.USD, Currency.USD);