示例#1
0
        //Добавление экземпляров книги в корзину покупателя
        //Должна быть транзакция
        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;
        }
示例#2
0
        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>();
        }
示例#3
0
        //Привязка элементов корзины покупателя к платежу и открепление их
        //от корзины.
        //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("Корзина или платеж не заданы!");
        }
示例#4
0
        //Обновление корзины. Обновление переменной информации книги.
        //Необходимо рассчитать стоимость доставки, а также обновить
        //пересчитать книги.
        //Стоимость книг и стоимость доставки хранятся отдельно
        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("Корзина или магазин не заданы!");
            }
        }
示例#5
0
        //Очистка корзины
        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);
        }