use of org.killbill.billing.catalog.api.IllegalPlanChange in project killbill by killbill.
the class DefaultPlanRules method planChange.
public PlanChangeResult planChange(final PlanPhaseSpecifier from, final PlanSpecifier to, final StaticCatalog catalog) throws CatalogApiException {
final DefaultPriceList toPriceList = to.getPriceListName() != null ? (DefaultPriceList) catalog.findCurrentPricelist(to.getPriceListName()) : findPriceList(from, catalog);
// If we use old scheme {product, billingPeriod, pricelist}, ensure pricelist is correct
// (Pricelist may be null because if it is unspecified this is the principal use-case)
final PlanSpecifier toWithPriceList = to.getPlanName() == null ? new PlanSpecifier(to.getProductName(), to.getBillingPeriod(), toPriceList.getName()) : to;
final BillingActionPolicy policy = getPlanChangePolicy(from, toWithPriceList, catalog);
if (policy == BillingActionPolicy.ILLEGAL) {
throw new IllegalPlanChange(from, toWithPriceList);
}
final PlanAlignmentChange alignment = getPlanChangeAlignment(from, toWithPriceList, catalog);
return new PlanChangeResult(toPriceList, policy, alignment);
}
use of org.killbill.billing.catalog.api.IllegalPlanChange in project killbill by killbill.
the class DefaultPlanRules method getPlanChangeResult.
@Override
public PlanChangeResult getPlanChangeResult(final PlanPhaseSpecifier from, final PlanSpecifier to) throws CatalogApiException {
final DefaultPriceList toPriceList = to.getPriceListName() != null ? (DefaultPriceList) root.findPriceList(to.getPriceListName()) : findPriceList(from);
// If we use old scheme {product, billingPeriod, pricelist}, ensure pricelist is correct
// (Pricelist may be null because if it is unspecified this is the principal use-case)
final PlanSpecifier toWithPriceList = to.getPlanName() == null ? new PlanSpecifier(to.getProductName(), to.getBillingPeriod(), toPriceList.getName()) : to;
final BillingActionPolicy policy = getPlanChangePolicy(from, toWithPriceList);
if (policy == BillingActionPolicy.ILLEGAL) {
throw new IllegalPlanChange(from, toWithPriceList);
}
final PlanAlignmentChange alignment = getPlanChangeAlignment(from, toWithPriceList);
return new PlanChangeResult(toPriceList, policy, alignment);
}
use of org.killbill.billing.catalog.api.IllegalPlanChange in project killbill by killbill.
the class TestPlanRules method testBaseCase.
@Test(groups = "fast")
public void testBaseCase() throws CatalogApiException {
final DefaultProduct product1 = cat.getCurrentProduct(0);
final DefaultProduct product2 = cat.getCurrentProduct(1);
final DefaultPriceList priceList1 = (DefaultPriceList) cat.findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME);
final DefaultPriceList priceList2 = cat.getPriceLists().getChildPriceLists()[0];
final PlanPhaseSpecifier from = new PlanPhaseSpecifier(product1.getName(), BillingPeriod.MONTHLY, priceList1.getName(), PhaseType.EVERGREEN);
final PlanSpecifier to = new PlanSpecifier(product2.getName(), BillingPeriod.MONTHLY, null);
PlanChangeResult result = null;
try {
result = cat.getPlanRules().getPlanChangeResult(from, to);
} catch (IllegalPlanChange e) {
Assert.fail("We should not have triggered this error");
} catch (CatalogApiException e) {
Assert.fail("", e);
}
Assert.assertEquals(result.getPolicy(), BillingActionPolicy.END_OF_TERM);
Assert.assertEquals(result.getAlignment(), PlanAlignmentChange.START_OF_SUBSCRIPTION);
Assert.assertEquals(result.getNewPriceList(), priceList2);
}
use of org.killbill.billing.catalog.api.IllegalPlanChange in project killbill by killbill.
the class TestPlanRules method testExistingPriceListIsKept.
@Test(groups = "fast")
public void testExistingPriceListIsKept() throws CatalogApiException {
final DefaultProduct product1 = cat.getCurrentProduct(0);
final DefaultPriceList priceList1 = (DefaultPriceList) cat.findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME);
final PlanPhaseSpecifier from = new PlanPhaseSpecifier(product1.getName(), BillingPeriod.MONTHLY, priceList1.getName(), PhaseType.EVERGREEN);
final PlanSpecifier to = new PlanSpecifier(product1.getName(), BillingPeriod.ANNUAL, priceList1.getName());
PlanChangeResult result = null;
try {
result = ((DefaultPlanRules) cat.getPlanRules()).getPlanChangeResult(from, to);
} catch (IllegalPlanChange e) {
Assert.fail("We should not have triggered this error");
} catch (CatalogApiException e) {
Assert.fail("", e);
}
Assert.assertEquals(result.getPolicy(), BillingActionPolicy.END_OF_TERM);
Assert.assertEquals(result.getAlignment(), PlanAlignmentChange.START_OF_SUBSCRIPTION);
Assert.assertEquals(result.getNewPriceList(), priceList1);
}
Aggregations