/// <summary>
        /// Method to get overlimit details
        /// </summary>
        /// <param name="tillNumber">Till number</param>
        /// <param name="saleNumber">Sale number</param>
        /// <param name="error">Error message</param>
        /// <returns>Over limit response</returns>
        public OverLimitResponse GetOverLimitDetails(int tillNumber, int saleNumber, out ErrorMessage error)
        {
            error = new ErrorMessage();
            var result = new OverLimitResponse
            {
                GasReasons     = new List <TaxExemptReasonResponse>(),
                TobaccoReasons = new List <TaxExemptReasonResponse>(),
                PropaneReasons = new List <TaxExemptReasonResponse>()
            };

            if (!_policyManager.USE_OVERRIDE || _policyManager.TE_Type != "AITE")
            {
                error = new ErrorMessage
                {
                    MessageStyle = new MessageStyle
                    {
                        Message     = "Please select AITE Tax Exempt and enable Use override policy in BackOffice",
                        MessageType = 0
                    },
                    StatusCode = HttpStatusCode.BadRequest
                };
                return(result);
            }

            mPrivateGlobals.theSystem = CacheManager.GetTeSystemForTill(tillNumber, saleNumber);
            if (mPrivateGlobals.theSystem == null)
            {
                error = new ErrorMessage
                {
                    MessageStyle = new MessageStyle {
                        Message = "Request is Invalid", MessageType = 0
                    },
                    StatusCode = HttpStatusCode.BadRequest
                };
                return(null);
            }

            var oTeSale = CacheManager.GetTaxExemptSaleForTill(tillNumber, saleNumber);

            if (oTeSale == null)
            {
                error = new ErrorMessage
                {
                    MessageStyle = new MessageStyle {
                        Message = "Request is Invalid", MessageType = 0
                    },
                    StatusCode = HttpStatusCode.BadRequest
                };
                return(null);
            }

            _teSystemManager.GetAllReasons(ref mPrivateGlobals.theSystem);
            _teSystemManager.GetAllLimits(ref mPrivateGlobals.theSystem);
            TaxExemptReason ter;

            if (oTeSale.GasOverLimit)
            {
                if (mPrivateGlobals.theSystem.GasReasons.Count > 0)
                {
                    foreach (TaxExemptReason tempLoopVarTer in mPrivateGlobals.theSystem.GasReasons)
                    {
                        ter = tempLoopVarTer;
                        result.GasReasons.Add(
                            new TaxExemptReasonResponse
                        {
                            Reason          = ter.Code + "-" + ter.Description,
                            ExplanationCode = ter.ExplanationCode
                        });
                    }
                }
                result.IsGasReasons = true;
            }


            if (oTeSale.TobaccoOverLimit)
            {
                foreach (TaxExemptReason tempLoopVarTer in mPrivateGlobals.theSystem.TobaccoReasons)
                {
                    ter = tempLoopVarTer;
                    result.TobaccoReasons.Add(
                        new TaxExemptReasonResponse
                    {
                        Reason          = ter.Code + "-" + ter.Description,
                        ExplanationCode = ter.ExplanationCode
                    });
                }
                result.IsTobaccoReasons = true;
            }


            if (oTeSale.PropaneOverLimit)
            {
                foreach (TaxExemptReason tempLoopVarTer in mPrivateGlobals.theSystem.PropaneReasons)
                {
                    ter = tempLoopVarTer;
                    result.PropaneReasons.Add(
                        new TaxExemptReasonResponse
                    {
                        Reason          = ter.Code + "-" + ter.Description,
                        ExplanationCode = ter.ExplanationCode
                    });
                }
                result.IsPropaneReasons = true;
            }
            CacheManager.AddTaxExemptSaleForTill(tillNumber, saleNumber, oTeSale);
            CacheManager.AddTeSystemForTill(tillNumber, saleNumber, mPrivateGlobals.theSystem);
            result.TaxExemptSale = GetTaxExemptSaleModel(oTeSale);

            return(result);
        }