}
// 1. Round ONE: split time according to overlapping policies and agreements.
- val alignedTimeslots = List(referenceTimeslot) //splitTimeslotByPoliciesAndAgreements(referenceTimeslot, policyTimeslots.toList, agreementTimeslots.toList, Just(clog))
+ //val alignedTimeslots = List(referenceTimeslot) //splitTimeslotByPoliciesAndAgreements(referenceTimeslot, policyTimeslots.toList, agreementTimeslots.toList, Just(clog))
+ val alignedTimeslots = splitTimeslotByPoliciesAndAgreements(referenceTimeslot, policyTimeslots.toList, agreementTimeslots.toList, Just(clog))
// 2. Round TWO: Use the aligned timeslots of Round ONE to produce even more
// fine-grained timeslots according to applicable algorithms.
val allChargeslots = for {
alignedTimeslot <- alignedTimeslots
} yield {
- val policy = policyByTimeslot.valuesIterator.next()//getPolicyWithin(alignedTimeslot)
+ //val policy = policyByTimeslot.valuesIterator.next()//getPolicyWithin(alignedTimeslot)
+ val policy = getPolicyWithin(alignedTimeslot)
// clog.debug("dslPolicy = %s", dslPolicy)
- val userAgreement = agreementByTimeslot.valuesIterator.next()//getAgreementWithin(alignedTimeslot)
+ //val userAgreement = agreementByTimeslot.valuesIterator.next()//getAgreementWithin(alignedTimeslot)
+ val userAgreement = getAgreementWithin(alignedTimeslot)
// TODO: Factor this out, just like we did with:
// TODO: val alignedTimeslots = splitTimeslotByPoliciesAndAgreements
effectivePriceTable
}
- //resolveEffective(alignedTimeslot, effectivePriceTable.priceOverrides)
- immutable.SortedMap(alignedTimeslot -> effectivePriceTable.priceOverrides.head)
+ resolveEffective(alignedTimeslot, effectivePriceTable.priceOverrides)
+ //immutable.SortedMap(alignedTimeslot -> effectivePriceTable.priceOverrides.head)
}
private def printPriceList(p: PriceList) : Unit = {
private[this] def policyAt(s:Long) : PolicyModel =
new StdPolicy("", None, Timespan(s), Set(), Set(), Map())
- def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, Policy] = {
- ensureLoaded()
-
- val range = Timeslot(fromMillis,toMillis)
- /* ``to'' method: return the subset of all policies.from <= range.to */
- _policies.to(policyAt(range.to.getTime)).foldLeft (EmptyPolicyByTimeslotMap) { (map,p) =>
- if(p.validityTimespan.toTimeslot.to.getTime >= range.from.getTime)
- map + ((p.validityTimespan.toTimeslot,p))
- else
- map
+ def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, Policy] =
+ ensureLoaded {
+ val range = Timeslot(fromMillis,toMillis)
+ /* ``to'' method: return the subset of all policies.from <= range.to */
+ _policies.to(policyAt(range.to.getTime)).foldLeft (EmptyPolicyByTimeslotMap) { (map,p) =>
+ if(p.validityTimespan.toTimeslot.to.getTime >= range.from.getTime)
+ map + ((p.validityTimespan.toTimeslot,p))
+ else
+ map
+ }
}
- }
/**
* @param atMillis
* @return
*/
- def loadValidPolicyAt(atMillis: Long): Option[Policy] = {
- ensureLoaded()
-
+ def loadValidPolicyAt(atMillis: Long): Option[Policy] =
+ ensureLoaded {
// Take the subset of all ordered policies up to the one with less than or equal start time
// and then return the last item. This should be the policy right before the given time.
// TODO: optimize the creation of the fake StdPolicy
- _policies.to(policyAt(atMillis)).lastOption
- }
+ _policies.to(policyAt(atMillis)).lastOption
+ }
/**