mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
AccountS - initial accountProcessEvent
This commit is contained in:
@@ -20,10 +20,12 @@ package accounts
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
"github.com/ericlagergren/decimal"
|
||||
)
|
||||
|
||||
// NewAccountS instantiates the AccountS
|
||||
@@ -126,7 +128,38 @@ func (aS *AccountS) accountProcessEvent(acnt *utils.AccountProfile,
|
||||
aS.cfg.AccountSCfg().AttributeSConns, aS.cfg.AccountSCfg().RateSConns); err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println(blncOpers)
|
||||
usage := utils.NewDecimal(int64(72*time.Hour), 0)
|
||||
var usgEv time.Duration
|
||||
if usgEv, err = cgrEv.FieldAsDuration(utils.Usage); err != nil {
|
||||
if err != utils.ErrNotFound {
|
||||
return
|
||||
}
|
||||
// not found, try at opts level
|
||||
if usgEv, err = cgrEv.OptAsDuration(utils.MetaUsage); err != nil {
|
||||
if err != utils.ErrNotFound {
|
||||
return
|
||||
}
|
||||
err = nil
|
||||
} else { // found, overwrite usage
|
||||
usage.Big = decimal.New(int64(usgEv), 0)
|
||||
}
|
||||
} else {
|
||||
usage.Big = decimal.New(int64(usgEv), 0)
|
||||
}
|
||||
|
||||
for _, blncOper := range blncOpers {
|
||||
if usage.Big.Cmp(decimal.New(0, 0)) == 0 {
|
||||
return // no more debit
|
||||
}
|
||||
var dbted *utils.Decimal
|
||||
if dbted, _, err = blncOper.debitUsage(usage, cgrEv); err != nil {
|
||||
if err == utils.ErrFilterNotPassingNoCaps {
|
||||
err = nil
|
||||
continue
|
||||
}
|
||||
}
|
||||
usage.Big = utils.SubstractBig(usage.Big, dbted.Big)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,12 @@ func newAccountBalanceOperators(acnt *utils.AccountProfile,
|
||||
var cncrtBlncs []*concreteBalance
|
||||
blncOpers = make([]balanceOperator, len(blnCfgs))
|
||||
for i, blnCfg := range blnCfgs {
|
||||
if blnCfg.Type == utils.MetaConcrete {
|
||||
blncOpers[i] = newConcreteBalanceOperator(blnCfg,
|
||||
fltrS, connMgr, attrSConns, rateSConns)
|
||||
cncrtBlncs = append(cncrtBlncs, blncOpers[i].(*concreteBalance))
|
||||
continue
|
||||
}
|
||||
if blncOpers[i], err = newBalanceOperator(blnCfg, cncrtBlncs, fltrS, connMgr,
|
||||
attrSConns, rateSConns); err != nil {
|
||||
return
|
||||
|
||||
@@ -56,6 +56,15 @@ func (ev *CGREvent) FieldAsString(fldName string) (val string, err error) {
|
||||
return IfaceAsString(iface), nil
|
||||
}
|
||||
|
||||
// OptAsString returns an option as string
|
||||
func (ev *CGREvent) OptAsString(optName string) (val string, err error) {
|
||||
iface, has := ev.Opts[optName]
|
||||
if !has {
|
||||
return "", ErrNotFound
|
||||
}
|
||||
return IfaceAsString(iface), nil
|
||||
}
|
||||
|
||||
// FieldAsTime returns a field as Time instance
|
||||
func (ev *CGREvent) FieldAsTime(fldName string, timezone string) (t time.Time, err error) {
|
||||
iface, has := ev.Event[fldName]
|
||||
@@ -76,6 +85,16 @@ func (ev *CGREvent) FieldAsDuration(fldName string) (d time.Duration, err error)
|
||||
return IfaceAsDuration(iface)
|
||||
}
|
||||
|
||||
// OptAsDuration returns an option as Duration instance
|
||||
func (ev *CGREvent) OptAsDuration(optName string) (d time.Duration, err error) {
|
||||
iface, has := ev.Event[optName]
|
||||
if !has {
|
||||
err = ErrNotFound
|
||||
return
|
||||
}
|
||||
return IfaceAsDuration(iface)
|
||||
}
|
||||
|
||||
// FieldAsFloat64 returns a field as float64 instance
|
||||
func (ev *CGREvent) FieldAsFloat64(fldName string) (f float64, err error) {
|
||||
iface, has := ev.Event[fldName]
|
||||
|
||||
@@ -953,6 +953,7 @@ const (
|
||||
MetaCDR = "*cdr"
|
||||
MetaExporterIDs = "*exporterIDs"
|
||||
MetaAsync = "*async"
|
||||
MetaUsage = "*usage"
|
||||
)
|
||||
|
||||
// Migrator Action
|
||||
|
||||
Reference in New Issue
Block a user