/// <summary> /// Удаление обслуженной корзины из очереди /// </summary> /// <returns>Возвращает стоимость покупок</returns> public decimal Dequeue() { decimal sum = 0; //создаём переменную для хранения итоговой стимости if (Queue.Count == 0) //если очередь пустая возвращаем ноль { return(0); } var card = Queue.Dequeue(); // создаём переменную в которую получаем корзину из начала очереди if (card != null) { var check = new Check() // создаём чек по покупке { SellerId = Seller.SellerId, //вписываем ИД продавца Seller = Seller, // прикрепляем экземпляр продавца CustomerId = card.Customer.CustomerId, //вписываем ИД покупателя Customer = card.Customer, // прикоепляем экземпляр покупателя Created = DateTime.Now // текущее время }; if (!IsModel) //если это не модель, то чек вписываем в базу { db.Checks.Add(check); db.SaveChanges(); } else //иначе держим виртуально { check.CheckId = 0; } var sells = new List <Sell>(); // инициализируем список продаж foreach (Product product in card) // перебираем продукты в корзине { if (product.Count > 0) //если продукта на складе больше нуля { var sell = new Sell() //то создаём экземпляр продажи конкретной единицы товара { CheckId = check.CheckId, Check = check, ProductId = product.ProductId, Product = product }; sells.Add(sell); //добавляем экземпляр к списку if (!IsModel) //если не модель. то добавляем продажу в БД { db.Sells.Add(sell); } product.Count--; //убираем единицу товара со склада, добавляем стоимость к чеку sum += product.Price; } } check.Price = sum; //записываем в чек сумму if (!IsModel) //если не модель, записываем чек в бд { db.SaveChanges(); } CheckClosed?.Invoke(this, check); //если продажа закрыта, вызываем событие ServedCustomers++; } return(sum); //возвращаем сумму в вызов }
//выход из очереди //возвращаем сумму товара из функции очереди public decimal Dequeue() { decimal sum = 0; if (Queue.Count == 0) { return(0); } var card = Queue.Dequeue(); if (card != null) { //создание чека var check = new Check() { Seller = Seller, Customer = card.Customer, SellerId = Seller.SellerId, CustomerId = card.Customer.CustomerId, Created = DateTime.Now }; if (!IsModel) { db.Checks.Add(check); db.SaveChanges(); } else { check.CheckId = 0; } var sells = new List <Sell>(); //проходка по всем продуктам foreach (Product product in card) { //если продукта на складе нет ничего не продаем if (product.Count > 0) { //создание продажи var sell = new Sell() { CheckId = check.CheckId, Check = check, ProductId = product.ProductId, Product = product }; //транзакция -группа операций действий обьединеным логическим принципом,если сбой откатить до предыдущего(например банкомат 1.списать деньги со счета //2.выдать наличные если списать не удалось возвращаем на предыдущее состояние как будто деньги не выдавали ,или сли нет необходимых купюр возвращаем состояние на предыдущее) //добавлю позже!!!! sells.Add(sell); if (!IsModel) { //сохранение в локальное хранилище db.Sells.Add(sell); } product.Count--; sum += product.Price; } } check.Price = sum; if (!IsModel) { //засунуть в базу db.SaveChanges(); } //рассыылка о событии всем подписчикамоооо CheckClosed?.Invoke(this, check); //if (CheckClosed != null) //{ // CheckClosed(this, check); //} } return(sum); }