@Override public InvoiceFormatter createInvoiceFormatter(final TranslatorConfig config, final Invoice invoice, final Locale locale, CurrencyConversionApi currencyConversionApi) { return new DefaultInvoiceFormatter(config, invoice, locale, currencyConversionApi); } }
@Override public String getFormattedBalance() { final NumberFormat number = NumberFormat.getCurrencyInstance(locale); return number.format(getBalance().doubleValue()); }
@Override public String getFormattedChargedAmount() { final NumberFormat number = NumberFormat.getCurrencyInstance(locale); return number.format(getChargedAmount().doubleValue()); }
@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 = ((DefaultInvoice) 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 (Rate rate : conversion.getRates()) { if (rate.getCurrency() == getCurrency()) { return rate.getValue().toString(); } } } catch (CurrencyConversionException e) { logger.warn("Failed to retrieve currency conversion rates for currency = " + currency + " and date = " + latestPaymentDate, e); return null; } logger.warn("Failed to retrieve currency conversion rates for currency = " + currency + " and date = " + latestPaymentDate); return null; }
mergedCBAItem = mergeCBAItem(invoiceItems, mergedCBAItem, item); } else if (InvoiceItemType.REFUND_ADJ.equals(item.getInvoiceItemType()) || InvoiceItemType.CREDIT_ADJ.equals(item.getInvoiceItemType())) { mergedInvoiceAdjustment = mergeInvoiceAdjustmentItem(invoiceItems, mergedInvoiceAdjustment, item); } else { invoiceItems.add(item);
@Override public String getFormattedPaidAmount() { final NumberFormat number = NumberFormat.getCurrencyInstance(locale); return number.format(getPaidAmount().doubleValue()); }
@Override public Currency getProcessedCurrency() { final Currency processedCurrency = ((DefaultInvoice) invoice).getProcessedCurrency(); // If the processed currency is different we return it; otherwise we return null so that template does not print anything special return (processedCurrency != getCurrency()) ? processedCurrency : null; }
private void checkOutput(final Invoice invoice, final String template, final String expected, final Locale locale) { final Map<String, Object> data = new HashMap<String, Object>(); data.put("invoice", new DefaultInvoiceFormatter(config, invoice, locale, null)); final String formattedText = templateEngine.executeTemplateText(template, data); Assert.assertEquals(formattedText, expected); } }
@Test(groups = "fast") public void testIgnoreZeroAdjustments() throws Exception { // Scenario: single item with payment // * $10 item // * $-10 CBA // * $10 CBA final FixedPriceInvoiceItem fixedItem = new FixedPriceInvoiceItem(UUID.randomUUID(), UUID.randomUUID(), null, null, UUID.randomUUID().toString(), UUID.randomUUID().toString(), new LocalDate(), BigDecimal.TEN, Currency.USD); final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem = new CreditBalanceAdjInvoiceItem(fixedItem.getInvoiceId(), fixedItem.getAccountId(), fixedItem.getStartDate(), fixedItem.getAmount(), fixedItem.getCurrency()); final CreditBalanceAdjInvoiceItem creditBalanceAdjInvoiceItem2 = new CreditBalanceAdjInvoiceItem(fixedItem.getInvoiceId(), fixedItem.getAccountId(), fixedItem.getStartDate(), fixedItem.getAmount().negate(), fixedItem.getCurrency()); final Invoice invoice = new DefaultInvoice(fixedItem.getInvoiceId(), fixedItem.getAccountId(), null, new LocalDate(), new LocalDate(), Currency.USD, false); invoice.addInvoiceItem(fixedItem); invoice.addInvoiceItem(creditBalanceAdjInvoiceItem); invoice.addInvoiceItem(creditBalanceAdjInvoiceItem2); // Check the scenario Assert.assertEquals(invoice.getBalance().doubleValue(), 10.00); Assert.assertEquals(invoice.getCreditedAmount().doubleValue(), 0.00); // Verify the merge final InvoiceFormatter formatter = new DefaultInvoiceFormatter(config, invoice, Locale.US, null); final List<InvoiceItem> invoiceItems = formatter.getInvoiceItems(); Assert.assertEquals(invoiceItems.size(), 1); Assert.assertEquals(invoiceItems.get(0).getInvoiceItemType(), InvoiceItemType.FIXED); Assert.assertEquals(invoiceItems.get(0).getAmount().doubleValue(), 10.00); }
data.put("text", translator); data.put("invoice", new DefaultInvoiceFormatter(config, invoice, Locale.US, currencyConversionApi));
final InvoiceFormatter formatter = new DefaultInvoiceFormatter(config, invoice, Locale.US, null); final List<InvoiceItem> invoiceItems = formatter.getInvoiceItems(); Assert.assertEquals(invoiceItems.size(), 4);