Пример #1
0
        public async Task <EntityOperationResult <Basket> > CreateItemAsync(BasketCreateDto basketCreateDto)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                int countInverory = basketCreateDto.BasketInventoryDto.Sum(x => x.CountInventory);

                if (countInverory <= 0)
                {
                    return(EntityOperationResult <Basket>
                           .Failure()
                           .AddError("Вы не указали количество товара"));
                }
                if (basketCreateDto.BasketInventoryDto.Any(x => x.CountInventory < 0))
                {
                    return(EntityOperationResult <Basket>
                           .Failure()
                           .AddError("Вы указали отрицательное число товара"));
                }

                try
                {
                    var basket = new Basket
                    {
                        UserId         = basketCreateDto.UserId,
                        CountInventory = countInverory,
                        OrganizationId = basketCreateDto.OrganizationId,
                        Sum            = basketCreateDto.BasketInventoryDto.Sum(x => x.Price * x.CountInventory),
                        Status         = false,
                        DateAction     = DateTime.Now
                    };

                    var entity = await unitOfWork.Basket.AddAsync(basket);

                    await unitOfWork.CompleteAsync();

                    var basketCheck = unitOfWork.Basket.GetById(entity.Id);
                    if (basketCheck != null)
                    {
                        foreach (var rec in basketCreateDto.BasketInventoryDto.Where(x => x.CountInventory > 0))
                        {
                            var basketInventory = new BasketInventory
                            {
                                BasketId       = entity.Id,
                                DishId         = rec.DishId,
                                CountInventory = rec.CountInventory,
                                Price          = rec.Price,
                                Sum            = rec.CountInventory * rec.Price
                            };
                            var basketInventoryCheck = await unitOfWork.BasketInventory.AddAsync(basketInventory);

                            await unitOfWork.CompleteAsync();
                        }
                    }

                    return(EntityOperationResult <Basket> .Success(entity));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Basket> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #2
0
        public async Task <EntityOperationResult <Basket> > EditItemAsync(BasketEditDto basketEditDto)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                int countInverory = basketEditDto.BasketInventoryDtos.Sum(x => x.CountInventory);

                if (countInverory <= 0)
                {
                    return(EntityOperationResult <Basket>
                           .Failure()
                           .AddError("Вы не указали количество товара"));
                }
                if (basketEditDto.BasketInventoryDtos.Any(x => x.CountInventory < 0))
                {
                    return(EntityOperationResult <Basket>
                           .Failure()
                           .AddError("Вы указали отрицательное число товара"));
                }

                try
                {
                    var basket = unitOfWork.Basket.GetById(basketEditDto.Id);
                    basket.CountInventory = countInverory;
                    basket.Sum            = basketEditDto.BasketInventoryDtos.Sum(x => x.Price * x.CountInventory);
                    basket.DateAction     = DateTime.Now;

                    unitOfWork.Basket.Update(basket);
                    List <BasketInventory> basketInventories =
                        unitOfWork.BasketInventory.GetBasketInventories(basketEditDto.Id).ToList();
                    bool flagAdd = false;
                    foreach (var rec in basketEditDto.BasketInventoryDtos)
                    {
                        if (rec.CountInventory == 0)
                        {
                            var basketInventory = basketInventories.FirstOrDefault(x => x.Id == rec.Id);
                            if (basketInventory != null)
                            {
                                unitOfWork.BasketInventory.Delete(basketInventory);
                            }
                        }
                        else
                        {
                            var basketInventory = basketInventories.FirstOrDefault(x => x.Id == rec.Id);
                            flagAdd = false;
                            if (basketInventory == null)
                            {
                                basketInventory = new BasketInventory
                                {
                                    BasketId = basket.Id,
                                };
                                flagAdd = true;
                            }

                            basketInventory.DishId         = rec.DishId;
                            basketInventory.CountInventory = rec.CountInventory;
                            basketInventory.Price          = rec.Price;
                            basketInventory.Sum            = rec.CountInventory * rec.Price;

                            if (flagAdd)
                            {
                                await unitOfWork.BasketInventory.AddAsync(basketInventory);
                            }
                            else
                            {
                                unitOfWork.BasketInventory.Update(basketInventory);
                            }
                        }
                    }
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <Basket> .Success(basket));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Basket> .Failure().AddError(ex.Message));
                }
            }
        }