root / src / main / scala / gr / grnet / aquarium / events / NewWalletEntry.scala @ 049fa5bb
History | View | Annotate | Download (4.4 kB)
1 |
/* |
---|---|
2 |
* Copyright 2011-2012 GRNET S.A. All rights reserved. |
3 |
* |
4 |
* Redistribution and use in source and binary forms, with or |
5 |
* without modification, are permitted provided that the following |
6 |
* conditions are met: |
7 |
* |
8 |
* 1. Redistributions of source code must retain the above |
9 |
* copyright notice, this list of conditions and the following |
10 |
* disclaimer. |
11 |
* |
12 |
* 2. Redistributions in binary form must reproduce the above |
13 |
* copyright notice, this list of conditions and the following |
14 |
* disclaimer in the documentation and/or other materials |
15 |
* provided with the distribution. |
16 |
* |
17 |
* THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
18 |
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
19 |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
20 |
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
21 |
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
22 |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
23 |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
24 |
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
25 |
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
26 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
27 |
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
28 |
* POSSIBILITY OF SUCH DAMAGE. |
29 |
* |
30 |
* The views and conclusions contained in the software and |
31 |
* documentation are those of the authors and should not be |
32 |
* interpreted as representing official policies, either expressed |
33 |
* or implied, of GRNET S.A. |
34 |
*/ |
35 |
|
36 |
package gr.grnet.aquarium |
37 |
package events |
38 |
|
39 |
import gr.grnet.aquarium.logic.accounting.Chargeslot |
40 |
import gr.grnet.aquarium.util.date.MutableDateCalc |
41 |
import gr.grnet.aquarium.logic.accounting.dsl.{Timeslot, DSLResource} |
42 |
import converter.{CompactJsonTextFormat, StdConverters} |
43 |
|
44 |
/** |
45 |
* The following equation must hold: `newTotalCredits = oldTotalCredits + entryCredits`. |
46 |
* |
47 |
* @author Christos KK Loverdos <loverdos@gmail.com> |
48 |
* |
49 |
* @param userId The user ID this wallet entry is related to. |
50 |
* @param entryCredits The credit amount generated for this wallet entry. |
51 |
* @param oldTotalCredits |
52 |
* @param newTotalCredits |
53 |
* @param whenComputedMillis When the computation took place |
54 |
* @param yearOfBillingMonth |
55 |
* @param billingMonth |
56 |
* @param resourceEvents |
57 |
* @param chargeslots The details of the credit computation |
58 |
* @param resourceDef |
59 |
*/ |
60 |
case class NewWalletEntry(userId: String, |
61 |
entryCredits: Double, |
62 |
oldTotalCredits: Double, |
63 |
newTotalCredits: Double, |
64 |
whenComputedMillis: Long, |
65 |
referenceTimeslot: Timeslot, |
66 |
yearOfBillingMonth: Int, |
67 |
billingMonth: Int, |
68 |
resourceEvents: List[ResourceEvent], // current is at the head |
69 |
chargeslots: List[Chargeslot], |
70 |
resourceDef: DSLResource, |
71 |
isSynthetic: Boolean) { |
72 |
|
73 |
def currentResourceEvent = resourceEvents.head |
74 |
def resource = currentResourceEvent.resource |
75 |
def instanceId = currentResourceEvent.instanceID |
76 |
def chargslotCount = chargeslots.length |
77 |
def isOutOfSync = currentResourceEvent.isOutOfSyncForBillingMonth(yearOfBillingMonth, billingMonth) |
78 |
|
79 |
def toDebugString = "%s%s(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)".format( |
80 |
if(isSynthetic) "*" else "", |
81 |
gr.grnet.aquarium.util.shortClassNameOf(this), |
82 |
userId, |
83 |
referenceTimeslot, |
84 |
entryCredits, |
85 |
oldTotalCredits, |
86 |
newTotalCredits, |
87 |
new MutableDateCalc(whenComputedMillis).toYYYYMMDDHHMMSSSSS, |
88 |
yearOfBillingMonth, |
89 |
billingMonth, |
90 |
resourceEvents, |
91 |
chargeslots, |
92 |
resourceDef |
93 |
) |
94 |
} |
95 |
|
96 |
object NewWalletEntry { |
97 |
def fromJson(json: String): NewWalletEntry = { |
98 |
StdConverters.StdConverters.convertEx[NewWalletEntry](CompactJsonTextFormat(json)) |
99 |
} |
100 |
|
101 |
object JsonNames { |
102 |
final val _id = "_id" |
103 |
final val id = "id" |
104 |
final val entryCredits = "entryCredits" |
105 |
final val oldTotalCredits = "oldTotalCredits" |
106 |
final val newTotalCredits = "newTotalCredits" |
107 |
final val whenComputedMillis = "whenComputedMillis" |
108 |
final val yearOfBillingMonth = "yearOfBillingMonth" |
109 |
final val billingMonth = "billingMonth" |
110 |
final val currentResourceEvent = "currentResourceEvent" |
111 |
final val previousResourceEvent = "previousResourceEvent" |
112 |
final val chargeslots = "chargeslots" |
113 |
final val resourceDef = "resourceDef" |
114 |
} |
115 |
} |