//--------------- 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); }
//--------------------- 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; } }