/// <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>
        /// return CalculateCartCommand obj
        /// </summary>
        /// <param name="cartExternalId"></param>
        /// <param name="cart"></param>
        /// <param name="objwsMenuItem"></param>
        /// <returns></returns>
        private CalculateCartCommand CalculateCart(string cartExternalId, CalculatedCart cart, wsMenuItem[] objwsMenuItem)
        {
            CalculateCartCommand calculateCartCommand = null;

            try
            {
                var calculateCart = SalesTransactionLines(cartExternalId, objwsMenuItem, cart);

                if (calculateCart != null)
                {
                    calculateCartCommand = new CalculateCartCommand
                    {
                        Cart            = calculateCart.Cart,
                        ReferenceNumber = calculateCart.Cart.Uid.ToString(),
                        Uid             = Guid.NewGuid()
                    };
                }

                return(calculateCartCommand);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "CalculateTransaction CalculateCart");
                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>
        /// Add GiftCarNumber in Cart
        /// </summary>
        /// <param name="transCode"></param>
        /// <param name="applyBalance"></param>
        /// <param name="giftCardNumber"></param>
        /// <param name="ticketId"></param>
        /// <returns></returns>
        public async Task <CalculatedCart> AddGiftCardPaymentTransactionAsync(string transCode = "", decimal applyBalance = 0, string giftCardNumber = "", string ticketId = "", IList <CartLine> lines = null)
        {
            CalculatedCart       calculatedCart = null;
            CalculateCartCommand request        = null;

            try
            {
                calculatedCart = await GetCartBySourceExternalIdAsync(ticketId.ToString()).ConfigureAwait(true);

                var payment = new CartPayment {
                    Amount = applyBalance, TransactionCode = transCode
                };
                if (calculatedCart != null && calculatedCart.Cart != null)
                {
                    if (calculatedCart.Cart.Payments != null && calculatedCart.Cart.Payments.Any())
                    {
                        calculatedCart.Cart.Payments.Add(payment);
                    }
                    else
                    {
                        calculatedCart.Cart.Payments = new List <CartPayment>();
                        calculatedCart.Cart.Payments.Add(payment);
                    }
                    request = new CalculateCartCommand()
                    {
                        Cart = calculatedCart.Cart, Uid = calculatedCart.Cart.Uid
                    };
                }
                else
                {
                    var cart = new Cart {
                        Lines = new List <CartLine>(), SourceExternalId = ticketId, Payments = new List <CartPayment>()
                    };
                    if (lines != null && lines.Any())
                    {
                        cart.Lines = lines;
                    }
                    cart.Payments.Add(payment);
                    request = new CalculateCartCommand()
                    {
                        Cart = cart
                    };
                }

                if (request != null)
                {
                    calculatedCart = CalculateCart(request);
                }
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "LoyaltyEngineServices AddGiftCarNumberInCart");
            }
            return(calculatedCart);
        }
