//Добавление экземпляров книги в корзину покупателя //Должна быть транзакция public bool AddBookItem(Basket basket, BasketItem basketItem) { Int32 allBasketItemCount; Book book; BookVariableInfo bookVariableInfo, newBookVariableInfo; BasketRepository basketRepository; if (basket != null && basketItem != null) { if (basket.BasketItems == null) basket.BasketItems = new List<BasketItem>(); bookVariableInfo = (BookVariableInfo) base._bookVariableInfoRepository.FindById( basketItem.BookVariableInfoId); book = (Book)this._bookRepository.FindById(bookVariableInfo.Id); //Валидация. Общее число заказанного товара не должно быть >= имеющегося числа allBasketItemCount = BasketItemCounting(basketItem); if (allBasketItemCount + basketItem.ItemCount > bookVariableInfo.ProductCount) return false; //Добавление заказанной книги basketItem.BasketId = basket.Id; basketItem.Amount = bookVariableInfo.Price * basketItem.ItemCount; base._basketItemRepository.Add(basketItem); //Обновление корзины basket.TotalAmount += basketItem.Amount; basketRepository = new BasketRepository(); basketRepository.Edit(basket); return true; } else { throw new Exception("Корзина или элемент корзины не заданы!"); } return false; }
public BasketView(Basket basket) { IList<BasketItem> basketItems; IndividualRepository individualRepository; BasketItemRepository basketItemRepository; individualRepository = new IndividualRepository(); basketItemRepository = new BasketItemRepository(); this.Id = basket.Id; this.TotalAmount = basket.TotalAmount; this.DeliveryCost = basket.DeliveryCost; this.Individual = (Individual) individualRepository.FindById(this.Id); basketItems = basketItemRepository.FindAllByBasket(this.Id); this.BasketItemViews = (from basketItem in basketItems select new BasketItemView(basketItem)) .ToList<BasketItemView>(); }
//Привязка элементов корзины покупателя к платежу и открепление их //от корзины. //payment должен быть известен БД или стоит его в ней найти по id? public void BasketToPaymentMigration(Basket basket, Payment payment) { IList<BasketItem> basketItems; BasketItemRepository basketItemRepository; if (basket != null && payment != null) { //прикрепление заказов к платежу basketItemRepository = (BasketItemRepository)this._basketItemRepository; basketItems = basketItemRepository.FindAllByBasket(basket.Id); foreach (BasketItem item in basketItems) { item.PaymentId = payment.Id; basketItemRepository.Edit(item); } //открепление заказов от корзины и ее очистка ClearBasket(basket); } else throw new Exception("Корзина или платеж не заданы!"); }
//Обновление корзины. Обновление переменной информации книги. //Необходимо рассчитать стоимость доставки, а также обновить //пересчитать книги. //Стоимость книг и стоимость доставки хранятся отдельно public Basket ShopProcessing(Basket basket, Shop shop) { List<BasketItem> basketItems; BookVariableInfo bookVariableInfo; Int32 allBasketItemCount, itemSum; BasketRepository basketRepository; BasketItemRepository basketItemRepository; BookVariableInfoRepository bookVariableInfoRepository; if (basket != null && shop != null) { basketRepository = (BasketRepository) this._basketRepository; basketItemRepository = (BasketItemRepository) this._basketItemRepository; bookVariableInfoRepository = (BookVariableInfoRepository) this._bookVariableInfoRepository; basketItems = (List<BasketItem>) basketItemRepository.FindAllByBasket(basket.Id); allBasketItemCount = (from item in basketItems select item.ItemCount).Sum(); //Обновление книжной информации в БД var basketItemGroups = from item in basketItems group item by item.BookVariableInfoId into basketGroup select basketGroup; foreach (var groupp in basketItemGroups) { bookVariableInfo = (BookVariableInfo) this._bookVariableInfoRepository.FindById(groupp.Key); itemSum = (from s in groupp.ToList() select s.ItemCount).Sum(); bookVariableInfo.ProductCount -= itemSum; bookVariableInfoRepository.Edit(bookVariableInfo); } //BaseService._db.SaveChanges(); //Обновление корзины basket.DeliveryCost = shop.BookDeliveryCost * allBasketItemCount; basketRepository.Edit(basket); return basket; } else { throw new Exception("Корзина или магазин не заданы!"); } }
//Очистка корзины public void ClearBasket(Basket basket) { BasketRepository basketRepository; BasketItemRepository basketItemRepository; basketRepository = (BasketRepository)this._basketRepository; basketItemRepository = (BasketItemRepository)this._basketItemRepository; //удаление привязки корзины к ее элементам foreach (BasketItem item in basketItemRepository.FindAllByBasket(basket.Id)) { item.BasketId = null; basketItemRepository.Edit(item); } basket.TotalAmount = 0; basket.DeliveryCost = 0; basketRepository.Edit(basket); }