@Override public boolean apply(final PlanPhasePriceOverride input) { if (input.getPhaseName() != null) { return input.getPhaseName().equals(curPhase.getName()); } // If the phaseName was not passed, we infer by matching the phaseType. This obviously would not work in a case where // a plan is defined with multiple phases of the same type. final PlanPhaseSpecifier curPlanPhaseSpecifier = input.getPlanPhaseSpecifier(); if (curPlanPhaseSpecifier.getPhaseType().equals(curPhase.getPhaseType())) { return true; } return false; } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
Assert.assertNull(curPhase.getFixedPrice()); Assert.assertNull(curPhase.getRecurringPrice()); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[0].getPhaseName());
@Test(groups = "slow") public void testGetOverriddenPlanPhases() throws Exception { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("SpyCarAdvanced.xml").toExternalForm(), StandaloneCatalog.class); final Plan plan = catalog.findCurrentPlan("discount-standard-monthly"); final PlanPhasePriceOverride[] resolvedOverrides = new PlanPhasePriceOverride[plan.getAllPhases().length]; resolvedOverrides[0] = new DefaultPlanPhasePriceOverride(plan.getAllPhases()[0].getName(), Currency.USD, BigDecimal.TEN, BigDecimal.ONE, null); resolvedOverrides[1] = new DefaultPlanPhasePriceOverride(plan.getAllPhases()[1].getName(), Currency.USD, BigDecimal.ONE, BigDecimal.TEN, null); resolvedOverrides[2] = new DefaultPlanPhasePriceOverride(plan.getFinalPhase().getName(), Currency.USD, BigDecimal.ZERO, new BigDecimal("348.64"), null); final CatalogOverridePlanDefinitionModelDao newPlan = catalogOverrideDao.getOrCreateOverridePlanDefinition(plan, new DateTime(catalog.getEffectiveDate()), resolvedOverrides, internalCallContext); final List<CatalogOverridePhaseDefinitionModelDao> phases = catalogOverrideDao.getOverriddenPlanPhases(newPlan.getRecordId(), internalCallContext); assertEquals(phases.size(), 3); for (int i = 0; i < 3; i++) { final CatalogOverridePhaseDefinitionModelDao curPhase = phases.get(i); assertEquals(curPhase.getCurrency(), resolvedOverrides[i].getCurrency().name()); assertEquals(curPhase.getFixedPrice().compareTo(resolvedOverrides[i].getFixedPrice()), 0); assertEquals(curPhase.getRecurringPrice().compareTo(resolvedOverrides[i].getRecurringPrice()), 0); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[i].getPhaseName()); } }
assertEquals(curPhase.getFixedPrice().compareTo(resolvedOverrides[0].getFixedPrice()), 0); assertEquals(curPhase.getRecurringPrice().compareTo(resolvedOverrides[0].getRecurringPrice()), 0); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[0].getPhaseName());
@Override public CatalogOverridePlanDefinitionModelDao inTransaction(final Handle handle, final TransactionStatus status) throws Exception { final CatalogOverridePhaseDefinitionModelDao[] overridePhaseDefinitionModelDaos = new CatalogOverridePhaseDefinitionModelDao[resolvedOverride.length]; for (int i = 0; i < resolvedOverride.length; i++) { final PlanPhasePriceOverride curOverride = resolvedOverride[i]; if (curOverride != null) { PlanPhase parentPlanPhase = parentPlan.getAllPhases()[i]; final CatalogOverridePhaseDefinitionModelDao createdOverridePhaseDefinitionModelDao = getOrCreateOverridePhaseDefinitionFromTransaction(parentPlanPhase, curOverride.getPhaseName(),curOverride.getCurrency(), catalogEffectiveDate, curOverride, handle, context); overridePhaseDefinitionModelDaos[i] = createdOverridePhaseDefinitionModelDao; } } final CatalogOverridePlanDefinitionSqlDao sqlDao = handle.attach(CatalogOverridePlanDefinitionSqlDao.class); final Long targetPlanDefinitionRecordId = getOverridePlanDefinitionFromTransaction(overridePhaseDefinitionModelDaos, handle, context); if (targetPlanDefinitionRecordId != null) { return sqlDao.getByRecordId(targetPlanDefinitionRecordId, context); } final CatalogOverridePlanDefinitionModelDao inputPlanDef = new CatalogOverridePlanDefinitionModelDao(parentPlan.getName(), true, catalogEffectiveDate); sqlDao.create(inputPlanDef, context); final Long recordId = sqlDao.getLastInsertId(); final CatalogOverridePlanDefinitionModelDao resultPlanDef = sqlDao.getByRecordId(recordId, context); for (short i = 0; i < overridePhaseDefinitionModelDaos.length; i++) { if (overridePhaseDefinitionModelDaos[i] != null) { createCatalogOverridePlanPhaseFromTransaction(i, overridePhaseDefinitionModelDaos[i], resultPlanDef, handle, context); } } return resultPlanDef; } });
@Override public boolean apply(final PlanPhasePriceOverride input) { if (input.getPhaseName() != null) { return input.getPhaseName().equals(curPhase.getName()); } // If the phaseName was not passed, we infer by matching the phaseType. This obviously would not work in a case where // a plan is defined with multiple phases of the same type. final PlanPhaseSpecifier curPlanPhaseSpecifier = input.getPlanPhaseSpecifier(); if (curPlanPhaseSpecifier.getPhaseType().equals(curPhase.getPhaseType())) { return true; } return false; } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
@Override public boolean apply(final PlanPhasePriceOverride input) { return input.getPhaseName().equals(initialPhase.getName()); } }).orNull();
@Test(groups = "slow") public void testGetOverriddenPlanPhases() throws Exception { final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("SpyCarAdvanced.xml").toExternalForm(), StandaloneCatalog.class); final Plan plan = catalog.findCurrentPlan("discount-standard-monthly"); final PlanPhasePriceOverride[] resolvedOverrides = new PlanPhasePriceOverride[plan.getAllPhases().length]; resolvedOverrides[0] = new DefaultPlanPhasePriceOverride(plan.getAllPhases()[0].getName(), Currency.USD, BigDecimal.TEN, BigDecimal.ONE, null); resolvedOverrides[1] = new DefaultPlanPhasePriceOverride(plan.getAllPhases()[1].getName(), Currency.USD, BigDecimal.ONE, BigDecimal.TEN, null); resolvedOverrides[2] = new DefaultPlanPhasePriceOverride(plan.getFinalPhase().getName(), Currency.USD, BigDecimal.ZERO, new BigDecimal("348.64"), null); final CatalogOverridePlanDefinitionModelDao newPlan = catalogOverrideDao.getOrCreateOverridePlanDefinition(plan, new DateTime(catalog.getEffectiveDate()), resolvedOverrides, internalCallContext); final List<CatalogOverridePhaseDefinitionModelDao> phases = catalogOverrideDao.getOverriddenPlanPhases(newPlan.getRecordId(), internalCallContext); assertEquals(phases.size(), 3); for (int i = 0; i < 3; i++) { final CatalogOverridePhaseDefinitionModelDao curPhase = phases.get(i); assertEquals(curPhase.getCurrency(), resolvedOverrides[i].getCurrency().name()); assertEquals(curPhase.getFixedPrice().compareTo(resolvedOverrides[i].getFixedPrice()), 0); assertEquals(curPhase.getRecurringPrice().compareTo(resolvedOverrides[i].getRecurringPrice()), 0); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[i].getPhaseName()); } }
assertEquals(curPhase.getFixedPrice().compareTo(resolvedOverrides[0].getFixedPrice()), 0); assertEquals(curPhase.getRecurringPrice().compareTo(resolvedOverrides[0].getRecurringPrice()), 0); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[0].getPhaseName());
Assert.assertNull(curPhase.getFixedPrice()); Assert.assertNull(curPhase.getRecurringPrice()); assertEquals(curPhase.getParentPhaseName(), resolvedOverrides[0].getPhaseName());
@Override public CatalogOverridePlanDefinitionModelDao inTransaction(final Handle handle, final TransactionStatus status) throws Exception { final CatalogOverridePhaseDefinitionModelDao[] overridePhaseDefinitionModelDaos = new CatalogOverridePhaseDefinitionModelDao[resolvedOverride.length]; for (int i = 0; i < resolvedOverride.length; i++) { final PlanPhasePriceOverride curOverride = resolvedOverride[i]; if (curOverride != null) { PlanPhase parentPlanPhase = parentPlan.getAllPhases()[i]; final CatalogOverridePhaseDefinitionModelDao createdOverridePhaseDefinitionModelDao = getOrCreateOverridePhaseDefinitionFromTransaction(parentPlanPhase, curOverride.getPhaseName(),curOverride.getCurrency(), catalogEffectiveDate, curOverride, handle, context); overridePhaseDefinitionModelDaos[i] = createdOverridePhaseDefinitionModelDao; } } final CatalogOverridePlanDefinitionSqlDao sqlDao = handle.attach(CatalogOverridePlanDefinitionSqlDao.class); final Long targetPlanDefinitionRecordId = getOverridePlanDefinitionFromTransaction(overridePhaseDefinitionModelDaos, handle, context); if (targetPlanDefinitionRecordId != null) { return sqlDao.getByRecordId(targetPlanDefinitionRecordId, context); } final CatalogOverridePlanDefinitionModelDao inputPlanDef = new CatalogOverridePlanDefinitionModelDao(parentPlan.getName(), true, catalogEffectiveDate); sqlDao.create(inputPlanDef, context); final Long recordId = sqlDao.getLastInsertId(); final CatalogOverridePlanDefinitionModelDao resultPlanDef = sqlDao.getByRecordId(recordId, context); for (short i = 0; i < overridePhaseDefinitionModelDaos.length; i++) { if (overridePhaseDefinitionModelDaos[i] != null) { createCatalogOverridePlanPhaseFromTransaction(i, overridePhaseDefinitionModelDaos[i], resultPlanDef, handle, context); } } return resultPlanDef; } });