/// <summary>
        /// CalculateAsync
        /// </summary>
        /// <param name="calculateCartCommand"></param>
        /// <returns></returns>
        public CalculatedCart CalculateCart(CalculateCartCommand calculateCartCommand)
        {
            try
            {
                CalculatedCart cart = null;

                cart = AsyncHelper.RunSync(() => _service.CartResource.CalculateAsync(calculateCartCommand));

                return(cart);
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "CalculateAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices CalculateCartAsync");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices CalculateCartAsync");
                return(null);
            }
        }
        /// <summary>
        /// Get a DeviceUsageId so we can use it to call a POS Snippet
        /// </summary>
        /// <returns></returns>
        public async Task <string> GetSessionAsync()
        {
            try
            {
                var session = await _service.SystemResource.GetSessionAsync().ConfigureAwait(true);

                return(session.Key);
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "GetSessionAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices GetSessionAsync");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices GetSessionAsync");
                return(null);
            }
        }
        /// <summary>
        /// ApproveCartAsync
        /// </summary>
        /// <param name="approveCommand"></param>
        /// <returns></returns>
        public async Task <CartApproval> ApproveCartAsync(ApproveCartCommand approveCommand)
        {
            try
            {
                CartApproval cartApproval = null;
                cartApproval = await _service.CartResource.ApproveAsync(approveCommand).ConfigureAwait(true);

                return(cartApproval);
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "ApproveAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices ApproveCartAsync");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices ApproveCartAsync");
                return(null);
            }
        }
        /// <summary>
        /// Get Cart By SourceExternalId
        /// </summary>
        /// <param name="cartSourceExternalId"></param>
        /// <returns></returns>
        public async Task <CalculatedCart> GetCartBySourceExternalIdAsync(string cartSourceExternalId)
        {
            try
            {
                CalculatedCart cart = null;

                cart = await _service.CartResource.GetBySourceExternalIdAsync(cartSourceExternalId).ConfigureAwait(true);

                return(cart);
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "GetBySourceExternalIdAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices GetCartBySourceExternalIdAsync");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices GetCartBySourceExternalIdAsync");
                return(null);
            }
        }
        /// <summary>
        /// Create a CartUid
        /// </summary>
        /// <returns></returns>
        public async Task <string> CreateCartForNewTicket()
        {
            try
            {
                var cart = new Cart {
                    Customer = new Customer(), Lines = new List <CartLine>()
                };
                var request = new CalculateCartCommand()
                {
                    Cart        = cart,
                    CouponCodes = new List <string>()
                };

                var calculatedCart = await CalculateCartAsync(request);

                if (calculatedCart != null && calculatedCart.Cart != null)
                {
                    return(calculatedCart.Cart.Uid.ToString());
                }
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "CalculateAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices CreateCartUid");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices CreateCartUid");
            }
            return(string.Empty);
        }
        /// <summary>
        /// Calculate Cart
        /// </summary>
        /// <param name="transCode"></param>
        /// <param name="applyBalance"></param>
        /// <param name="giftCardNumber"></param>
        /// <param name="ticketId"></param>
        /// <returns></returns>
        private CalculatedCart CalculateCart(string transCode, string applyBalance, string giftCardNumber, string ticketId)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(transCode))
                {
                    var cart = new Cart {
                        Customer = new Customer(), Lines = new List <CartLine>()
                    };
                    var request = new CalculateCartCommand()
                    {
                        Cart        = cart,
                        CouponCodes = new List <string>()
                    };

                    return(CalculateCart(request));
                }
            }
            catch (ApiException ex)
            {
                if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
                {
                    ServiceURLHelper.IsbLoyalServiceUrlDown = true;
                    apiException = new APIExceptions {
                        ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "CalculateAsync"
                    };
                }
                _logger.WriteLogError(ex, "LoyaltyEngineServices CalculateCart");
                return(null);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices CalculateCart");
                return(null);
            }
            return(null);
        }
 /// <summary>
 /// CommitAsync
 /// </summary>
 /// <param name="commitCommand"></param>
 /// <returns></returns>
 public async Task <CartCommitment> CommitAsync(CommitCartCommand commitCommand)
 {
     try
     {
         return(await _service.CartResource.CommitAsync(commitCommand));
     }
     catch (ApiException ex)
     {
         if (ex != null && !string.IsNullOrWhiteSpace(ex.Code) && ex.Code == "ServiceRedirect")
         {
             ServiceURLHelper.IsbLoyalServiceUrlDown = true;
             apiException = new APIExceptions {
                 ErrorCode = ex.Code, ErrorDescription = "A bLoyal error occurred. Please restart your Workstation and try again.", ErrorApi = "CommitAsync"
             };
         }
         _logger.WriteLogError(ex, "LoyaltyEngineServices CommitAsync");
         return(null);
     }
     catch (Exception ex)
     {
         _logger.WriteLogError(ex, "LoyaltyEngineServices CommitAsync");
         return(null);
     }
 }