public async Task <DALChangeDTO> FindDTOAsync(int changeId) { var change = await RepoDbSet .Include(c => c.ChangeName) .ThenInclude(name => name.Translations) .Include(c => c.ChangeInCategories) .ThenInclude(obj => obj.Category) .Include(c => c.Prices) .Where(c => c.IsDeleted == false && c.Id == changeId) .SingleOrDefaultAsync(); if (change == null) { return(null); } var currentPrice = PriceFinder.ForChange(change, change.Prices, DateTime.Now); if (currentPrice == null) { return(null); } return(ChangeMapper.FromDomain(change)); }
public async Task <BLLChangeDTO> GetChangeAsync(int changeId) { var changeDTO = await Uow.Changes.FindDTOAsync(changeId); if (changeDTO == null) { return(null); } return(ChangeMapper.FromDAL(changeDTO)); }
public async Task <bool> EditChange(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) { if (!organizationCategoryIds.Contains(category.Id)) { return(false); } } //1.Edit product entity var change = await Uow.Changes.EditAsync(ChangeMapper.FromBLL2(changeDto)); if (change == null) { return(false); } //2. Edit product categories await Uow.ChangesInCategories.RemoveByChangeId(change.Id); 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.Now, ValidTo = DateTime.MaxValue, }; await Uow.Prices.EditAsync(priceDTO); await Uow.SaveChangesAsync(); return(true); }
public async Task <DALChangeDTO> AddAsync(DALChangeDTO changeDTO) { var change = ChangeMapper.FromDAL(changeDTO); change = (await RepoDbSet.AddAsync(change)).Entity; if (change == null) { return(null); } await RepoDbContext.Entry(change).Reference(c => c.ChangeName).LoadAsync(); await RepoDbContext.Entry(change.ChangeName).Collection(c => c.Translations).LoadAsync(); return(ChangeMapper.FromDomain(change)); }
public async Task <DALChangeDTO> EditAsync(DALChangeDTO changeDTO) { var change = await RepoDbSet.FindAsync(changeDTO.Id); if (change == null) { return(null); } await RepoDbContext.Entry(change).Reference(c => c.ChangeName).LoadAsync(); await RepoDbContext.Entry(change.ChangeName).Collection(c => c.Translations).LoadAsync(); change.ChangeName.SetTranslation(changeDTO.Name); return(ChangeMapper.FromDomain(change)); }
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 <List <DALChangeDTO> > GetChangesByCategoryIdsAsync(int[] categoryIds) { var changeInCategories = await RepoDbSet .Include(obj => obj.Category) .ThenInclude(category => category.CategoryName) .ThenInclude(name => name.Translations) .Include(obj => obj.Change) .ThenInclude(change => change.ChangeName) .ThenInclude(name => name.Translations) .Include(obj => obj.Change) .ThenInclude(change => change.Prices) .Where(obj => categoryIds.Contains(obj.CategoryId) && obj.Change.IsDeleted == false) .ToListAsync(); return(changeInCategories .Select(changeInCategory => ChangeMapper.FromDomain(changeInCategory.Change)) .Where(dto => dto.CurrentPrice != decimal.MinusOne) .Distinct() .ToList()); }