From 2e4689c1e293be558878ac3b81f94d550e9598aa Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Thu, 12 Jul 2012 14:26:05 +0300 Subject: [PATCH] count minutes with direction --- timespans/calldesc.go | 1 + timespans/userbalance.go | 8 ++++---- timespans/userbalance_test.go | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/timespans/calldesc.go b/timespans/calldesc.go index b52d5f5e8..5c4b3838b 100644 --- a/timespans/calldesc.go +++ b/timespans/calldesc.go @@ -376,6 +376,7 @@ The amount filed has to be filled in call descriptor. func (cd *CallDescriptor) AddRecievedCallSeconds() (err error) { if userBalance, err := cd.getUserBalance(); err == nil && userBalance != nil { a := &Action{ + Direction: INBOUND, MinuteBucket: &MinuteBucket{Seconds: cd.Amount, DestinationId: cd.Destination}, } userBalance.countUnits(a) diff --git a/timespans/userbalance.go b/timespans/userbalance.go index 37b25bdcb..c3fb4b997 100644 --- a/timespans/userbalance.go +++ b/timespans/userbalance.go @@ -127,7 +127,7 @@ debited and an error will be returned. */ func (ub *UserBalance) debitMinutesBalance(amount float64, prefix string, count bool) error { if count && amount > 0 { - ub.countUnits(&Action{BalanceId: MINUTES, MinuteBucket: &MinuteBucket{Seconds: amount, DestinationId: prefix}}) + ub.countUnits(&Action{BalanceId: MINUTES, Direction: OUTBOUND, MinuteBucket: &MinuteBucket{Seconds: amount, DestinationId: prefix}}) } avaliableNbSeconds, _, bucketList := ub.getSecondsForPrefix(prefix) if avaliableNbSeconds < amount { @@ -174,7 +174,7 @@ Debits some amount of user's specified balance. Returns the remaining credit in */ func (ub *UserBalance) debitBalance(balanceId string, amount float64, count bool) float64 { if count && amount > 0 { - ub.countUnits(&Action{BalanceId: balanceId, Units: amount}) + ub.countUnits(&Action{BalanceId: balanceId, Direction: OUTBOUND, Units: amount}) } ub.BalanceMap[balanceId+OUTBOUND] -= amount return ub.BalanceMap[balanceId+OUTBOUND] @@ -219,7 +219,7 @@ func (ub *UserBalance) resetActionTriggers() { // Returns the unit counter that matches the specified action type func (ub *UserBalance) getUnitCounter(a *Action) *UnitsCounter { for _, uc := range ub.UnitCounters { - if uc.BalanceId == a.BalanceId { + if uc.BalanceId == a.BalanceId && uc.Direction == a.Direction { return uc } } @@ -232,7 +232,7 @@ func (ub *UserBalance) countUnits(a *Action) { unitsCounter := ub.getUnitCounter(a) // if not found add the counter if unitsCounter == nil { - unitsCounter = &UnitsCounter{BalanceId: a.BalanceId} + unitsCounter = &UnitsCounter{BalanceId: a.BalanceId, Direction: a.Direction} ub.UnitCounters = append(ub.UnitCounters, unitsCounter) } if a.BalanceId == MINUTES && a.MinuteBucket != nil { diff --git a/timespans/userbalance_test.go b/timespans/userbalance_test.go index 6c485cc41..3d1cffc99 100644 --- a/timespans/userbalance_test.go +++ b/timespans/userbalance_test.go @@ -395,7 +395,7 @@ func TestUserBalanceExecuteTriggeredActionsOrder(t *testing.T) { ub := &UserBalance{ Id: "TEST_UB_OREDER", BalanceMap: map[string]float64{CREDIT + OUTBOUND: 100}, - UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceId: CREDIT, Units: 1}}, + UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceId: CREDIT, Direction: OUTBOUND, Units: 1}}, ActionTriggers: ActionTriggerPriotityList{&ActionTrigger{BalanceId: CREDIT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS_ORDER"}}, } ub.countUnits(&Action{BalanceId: CREDIT, Direction: OUTBOUND, Units: 1})