Example #5
0
        /// <summary>
        /// Get bLoyal Customer and Assign to Dinerware Ticket
        /// </summary>
        /// <returns></returns>
        private async Task GetCustomerAndAssignToDinerwareAsync()
        {
            try
            {
                Customer       transactionCustomer = null;
                CalculatedCart calculatedCart      = null;

                calculatedCart = _isSourceExternalId ? await _services.GetCartBySourceExternalId(_cartId).ConfigureAwait(true) : await _services.GetCartAsync(new Guid(_cartId)).ConfigureAwait(true);

                if (calculatedCart != null && calculatedCart.Cart != null && calculatedCart.Cart.Customer != null && calculatedCart.Cart.Customer.Uid != Guid.Empty)
                {
                    transactionCustomer = calculatedCart.Cart.Customer;
                }
                else
                {
                    _logger.WriteLogInfo("**** Unable to find transaction Customer using FindCustomer Snippet **** cartUid = " + _cartId);
                }

                FindCustomerExtension.currentOpenTicketId = string.Empty;
                if (transactionCustomer != null)
                {
                    int dwCustomerId;
                    if (_openTicketId > 0)
                    {
                        dwCustomerId = _dinerwareHelper.UpdateTicketWithCustomer(_currentUserId, transactionCustomer, _cartId, _openTicketId);
                        calculatedCart.Cart.Customer.ExternalId = dwCustomerId.ToString();
                    }
                    else
                    {
                        //Add bloyal Customer  to Dinerware
                        var response = _dinerwareHelper.AddCustomerToDinerware(_currentUserId, transactionCustomer, _cartId);
                        _openTicketId = response != null ? response.TicketId : 0;
                        if (_openTicketId > 0 && calculatedCart != null && calculatedCart.Cart != null)
                        {
                            calculatedCart.Cart.SourceExternalId    = response.TicketId.ToString();
                            calculatedCart.Cart.Customer.ExternalId = response.CustomerId.ToString();
                        }

                        if (calculatedCart != null)
                        {
                            await _services.CalculateCartAsync(new CalculateCartCommand { Cart = calculatedCart.Cart }).ConfigureAwait(true);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "frmFindCustomer GetCustomerAndAssignToDinerware");
            }
        }
Example #6
0
 /// <summary>
 /// Close discount summary window
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void okBtn_Click(object sender, EventArgs e)
 {
     this.Hide();
     try
     {
         ShowAlerts();
     }
     catch (Exception ex)
     {
         _logger.WriteLogError(ex, "okBtn_Click");
     }
     _calculatedCartResponse = null;
     this.Close();
 }
        /// <summary>
        /// Load GiftCard
        /// </summary>
        /// <param name="currentTicketid"></param>
        /// <param name="number"></param>
        /// <param name="ticket"></param>
        /// <param name="loadMenuItem"></param>
        /// <param name="calculatedCart"></param>
        public frmLoadGiftCardBalance(int currentTicketid, string number = "", Dinerware.Ticket ticket = null, Dinerware.MenuItem loadMenuItem = null, CalculatedCart calculatedCart = null, string loadGiftItem = "")
        {
            InitializeComponent();
            _currentOpenTicketId            = currentTicketid;
            _cardNumber                     = number;
            lblEmptyCardNumberError.Visible = false;
            _ticket         = ticket;
            _loadMenuItem   = loadMenuItem;
            _calculatedCart = calculatedCart;
            _loadGiftItem   = loadGiftItem;

            productNameLbl.Text  = loadMenuItem.ItemName;
            productPriceLbl.Text = string.Format("${0}", Math.Round(loadMenuItem.Price, 2));
        }
        /// <summary>
        /// Credit Load GiftCard Item
        /// </summary>
        /// <param name="calculatedCart"></param>
        /// <param name="amount"></param>
        /// <param name="giftCardNumber"></param>
        /// <param name="ticketId"></param>
        /// <returns></returns>
        public bool CreditLoadGiftCardItem(CalculatedCart calculatedCart, decimal amount, string giftCardNumber, string ticketId, CartLine line)
        {
            bool result = false;

            try
            {
                _paymentEngine = new PaymentEngineConnector(_configurationHelper.LOGIN_DOMAIN, _configurationHelper.ACCESS_KEY, string.Empty, string.Empty, null);

                string transCode = _paymentEngine.CardRedeem(giftCardNumber, _configurationHelper.GIFTCARD_TENDER_CODE, ticketId, amount);

                result = !string.IsNullOrWhiteSpace(transCode);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "CalculateTransaction CreditLoadGiftCardItem");
            }
            return(result);
        }
Example #9
0
        /// <summary>
        /// Update Ticket Dictionary
        /// </summary>
        /// <param name="calculateCart"></param>
        private void UpdateTicketDictionary(CalculatedCart calculateCart)
        {
            try
            {
                if (TicketDictionary.Dictionary == null)
                {
                    TicketDictionary.Dictionary = new Dictionary <int, string>();
                }

                if (TicketDictionary.Dictionary.ContainsKey(_currentOpenTicketId))
                {
                    TicketDictionary.Dictionary[_currentOpenTicketId] = "CalculatedCurrent";
                }
                else
                {
                    TicketDictionary.Dictionary.Add(_currentOpenTicketId, "CalculatedCurrent");
                }


                if (calculateCart != null && calculateCart.Cart != null && calculateCart.Cart.Uid != Guid.Empty)
                {
                    if (TicketDictionary.CartDictionary == null)
                    {
                        TicketDictionary.CartDictionary = new Dictionary <int, Guid>();
                    }

                    if (TicketDictionary.CartDictionary.ContainsKey(_currentOpenTicketId))
                    {
                        TicketDictionary.CartDictionary[_currentOpenTicketId] = calculateCart.Cart.Uid;
                    }
                    else
                    {
                        TicketDictionary.CartDictionary.Add(_currentOpenTicketId, calculateCart.Cart.Uid);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "UpdateTicketDictionary");
            }
        }
 /// <summary>
 /// Update Cart
 /// </summary>
 /// <param name="loadGiftCardAmount"></param>
 /// <param name="paidAmount"></param>
 /// <param name="loadgiftCardLine"></param>
 /// <param name="calculatedCart"></param>
 /// <param name="transCode"></param>
 private void UpdateCart(decimal loadGiftCardAmount, CartLine loadgiftCardLine, CalculatedCart calculatedCart, string transCode)
 {
     try
     {
         loadgiftCardLine.GiftCardAmount = loadGiftCardAmount;
     }
     catch (Exception ex)
     {
         _logger.WriteLogError(ex, "CalculateTransaction UpdateCart");
     }
 }
        /// <summary>
        /// Create Sales Transaction Lines
        /// </summary>
        /// <param name="TransactionToken"></param>
        /// <param name="wsMenuItemList"></param>
        /// <returns></returns>
        private CalculatedCart SalesTransactionLines(string cartExternalId, wsMenuItem[] wsMenuItemList, CalculatedCart cart)
        {
            try
            {
                if (cart != null && wsMenuItemList != null && wsMenuItemList.Length > 0)
                {
                    var cartLines = new List <CartLine>();

                    foreach (var menuItem in wsMenuItemList)
                    {
                        decimal dwItemDiscount = GetDinerwareItemDiscount(menuItem);
                        var     line           = new CartLine
                        {
                            Price = menuItem.GROSS_PRICE,
                            ExternallyAppliedDiscount = dwItemDiscount > 0 ? true : false,
                            Discount          = dwItemDiscount,
                            NetPrice          = menuItem.NET_PRICE,
                            ProductCode       = menuItem.DESCRIPTION,
                            ProductName       = menuItem.NAME,
                            Quantity          = menuItem.Quantity,
                            PriceSource       = PriceSource.Base,
                            ProductExternalId = menuItem.ID,
                            ExternalId        = menuItem.TICKETITEM_ID.ToString()
                        };
                        cartLines.Add(line);
                    }
                    cart.Cart.Lines = cartLines;

                    decimal dwTicketDiscount = GetDinerwareTicketDiscount(wsMenuItemList);
                    if (dwTicketDiscount != 0)
                    {
                        cart.Cart.ExternallyAppliedDiscount = true;
                        cart.Cart.Discount = dwTicketDiscount;
                    }
                }
                return(cart);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "CalculateTransaction SalesTransactionLines");
                throw ex;
            }
        }
        /// <summary>
        /// Update CalculateCart
        /// </summary>
        /// <param name="applyGiftCardSummary"></param>
        /// <param name="calculatedCart"></param>
        /// <returns></returns>
        private List <ApplyGiftCardSummary> UpdateCalculateCart(List <ApplyGiftCardSummary> applyGiftCardSummary, CalculatedCart calculatedCart)
        {
            try
            {
                var request = new CalculateCartCommand()
                {
                    Cart = calculatedCart.Cart,
                    Uid  = calculatedCart.Cart.Uid
                };

                _services.CalculateCart(request);

                return(applyGiftCardSummary);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "CalculateTransaction UpdateCalculateCart");
                return(null);
            }
        }
