Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        public async Task <BLLChangeDTO> GetChangeAsync(int changeId)
        {
            var changeDTO = await Uow.Changes.FindDTOAsync(changeId);

            if (changeDTO == null)
            {
                return(null);
            }
            return(ChangeMapper.FromDAL(changeDTO));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
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);
        }
Exemplo n.º 7
0
        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());
        }