@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } });
@Override public Invoice apply(final InvoiceModelDao invoiceModelDao) { return new DefaultInvoice(invoiceModelDao); } }
@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } }));
@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } }));
@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } })); //no need to fetch, invoicing is off on this account
@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } }));
@Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } }));
@Override public Invoice apply(final InvoiceModelDao invoiceModelDao) { return new DefaultInvoice(invoiceModelDao); } }
@Override public Collection<Invoice> getUnpaidInvoicesByAccountId(final UUID accountId, final LocalDate upToDate, final InternalTenantContext context) { return Collections2.transform(dao.getUnpaidInvoicesByAccountId(accountId, upToDate, context), new Function<InvoiceModelDao, Invoice>() { @Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } }); }
@Override public List<Invoice> getAllInvoicesByAccount(final UUID accountId, final TenantContext context) { return ImmutableList.<Invoice>copyOf(Collections2.transform(dao.getAllInvoicesByAccount(internalCallContextFactory.createInternalTenantContext(accountId, context)), new Function<InvoiceModelDao, Invoice>() { @Override public Invoice apply(final InvoiceModelDao input) { return new DefaultInvoice(input); } })); }
@Override public Invoice getInvoiceForPaymentId(final UUID paymentId, final InternalTenantContext context) throws InvoiceApiException { final UUID invoiceIdStr = dao.getInvoiceIdByPaymentId(paymentId, context); return invoiceIdStr == null ? null : new DefaultInvoice(dao.getById(invoiceIdStr, context)); }
@Override public Invoice getInvoiceByNumber(final Integer number, final TenantContext context) throws InvoiceApiException { // The account record id will be populated in the DAO return new DefaultInvoice(dao.getByNumber(number, internalCallContextFactory.createInternalTenantContext(context))); }
@Test(groups = "fast") public void testProcessedCurrencyDoesNotExist() throws Exception { final Invoice invoice = new DefaultInvoice(UUID.randomUUID(), clock.getUTCNow(), UUID.randomUUID(), new Integer(234), new LocalDate(), new LocalDate(), Currency.USD, Currency.USD, false); checkOutput(invoice, "{{#invoice.processedCurrency}}" + "<tr>\n" + " <td class=\"processedCurrency\"><strong>{{invoice.processedCurrency}}</strong></td>\n" + "</tr>\n" + "{{/invoice.processedCurrency}}", "", Locale.US); }
@Test(groups = "slow") public void testAddInvoiceItemAdjustmentForPartialAmount() throws Exception { final Invoice invoice = new DefaultInvoice(UUID.randomUUID(), clock.getUTCToday(), clock.getUTCToday(), Currency.USD); final InvoiceItem invoiceItem = new RecurringInvoiceItem(invoice.getId(), invoice.getAccountId(), UUID.randomUUID(), UUID.randomUUID(), "test plan", "test phase", new LocalDate(2010, 1, 1), new LocalDate(2010, 4, 1), INVOICE_ITEM_AMOUNT, new BigDecimal("7.00"), Currency.USD); invoice.addInvoiceItem(invoiceItem); invoiceUtil.createInvoice(invoice, true, internalCallContext); final InvoiceItemModelDao adjustedInvoiceItem = createAndCheckAdjustment(invoice, invoiceItem, BigDecimal.TEN); Assert.assertEquals(adjustedInvoiceItem.getAmount().compareTo(BigDecimal.TEN.negate()), 0); }
@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); }
@Test(groups = "slow") public void testAddInvoiceItemAdjustmentForFullAmount() throws Exception { final Invoice invoice = new DefaultInvoice(UUID.randomUUID(), clock.getUTCToday(), clock.getUTCToday(), Currency.USD); final InvoiceItem invoiceItem = new RecurringInvoiceItem(invoice.getId(), invoice.getAccountId(), UUID.randomUUID(), UUID.randomUUID(), "test plan", "test phase", new LocalDate(2010, 1, 1), new LocalDate(2010, 4, 1), INVOICE_ITEM_AMOUNT, new BigDecimal("7.00"), Currency.USD); invoice.addInvoiceItem(invoiceItem); invoiceUtil.createInvoice(invoice, true, internalCallContext); final InvoiceItemModelDao adjustedInvoiceItem = createAndCheckAdjustment(invoice, invoiceItem, null); Assert.assertEquals(adjustedInvoiceItem.getAmount().compareTo(invoiceItem.getAmount().negate()), 0); }
@Override public void tagInvoiceAsNotWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException, InvoiceApiException { // Note: the tagApi is audited final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(invoiceId, ObjectType.INVOICE, context); tagApi.removeTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.getId(), internalContext); // Retrieve the invoice for the account id final Invoice invoice = new DefaultInvoice(dao.getById(invoiceId, internalContext)); // This is for overdue notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalContext); }
@Override public void tagInvoiceAsWrittenOff(final UUID invoiceId, final CallContext context) throws TagApiException, InvoiceApiException { // Note: the tagApi is audited final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(invoiceId, ObjectType.INVOICE, context); tagApi.addTag(invoiceId, ObjectType.INVOICE, ControlTagType.WRITTEN_OFF.getId(), internalContext); // Retrieve the invoice for the account id final Invoice invoice = new DefaultInvoice(dao.getById(invoiceId, internalContext)); // This is for overdue notifyBusOfInvoiceAdjustment(invoiceId, invoice.getAccountId(), internalContext); }
private void createInvoiceAndPaymentCreationEvents(final Account account) { final DefaultInvoice invoice = new DefaultInvoice(account.getId(), clock.getUTCToday(), clock.getUTCToday(), ACCOUNT_CURRENCY); final FixedPriceInvoiceItem invoiceItem = new FixedPriceInvoiceItem(invoice.getId(), account.getId(), bundleId, subscriptionId, "somePlan", "somePhase", clock.getUTCToday(), INVOICE_AMOUNT, ACCOUNT_CURRENCY); invoice.addInvoiceItem(invoiceItem); Mockito.when(invoiceInternalApi.getInvoicesByAccountId(Mockito.eq(account.getId()), Mockito.<InternalCallContext>any())).thenReturn(ImmutableList.<Invoice>of(invoice)); // It doesn't really matter what the events contain - the listener will go back to the db invoiceCreationNotification = new DefaultInvoiceCreationEvent(invoice.getId(), account.getId(), INVOICE_AMOUNT, ACCOUNT_CURRENCY, null, 1L, 1L); paymentInfoNotification = new DefaultPaymentInfoEvent(account.getId(), invoice.getId(), null, INVOICE_AMOUNT, -1, PaymentStatus.UNKNOWN, null, clock.getUTCNow(), 1L, 1L); }
@Test(groups = "slow") public void testSimple() throws Exception { final UUID accountId = account.getId(); final Invoice invoice = new DefaultInvoice(accountId, clock.getUTCToday(), clock.getUTCToday(), Currency.USD); invoiceUtil.createInvoice(invoice, true, context); final InvoiceModelDao retrievedInvoice = invoiceDao.getById(invoice.getId(), context); invoiceUtil.checkInvoicesEqual(retrievedInvoice, invoice); invoiceUtil.checkInvoicesEqual(invoiceDao.getByNumber(retrievedInvoice.getInvoiceNumber(), context), invoice); }