Exemplo n.º 1
0
        //--------------- Static factories -------------------------------------------------------------
        public static IRetailAccount Get(CustomerAcct pCustomerAcct, Cdr pCdr, IConfiguration pConfiguration, ILogger pLogger)
        {
            if (pCustomerAcct == null)
            {
                TimokLogger.Instance.LogRbr(LogSeverity.Error, "RetailAccount.Get", "CustomerAcct NOT Found");
                return(null);
            }
            if (!pCustomerAcct.IsRetail)
            {
                TimokLogger.Instance.LogRbr(LogSeverity.Status, "RetailAccount.Get", string.Format("CustomerAcct NOT Retail: {0}", pCustomerAcct.Id));
                return(null);
            }

            IRetailAccount _retailAcct = null;

            try {
                if (pCustomerAcct.RetailType == RetailType.PhoneCard)
                {
                    _retailAcct = getPhoneCardBySerialNumber(pCustomerAcct.ServiceId, pCdr.SerialNumber, pConfiguration, pLogger);
                }
                else if (pCustomerAcct.RetailType == RetailType.Residential)
                {
                    _retailAcct = getResidential(pCustomerAcct.ServiceId, pCdr.ANI);
                }
                else
                {
                    TimokLogger.Instance.LogRbr(LogSeverity.Critical, "RetailAccount.Get", string.Format("Unknown Retailtype: CustomerAcct: {0} SerialNumber: {1}", pCustomerAcct.Id, pCdr.SerialNumber));
                }

                if (_retailAcct == null)
                {
                    TimokLogger.Instance.LogRbr(LogSeverity.Error, "RetailAccount.Get", string.Format("RetailAcct NOT FOUND: CustomerAcct: {0} SerialNumber: {1}", pCustomerAcct.Id, pCdr.SerialNumber));
                    return(null);
                }
            }
            catch (Exception _ex) {
                TimokLogger.Instance.LogRbr(LogSeverity.Critical, "RetailAccount.Get", string.Format("Exception:\r\n{0}", _ex));
                return(null);
            }
            return(_retailAcct);
        }
Exemplo n.º 2
0
        //--------------------- End-Static -------------------------------------------------------

        public void Authorize(ISession pSession, IRetailAccount pRetailAcct, CustomerRoute pCustomerRoute, out int pTimeLimit, out int pPromptTimeLimit)
        {
            pTimeLimit = 0;

            //--Check for Domestic Bonus minutes:
            if (pRetailAcct.WithBonusMinutes && pCustomerRoute.WithBonusMinutes && pRetailAcct.CurrentBonusBalance > 0)
            {
                pTimeLimit = pRetailAcct.CurrentBonusBalance * 60;
            }

            //-- Check money based balance and add to the TimeLimit if balance > 0:
            if (pRetailAcct.CurrentBalance > decimal.Zero)
            {
                var _accessNumberSurcharge = AccessNumberSurchargeInfo;
                var _payphoneSurcharge     = SurchargeInfo.Empty;
                if (pSession.InfoDigits > 0)
                {
                    _payphoneSurcharge = PayphoneSurchargeInfo;
                }

                pTimeLimit += pCustomerRoute.GetTimeLimit(pRetailAcct.CurrentBalance, _accessNumberSurcharge, _payphoneSurcharge);
            }

            if (pTimeLimit < 0)
            {
                pTimeLimit = 0;
                TimokLogger.Instance.LogRbr(LogSeverity.Critical, "BillingService.Authorize:", string.Format("TimeLimit less then Zero! Serial={0}, CustomerId={1} TimeLimit={2}", pRetailAcct.SerialNumber, pRetailAcct.CustomerAcctId, pTimeLimit));
            }

            //-- propmpt multiplier
            if (pCustomerRoute.Multiplier > 0)
            {
                pPromptTimeLimit = (pTimeLimit * pCustomerRoute.Multiplier) / 100;
            }
            else
            {
                pPromptTimeLimit = pTimeLimit;
            }
        }