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); }
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); }
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); }
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); }