private void verifyInvoiceItems(final LocalDate startDate, final LocalDate endDate, final LocalDate targetDate, final DateTimeZone dateTimeZone, final int billingCycleDayLocal, final BillingPeriod billingPeriod, final LinkedHashMap<LocalDate, LocalDate> expectedDates) throws InvalidDateSequenceException { final InAdvanceBillingMode billingMode = new InAdvanceBillingMode(); final List<RecurringInvoiceItemData> invoiceItems = billingMode.calculateInvoiceItemData(startDate, endDate, targetDate, billingCycleDayLocal, billingPeriod); int i = 0; for (final LocalDate periodStartDate : expectedDates.keySet()) { Assert.assertEquals(invoiceItems.get(i).getStartDate(), periodStartDate); Assert.assertEquals(invoiceItems.get(i).getEndDate(), expectedDates.get(periodStartDate)); Assert.assertTrue(invoiceItems.get(0).getNumberOfCycles().compareTo(BigDecimal.ONE) <= 0); i++; } Assert.assertEquals(invoiceItems.size(), i); } }
final RecurringInvoiceItemData itemData = new RecurringInvoiceItemData(startDate, endDate, leadingProRationPeriods); results.add(itemData); return results; if (leadingProRationPeriods != null && leadingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) { final RecurringInvoiceItemData itemData = new RecurringInvoiceItemData(startDate, billingIntervalDetail.getFirstBillingCycleDate(), leadingProRationPeriods); log.info("Adding pro-ration: {}", itemData); results.add(itemData); if (results.size() > 0) { servicePeriodStartDate = results.get(results.size() - 1).getEndDate(); } else if (i == 0) { results.add(new RecurringInvoiceItemData(servicePeriodStartDate, servicePeriodEndDate, BigDecimal.ONE)); if (trailingProRationPeriods.compareTo(BigDecimal.ZERO) > 0) { final RecurringInvoiceItemData itemData = new RecurringInvoiceItemData(lastBillingCycleDate, effectiveEndDate, trailingProRationPeriods); log.info("Adding trailing pro-ration: {}", itemData); results.add(itemData);
protected BigDecimal calculateNumberOfBillingCycles(final LocalDate startDate, final LocalDate targetDate, final int billingCycleDay) throws InvalidDateSequenceException { final List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, null, targetDate, billingCycleDay, getBillingPeriod()); BigDecimal numberOfBillingCycles = ZERO; for (final RecurringInvoiceItemData item : items) { numberOfBillingCycles = numberOfBillingCycles.add(item.getNumberOfCycles()); } return numberOfBillingCycles.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD); } }
protected BigDecimal calculateNumberOfBillingCycles(final LocalDate startDate, final LocalDate endDate, final LocalDate targetDate, final int billingCycleDay) throws InvalidDateSequenceException { final List<RecurringInvoiceItemData> items = getBillingMode().calculateInvoiceItemData(startDate, endDate, targetDate, billingCycleDay, getBillingPeriod()); BigDecimal numberOfBillingCycles = ZERO; for (final RecurringInvoiceItemData item : items) { numberOfBillingCycles = numberOfBillingCycles.add(item.getNumberOfCycles()); } return numberOfBillingCycles.setScale(NUMBER_OF_DECIMALS, ROUNDING_METHOD); }
final BigDecimal amount = itemDatum.getNumberOfCycles().multiply(rate).setScale(NUMBER_OF_DECIMALS, ROUNDING_MODE); thisEvent.getPlan().getName(), thisEvent.getPlanPhase().getName(), itemDatum.getStartDate(), itemDatum.getEndDate(), amount, rate, currency); items.add(recurringItem);