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