val newChargingReason = MonthlyBillChargingReason(chargingReason, billingMonthInfo)
workingUserState.chargingReason = newChargingReason
- val monthlyUserState0 = workingUserState.toUserState(Some(billingMonthInfo), None)
+ val monthlyUserState0 = workingUserState.toUserState(
+ true,
+ billingMonthInfo.year,
+ billingMonthInfo.month,
+ None
+ )
// We always save the state when it is a full month billing
val monthlyUserState1 = userStateRecorder.apply(monthlyUserState0)
import scala.collection.mutable
import gr.grnet.aquarium.policy.{ResourceType, UserAgreementModel}
-import gr.grnet.aquarium.computation.BillingMonthInfo
import gr.grnet.aquarium.event.model.resource.ResourceEventModel
import gr.grnet.aquarium.charging.wallet.WalletEntry
import gr.grnet.aquarium.charging.reason.{InitialUserStateSetup, ChargingReason}
import gr.grnet.aquarium.AquariumInternalError
+import gr.grnet.aquarium.computation.BillingMonthInfo
/**
*
userID: String,
occurredMillis: Long,
totalCredits: Double,
- theFullBillingMonth: Option[BillingMonthInfo],
+ isFullBillingMonth: Boolean,
+ billingYear: Int,
+ billingMonth: Int,
chargingReason: ChargingReason,
previousResourceEvents: List[ResourceEventModel],
implicitlyIssuedStartEvents: List[ResourceEventModel],
chargingReason: ChargingReason = InitialUserStateSetup(None)
): StdUserState = {
+ val bmi = BillingMonthInfo.fromMillis(occurredMillis)
+
StdUserState(
"",
None,
userID,
userCreationMillis,
totalCredits,
- None,
+ false,
+ bmi.year,
+ bmi.month,
chargingReason,
Nil,
Nil,
def totalCredits: Double
- def theFullBillingMonth: Option[BillingMonthInfo]
+ /**
+ * True iff this user state represents a full billing month.
+ */
+ def isFullBillingMonth: Boolean
+
+ def billingYear: Int
+
+ def billingMonth: Int
def chargingReason: ChargingReason
trait NamesT {
final val userID = "userID"
final val occurredMillis = "occurredMillis"
- final val theFullBillingMonth_year = "theFullBillingMonth.year"
- final val theFullBillingMonth_month = "theFullBillingMonth.month"
+ final val isFullBillingMonth = "isFullBillingMonth"
+ final val billingYear = "billingYear"
+ final val billingMonth = "billingMonth"
}
object Names extends NamesT
this.workingAgreementHistory.toAgreementHistory
}
- def toUserState(theFullBillingMonth: Option[BillingMonthInfo], idOpt: Option[String]) = {
+ def toUserState(
+ isFullBillingMonth: Boolean,
+ billingYear: Int,
+ billingMonth: Int,
+ idOpt: Option[String]
+ ) = {
new StdUserState(
idOpt.getOrElse(""),
this.parentUserStateIDInStore,
this.userID,
this.occurredMillis,
this.totalCredits,
- theFullBillingMonth,
+ isFullBillingMonth,
+ billingYear,
+ billingMonth,
this.chargingReason,
immutablePreviousResourceEvents,
immutableImplicitlyIssuedStartEvents,
model.userID,
model.occurredMillis,
model.totalCredits,
- model.theFullBillingMonth,
+ model.isFullBillingMonth,
+ model.billingYear,
+ model.billingMonth,
model.chargingReason,
model.previousResourceEvents,
model.implicitlyIssuedStartEvents,
}
def findLatestUserStateForFullMonthBilling(userID: String, bmi: BillingMonthInfo): Option[UserState] = {
- val goodOnes = _userStates.filter(_.theFullBillingMonth.isDefined).filter { userState ⇒
- userState.userID == userID && {
- userState.theFullBillingMonth.isDefined && {
- userState.theFullBillingMonth.get == bmi
- }
- }
+ val goodOnes = _userStates.filter { userState ⇒
+ userState.userID == userID &&
+ userState.isFullBillingMonth &&
+ userState.billingYear == bmi.year &&
+ userState.billingMonth == bmi.month
}
goodOnes.sortWith {
def findLatestUserStateForFullMonthBilling(userID: String, bmi: BillingMonthInfo): Option[UserState] = {
val query = new BasicDBObjectBuilder().
add(UserStateModel.Names.userID, userID).
-// add(UserStateModel.Names.isFullBillingMonthState, true). FIXME
- add(UserStateModel.Names.theFullBillingMonth_year, bmi.year).
- add(UserStateModel.Names.theFullBillingMonth_month, bmi.month).
+ add(UserStateModel.Names.isFullBillingMonth, true).
+ add(UserStateModel.Names.billingYear, bmi.year).
+ add(UserStateModel.Names.billingMonth, bmi.month).
get()
// Descending order, so that the latest comes first
package gr.grnet.aquarium.store.mongodb
import gr.grnet.aquarium.charging.state.{AgreementHistory, WorkingUserState, UserStateModel}
-import gr.grnet.aquarium.computation.BillingMonthInfo
import gr.grnet.aquarium.charging.reason.ChargingReason
import gr.grnet.aquarium.event.model.resource.ResourceEventModel
import gr.grnet.aquarium.charging.wallet.WalletEntry
userID: String,
occurredMillis: Long,
totalCredits: Double,
- theFullBillingMonth: Option[BillingMonthInfo],
+ isFullBillingMonth: Boolean,
+ billingYear: Int,
+ billingMonth: Int,
chargingReason: ChargingReason,
previousResourceEvents: List[ResourceEventModel],
implicitlyIssuedStartEvents: List[ResourceEventModel],
model.userID,
model.occurredMillis,
model.totalCredits,
- model.theFullBillingMonth,
+ model.isFullBillingMonth,
+ model.billingYear,
+ model.billingMonth,
model.chargingReason,
model.previousResourceEvents,
model.implicitlyIssuedStartEvents,