Example #13
0
        /// <summary>
        /// Create Sales Transaction Lines
        /// </summary>
        /// <param name="TransactionToken"></param>
        /// <param name="wsMenuItemList"></param>
        /// <returns></returns>
        private CalculatedCart SalesTransactionLines(TicketList ticketContent)
        {
            try
            {
                var cart = new CalculatedCart {
                    Cart = new Cart {
                        Lines = new List <CartLine>()
                    }
                };
                if (ticketContent != null && ticketContent.Tickets != null && ticketContent.Tickets.Any() && ticketContent.Tickets[0].Items != null && ticketContent.Tickets[0].Items.Any())
                {
                    var     wsMenuItemList     = ticketContent.Tickets[0].Items;
                    decimal orderTotelDiscount = 0;
                    foreach (var menuItem in wsMenuItemList)
                    {
                        decimal lineDiscount        = menuItem.ItemDiscountTotalManual / menuItem.Quantity;
                        decimal ticketorderDiscount = menuItem.ManualDiscountTotal > menuItem.ItemDiscountTotalManual ? (menuItem.ManualDiscountTotal / menuItem.Quantity) - lineDiscount : 0;
                        orderTotelDiscount += ticketorderDiscount;
                        var line = new CartLine
                        {
                            Price             = menuItem.GrossPrice / menuItem.Quantity,
                            Discount          = lineDiscount,
                            OrderDiscount     = ticketorderDiscount,
                            NetPrice          = menuItem.Price != 0 ? menuItem.Price / menuItem.Quantity : 0,
                            ProductCode       = menuItem.ID,
                            ProductName       = menuItem.ItemName,
                            Quantity          = menuItem.Quantity,
                            PriceSource       = PriceSource.Base,
                            ProductExternalId = menuItem.ID,
                            ExternalId        = menuItem.TIID
                        };
                        cart.Cart.Lines.Add(line);
                        if (lineDiscount > 0)
                        {
                            line.ExternallyAppliedDiscount = true;
                        }
                    }
                    if (orderTotelDiscount > 0)
                    {
                        cart.Cart.ExternallyAppliedDiscount = true;
                        cart.Cart.Discount = orderTotelDiscount;
                    }

                    if (ticketContent.Tickets[0].Customer != null)
                    {
                        cart.Cart.Customer = new Customer
                        {
                            ExternalId   = ticketContent.Tickets[0].Customer.ID,
                            FirstName    = ticketContent.Tickets[0].Customer.FName,
                            LastName     = ticketContent.Tickets[0].Customer.LName,
                            EmailAddress = ticketContent.Tickets[0].Customer.Email
                        };
                    }
                }
                return(cart);
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "SalesTransactionLines");
                return(null);
            }
        }
