mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
AccountS - No debits should return nil EventCharges
This commit is contained in:
@@ -159,7 +159,6 @@ func (aS *AccountS) accountsDebit(acnts []*utils.AccountProfileWithWeight,
|
||||
} else {
|
||||
usage = decimal.New(int64(usgEv), 0)
|
||||
}
|
||||
ec = utils.NewEventCharges()
|
||||
acntBkps := make([]utils.AccountBalancesBackup, len(acnts))
|
||||
for i, acnt := range acnts {
|
||||
if usage.Cmp(decimal.New(0, 0)) == 0 {
|
||||
@@ -174,6 +173,12 @@ func (aS *AccountS) accountsDebit(acnts []*utils.AccountProfileWithWeight,
|
||||
}
|
||||
return
|
||||
}
|
||||
if ecDbt == nil {
|
||||
continue
|
||||
}
|
||||
if ec == nil { // no debit performed yet
|
||||
ec = utils.NewEventCharges()
|
||||
}
|
||||
if store && acnt.AccountProfile.BalancesAltered(acntBkps[i]) {
|
||||
if err = aS.dm.SetAccountProfile(acnt.AccountProfile, false); err != nil {
|
||||
restoreAccounts(aS.dm, acnts, acntBkps)
|
||||
@@ -212,7 +217,7 @@ func (aS *AccountS) accountDebit(acnt *utils.AccountProfile, usage *decimal.Big,
|
||||
aS.cfg.AccountSCfg().AttributeSConns, aS.cfg.AccountSCfg().RateSConns); err != nil {
|
||||
return
|
||||
}
|
||||
ec = utils.NewEventCharges()
|
||||
|
||||
for _, blncOper := range blncOpers {
|
||||
debFunc := blncOper.debitAbstracts
|
||||
if concretes {
|
||||
@@ -230,6 +235,12 @@ func (aS *AccountS) accountDebit(acnt *utils.AccountProfile, usage *decimal.Big,
|
||||
}
|
||||
return
|
||||
}
|
||||
if ecDbt == nil {
|
||||
continue // no debit performed
|
||||
}
|
||||
if ec == nil { // first debit
|
||||
ec = utils.NewEventCharges()
|
||||
}
|
||||
var used *decimal.Big
|
||||
if concretes {
|
||||
used = ecDbt.Concretes.Big
|
||||
|
||||
@@ -429,11 +429,10 @@ func TestAccountsDebit(t *testing.T) {
|
||||
accntsPrf[0].Balances["AbstractBalance1"].Weights[0].FilterIDs = []string{}
|
||||
|
||||
cgrEvent.Event[utils.Usage] = "300ns"
|
||||
expectedUsage := &utils.Decimal{decimal.New(0, 0)}
|
||||
if evCh, err := accnts.accountsDebit(accntsPrf, cgrEvent, true, true); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expectedUsage, evCh.Concretes) {
|
||||
t.Errorf("Expected %+v, received %+v", utils.ToJSON(expectedUsage), utils.ToJSON(evCh.Concretes))
|
||||
} else if evCh != nil {
|
||||
t.Errorf("received %+v", utils.ToJSON(evCh))
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
@@ -136,7 +136,9 @@ func (cB *concreteBalance) debitConcretes(cUnits *decimal.Big,
|
||||
if hasUF {
|
||||
dbted = utils.DivideBig(dbted, uF.Factor.Big)
|
||||
}
|
||||
|
||||
if dbted.Cmp(decimal.New(0, 0)) == 0 {
|
||||
return // no event cost for 0 debit
|
||||
}
|
||||
ec = utils.NewEventCharges()
|
||||
ec.Concretes = &utils.Decimal{dbted}
|
||||
// UnitFactors
|
||||
@@ -153,5 +155,5 @@ func (cB *concreteBalance) debitConcretes(cUnits *decimal.Big,
|
||||
BalanceLimit: blncLmt,
|
||||
UnitFactorID: ufID,
|
||||
}
|
||||
return &utils.EventCharges{Concretes: &utils.Decimal{dbted}}, nil
|
||||
return
|
||||
}
|
||||
|
||||
@@ -195,14 +195,19 @@ func debitConcreteUnits(cUnits *decimal.Big,
|
||||
acntID string, cncrtBlncs []*concreteBalance,
|
||||
cgrEv *utils.CGREvent) (ec *utils.EventCharges, err error) {
|
||||
|
||||
ec = utils.NewEventCharges()
|
||||
clnedUnts := cloneUnitsFromConcretes(cncrtBlncs)
|
||||
for _, cB := range cncrtBlncs {
|
||||
var ecCncrt *utils.EventCharges
|
||||
if ecCncrt, err = cB.debitConcretes(cUnits, cgrEv); err != nil {
|
||||
if ecCncrt, err = cB.debitConcretes(new(decimal.Big).Copy(cUnits), cgrEv); err != nil {
|
||||
restoreUnitsFromClones(cncrtBlncs, clnedUnts)
|
||||
return nil, err
|
||||
}
|
||||
if ecCncrt == nil { // no debit performed
|
||||
continue
|
||||
}
|
||||
if ec == nil {
|
||||
ec = utils.NewEventCharges()
|
||||
}
|
||||
ec.Merge(ecCncrt)
|
||||
cUnits = utils.SubstractBig(cUnits, ecCncrt.Concretes.Big)
|
||||
if cUnits.Cmp(decimal.New(0, 0)) <= 0 {
|
||||
|
||||
Reference in New Issue
Block a user