public bool CanVoidSelectedItems(IEnumerable <TicketItem> items) { if (!CanRemoveSelectedItems(items)) { return(false); } foreach (var item in items) { if (!TicketItems.Contains(item)) { return(false); } if (item.Voided) { return(false); } if (item.Gifted) { return(false); } if (!item.Locked) { return(false); } } return(true); }
private async void Cashier_PropertyChanged(object sender, PropertyChangedEventArgs e) { var сashier = sender as Сashier; if (сashier != null) { if (e.PropertyName == "CurrentTicket") { if (сashier.CurrentTicket != null) //добавить элемент к списку { TicketItems.Add(new TicketItem { CashierName = "Касса " + сashier.CurrentTicket.Сashbox, TicketName = $"Талон {сashier.CurrentTicket.Prefix}{сashier.CurrentTicket.NumberElement.ToString("000")}" }); var task = _model.LogTicket?.Add(сashier.CurrentTicket.ToString()); if (task != null) { await task; } } else //удалить элемент из списка { var removeItem = TicketItems.FirstOrDefault(elem => elem.CashierName.Contains(сashier.Id.ToString())); TicketItems.Remove(removeItem); } } } }
private decimal CalculateDiscounts(IEnumerable <Discount> discounts, decimal sum) { decimal totalDiscount = 0; foreach (var discount in discounts) { if (discount.DiscountType == (int)DiscountType.Percent) { if (discount.TicketItemId == 0) { discount.DiscountAmount = discount.Amount > 0 ? (sum * discount.Amount) / 100 : 0; } else { var d = discount; discount.DiscountAmount = discount.Amount > 0 ? (TicketItems.Single(x => x.Id == d.TicketItemId).GetTotal() * discount.Amount) / 100 : 0; } } else { discount.DiscountAmount = discount.Amount; } discount.DiscountAmount = Decimal.Round(discount.DiscountAmount, LocalSettings.Decimals); totalDiscount += discount.DiscountAmount; } return(decimal.Round(totalDiscount, LocalSettings.Decimals)); }
public void RemoveTicketItem(TicketItem ti) { TicketItems.Remove(ti); if (ti.Id > 0) { _removedTicketItems.Add(ti); } }
private decimal CalculateTax(decimal plainSum, decimal discount) { var result = TicketItems.Where(x => !x.VatIncluded && !x.Gifted && !x.Voided).Sum(x => (x.VatAmount + x.Properties.Sum(y => y.VatAmount)) * x.Quantity); if (discount > 0) { result -= (result * discount) / plainSum; } return(result); }
public TicketItem AddTicketItem(int userId, int departmentId, MenuItem menuItem, string portionName, string priceTag, string defaultProperties) { Locked = false; var tif = new TicketItem { DepartmentId = departmentId }; tif.UpdateMenuItem(userId, menuItem, portionName, priceTag, 1, defaultProperties); TicketItems.Add(tif); return(tif); }
public void LockTicket() { foreach (var item in TicketItems.Where(x => !x.Locked)) { item.Locked = true; } if (_shouldLock) { Locked = true; } _shouldLock = false; }
public void MergeLinesAndUpdateOrderNumbers(int orderNumber) { LastOrderDate = DateTime.Now; IList <TicketItem> newLines = TicketItems.Where(x => !x.Locked && x.Id == 0).ToList(); //sadece quantity = 1 olan satırlar birleştirilecek. var mergedLines = newLines.Where(x => x.Quantity != 1).ToList(); var ids = mergedLines.Select(x => x.MenuItemId).Distinct().ToArray(); mergedLines.AddRange(newLines.Where(x => ids.Contains(x.MenuItemId) && x.Quantity == 1)); foreach (var ticketItem in newLines.Where(x => x.Quantity == 1 && !ids.Contains(x.MenuItemId))) { var ti = ticketItem; if (ticketItem.Properties.Count > 0) { mergedLines.Add(ticketItem); continue; } var item = mergedLines.SingleOrDefault( x => x.Properties.Count == 0 && x.MenuItemId == ti.MenuItemId && x.PortionName == ti.PortionName && x.Gifted == ti.Gifted && x.Price == ti.Price && x.Tag == ti.Tag); if (item == null) { mergedLines.Add(ticketItem); } else { item.Quantity += ticketItem.Quantity; } } foreach (var ticketItem in newLines.Where(ticketItem => !mergedLines.Contains(ticketItem))) { RemoveTicketItem(ticketItem); } foreach (var item in TicketItems.Where(x => !x.Locked).Where(item => item.OrderNumber == 0)) { item.OrderNumber = orderNumber; } }
public bool CanCancelSelectedItems(IEnumerable <TicketItem> items) { if (items.Count() == 0) { return(false); } foreach (var item in items) { if (!TicketItems.Contains(item)) { return(false); } if (item.Locked && !item.Gifted) { return(false); } } return(true); }
public IEnumerable <TicketItem> ExtractSelectedTicketItems(IEnumerable <TicketItem> selectedItems) { var newItems = new List <TicketItem>(); foreach (var selectedTicketItem in selectedItems) { Debug.Assert(selectedTicketItem.SelectedQuantity > 0); Debug.Assert(TicketItems.Contains(selectedTicketItem)); if (selectedTicketItem.SelectedQuantity >= selectedTicketItem.Quantity) { continue; } var newItem = CloneItem(selectedTicketItem); newItem.Quantity = selectedTicketItem.SelectedQuantity; selectedTicketItem.Quantity -= selectedTicketItem.SelectedQuantity; newItems.Add(newItem); } return(newItems); }
public IEnumerable <TicketItem> GetUnlockedLines() { return(TicketItems.Where(x => !x.Locked).OrderBy(x => x.CreatedDateTime).ToList()); }
public decimal GetTotalGiftAmount() { return(TicketItems.Where(x => x.Gifted && !x.Voided).Sum(item => item.GetItemValue())); }
public decimal GetPlainSum() { return(TicketItems.Sum(item => item.GetTotal())); }
public int GetItemCount() { return(TicketItems.Count()); }
public decimal Total() { return(Math.Round(TicketItems.Sum(x => x.TicketPrice * x.Quantity), 2)); }