Example #14
0
        /// <summary>
        /// Apply Discount to Ticket
        /// </summary>
        /// <param name="ticketContents"></param>
        /// <param name="calculateTransaction"></param>
        private void ApplybLoyalDiscount(TicketList ticketContents, CalculatedCart calculateTransaction)
        {
            try
            {
                //Apply Discount to Ticket
                if (calculateTransaction.Cart != null && calculateTransaction.Cart.Lines != null && calculateTransaction.Cart.Lines.Any() &&
                    ticketContents != null && ticketContents.Tickets != null && ticketContents.Tickets[0].Items != null && ticketContents.Tickets[0].Items.Any())
                {
                    var itemList = ticketContents.Tickets[0].Items.ToList();
                    foreach (var line in calculateTransaction.Cart.Lines)
                    {
                        var ticketItem = itemList.Find(t => t.ID.Equals(line.ProductCode, StringComparison.CurrentCultureIgnoreCase) && t.TIID.Equals(line.ExternalId));
                        if (ticketItem != null)
                        {
                            int ticketItemId = 0;
                            int.TryParse(ticketItem.TIID, out ticketItemId);
                            if (line.Discount > 0 && !line.ExternallyAppliedDiscount)
                            {
                                if (ticketItem.Discounts != null)
                                {
                                    foreach (var exDis in ticketItem.Discounts)
                                    {
                                        int instanceId = 0;
                                        int.TryParse(exDis.InstanceID, out instanceId);
                                        _dinerwareProvider.RemoveDiscountFromItem(_currentUserId, _currentOpenTicketId, ticketItemId, instanceId);
                                    }
                                }
                                _dinerwareProvider.AddDiscountToItem(_currentUserId, _currentOpenTicketId, ticketItemId, DiscountSets.ItemLevelDiscountId, line.Discount * line.Quantity);
                            }
                            if (!string.IsNullOrWhiteSpace(line.SalePriceReasonCode) && (line.Price - line.SalePrice) > 0)
                            {
                                int discountId = 24;
                                _dinerwareProvider.AddDiscountToItem(_currentUserId, _currentOpenTicketId, ticketItemId, discountId, line.Price - line.SalePrice);
                            }
                            itemList.Remove(ticketItem);
                        }
                        else
                        {
                            var fbItem = ticketContents.Tickets[0].Items.ToList().Find(t => t.ID.Equals(line.ProductCode, StringComparison.CurrentCultureIgnoreCase) && t.TIID.Equals(line.ParentExternalId));
                            if (fbItem != null && line.Discount > 0 && !line.ExternallyAppliedDiscount)
                            {
                                int ticketItemId = 0;
                                int.TryParse(fbItem.TIID, out ticketItemId);
                                _dinerwareProvider.AddDiscountToItem(_currentUserId, _currentOpenTicketId, ticketItemId, DiscountSets.ItemLevelDiscountId, line.Discount * line.Quantity);
                            }
                        }
                    }

                    if (calculateTransaction.Cart.Discount > 0 && !calculateTransaction.Cart.ExternallyAppliedDiscount)
                    {
                        var ticket = ticketContents.Tickets[0];
                        if (ticket.Discounts != null && ticket.Discounts.Any())
                        {
                            foreach (var ticketDiscount in ticket.Discounts)
                            {
                                int instanceId = 0;
                                int.TryParse(ticketDiscount.InstanceID, out instanceId);
                                _dinerwareProvider.RemoveDiscountFromTicket(_currentUserId, _currentOpenTicketId, instanceId);
                            }
                        }
                        _dinerwareProvider.AddDiscountToTicket(_currentUserId, _currentOpenTicketId, DiscountSets.OrderLevelDiscountId, calculateTransaction.Cart.Discount);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "ApplybLoyalDiscount");
            }
        }
Example #15
0
        /// <summary>
        /// Calculate Ticket Discount
        /// </summary>
        /// <returns></returns>
        private void CalculateTicketDiscount()
        {
            try
            {
                bLoyalCalculateTicketExtension.currentOpenTicketId = string.Empty;
                TicketList ticketContents = null;

                RemovebLoyalDiscount();                                                            // Remove old apply bLoyal Discounts

                ticketContents = _dinerwareProvider.GetTicketContents(_currentOpenTicketId, true); // After removed discount - we need to get updated ticket information
                var calculateCartCommand = GetCalculateCart(_cartExternalId, ticketContents);

                var calculateCart = calculateCartCommand != null && calculateCartCommand.Cart != null &&
                                    calculateCartCommand.Cart.Lines != null && calculateCartCommand.Cart.Lines.Any() ?
                                    _services.CalculateCart(calculateCartCommand) : null;

                _calculatedCartResponse = calculateCart;

                if (calculateCart != null && calculateCart.LoyaltySummary != null)
                {
                    if (calculateCart.LoyaltySummary.AppliedCoupons != null)
                    {
                        foreach (var coupon in calculateCart.LoyaltySummary.AppliedCoupons)
                        {
                            _appliedCouponslistBox.Items.Add(coupon.Name + "(" + coupon.Code + ")");
                        }
                    }
                    if (calculateCart.LoyaltySummary.AppliedDiscounts != null)
                    {
                        foreach (var discount in calculateCart.LoyaltySummary.AppliedDiscounts)
                        {
                            _appliedDiscountslistBox.Items.Add(discount.Name);
                        }
                    }
                    if (calculateCart.LoyaltySummary.AppliedPrices != null)
                    {
                        foreach (var prices in calculateCart.LoyaltySummary.AppliedPrices)
                        {
                            _appliedPricesBox.Items.Add(prices.Name);
                        }
                    }

                    ApplybLoyalDiscount(ticketContents, calculateCart);

                    _lblLoyalCAVal.Text           = Math.Round(calculateCart.LoyaltySummary.LoyaltyCurrencyAccrued, 2).ToString();
                    _lblLoyaltyPAVal.Text         = calculateCart.LoyaltySummary.LoyaltyPointsAccrued.ToString();
                    _lblLoyaltyPointsUsedVal.Text = calculateCart.LoyaltySummary.LoyaltyPointsUsed.ToString();

                    UpdateTicketDictionary(calculateCart);
                    _lblApplyDiscount.Text = Messages.DISCOUNT_APPLIED_MSG;
                }
                else
                {
                    MessageBox.Show("Unable to apply bLoyal Discounts");
                }

                _okBtn.Visible  = true;
                _cartExternalId = string.Empty;

                if (_configHelper != null && !_configHelper.IS_DISCOUNT_SUMMARY)
                {
                    this.Hide();
                    ShowAlerts();
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                _logger.WriteLogError(ex, "CalculateSalesTransaction");
            }
        }