Ejemplo n.º 1
0
        public async Task <bool> EditProduct(BLLProductDTO productDTO)
        {
            var organization = await Uow.Organizations.FindWithCategoriesAsync(productDTO.OrganizationId);

            if (organization?.Categories == null || organization.Categories.Count == 0)
            {
                return(false);
            }

            var organizationCategoryIds = organization.Categories.Select(dto => dto.Id).ToList();

            foreach (var category in productDTO.Categories)
            {
                if (!organizationCategoryIds.Contains(category.Id))
                {
                    return(false);
                }
            }

            //1.Edit product entity
            var product = await Uow.Products.EditAsync(ProductMapper.FromBLL2(productDTO));

            if (product == null)
            {
                return(false);
            }

            //2. Edit product categories
            await Uow.ProductsInCategories.RemoveByProductId(product.Id);

            foreach (var category in productDTO.Categories)
            {
                await Uow.ProductsInCategories.AddAsync(product.Id, category.Id);
            }

            //3. Add price
            var priceDTO = new DALPriceDTO()
            {
                Value     = productDTO.CurrentPrice,
                ProductId = product.Id,
                ValidFrom = DateTime.Now,
                ValidTo   = DateTime.MaxValue,
            };
            await Uow.Prices.EditAsync(priceDTO);

            await Uow.SaveChangesAsync();

            return(true);
        }
Ejemplo n.º 2
0
        public async Task AddAsync(DALPriceDTO priceDTO)
        {
            if ((priceDTO.ChangeId != null && priceDTO.ProductId != null) ||
                (priceDTO.ChangeId == null && priceDTO.ProductId == null))
            {
                throw new ArgumentException("Both priceId and product id can't be null or both can't have a value");
            }
            var price = new Price()
            {
                Value     = priceDTO.Value,
                ChangeId  = priceDTO.ChangeId,
                ProductId = priceDTO.ProductId,
                ValidFrom = priceDTO.ValidFrom,
                ValidTo   = priceDTO.ValidTo
            };

            await RepoDbSet.AddAsync(price);
        }
Ejemplo n.º 3
0
        public async Task <bool> AddChangeAsync(BLLChangeDTO changeDto)
        {
            var organization = await Uow.Organizations.FindWithCategoriesAsync(changeDto.OrganizationId);

            if (organization?.Categories == null || organization.Categories.Count == 0)
            {
                return(false);
            }

            var organizationCategoryIds = organization.Categories.Select(dto => dto.Id).ToList();

            foreach (var category in changeDto.Categories)
            {
                //Make sure select categories belong to selected Organization
                if (!organizationCategoryIds.Contains(category.Id))
                {
                    return(false);
                }
            }

            //1.Add change
            var change = await Uow.Changes.AddAsync(ChangeMapper.FromBLL(changeDto));

            //2. Add change categories
            foreach (var category in changeDto.Categories)
            {
                await Uow.ChangesInCategories.AddAsync(change.Id, category.Id);
            }

            //3. Add price
            var priceDTO = new DALPriceDTO()
            {
                Value     = changeDto.CurrentPrice,
                ChangeId  = change.Id,
                ValidFrom = DateTime.MinValue,
                ValidTo   = DateTime.MaxValue,
            };
            await Uow.Prices.AddAsync(priceDTO);

            await Uow.SaveChangesAsync();

            return(true);
        }
Ejemplo n.º 4
0
        public async Task EditAsync(DALPriceDTO priceDTO)
        {
            if ((priceDTO.ChangeId != null && priceDTO.ProductId != null) ||
                (priceDTO.ChangeId == null && priceDTO.ProductId == null))
            {
                throw new ArgumentException("Both priceId and product id can't be null or both can't have a value");
            }

            var time = priceDTO.ValidFrom;

            if (priceDTO.ProductId != null)
            {
                var oldPrice = await RepoDbSet
                               .Where(price => price.ValidTo > time && price.ValidFrom < time &&
                                      price.ProductId == priceDTO.ProductId)
                               .SingleOrDefaultAsync();

                oldPrice.ValidTo = time;
            }
            else
            {
                var oldPrice = await RepoDbSet
                               .Where(price => price.ValidTo > time && price.ValidFrom < time &&
                                      price.ChangeId == priceDTO.ChangeId)
                               .SingleOrDefaultAsync();

                oldPrice.ValidTo = time;
            }

            var newPrice = new Price()
            {
                Value     = priceDTO.Value,
                ChangeId  = priceDTO.ChangeId,
                ProductId = priceDTO.ProductId,
                ValidTo   = priceDTO.ValidTo,
                ValidFrom = priceDTO.ValidFrom
            };

            await RepoDbSet.AddAsync(newPrice);
        }