public async Task <ActionResult <SearchResultsVM> > Search(string query, uint page)
        {
            ProductsListDTO productsListDto = await _catalogManager.SearchByNameOrDescription(new CatalogSearchDTO
            {
                Page              = page,
                PageSize          = PageSize,
                NameOrDescription = query
            });

            return(View(new SearchResultsVM
            {
                Products = productsListDto.Products.Select(p => new ProductShortVM
                {
                    Id = p.Id,
                    Brand = p.Brand?.Name,
                    Country = p.Country?.Name,
                    Image = p.Image,
                    Name = p.Name,
                    Price = p.Price,
                    Weight = p.Weight
                }),
                PagingInfo = new PagingInfoVM
                {
                    CurrentPage = productsListDto.PagingInfo.CurrentPage,
                    TotalItems = productsListDto.PagingInfo.TotalItems,
                    ItemsPerPage = productsListDto.PagingInfo.ItemsPerPage
                }
            }));
        }
        public ProductsListDTO GetAll(int page)
        {
            var productsList = new ProductsListDTO();

            var products = _productRepository.GetAll()
                           .Include(p => p.Category);

            productsList.Products      = _mapper.Map <IEnumerable <ProductDTO> >(products.Skip((page - 1) * 10).Take(10));
            productsList.ProductsCount = products.Count();

            return(productsList);
        }
        public async Task UpdateProductsAsync([FromBody] ProductsListDTO productsList)
        {
            try
            {
                await _productService.UpdateProductsAsync(productsList);
            }
            catch (Exception exception)
            {
                #region Write To Log (Severity: Error)

                _logger.LogError(ELogEvents.FailedToUpdateProducts.ToEventID(),
                                 exception,
                                 "Failed to update products");

                #endregion
            }
        }
Exemple #4
0
        public ProductsListViewModel(ProductsListDTO serviceDto)
        {
            this.Products = serviceDto.Products.Select(dto => new ProductViewModel()
            {
                Category    = dto.Category,
                Description = dto.Description,
                Name        = dto.Name,
                Price       = dto.Price,
                Id          = dto.Id
            });

            this.PagingInfo = new PagingInfo()
            {
                CurrentPage  = serviceDto.PagingInfo.CurrentPage,
                ItemsPerPage = serviceDto.PagingInfo.ItemsPerPage,
                TotalItems   = serviceDto.PagingInfo.TotalItems
            };

            this.CurrentCategory = serviceDto.CurrentCategory;
        }
Exemple #5
0
        public async Task <ProductsListDTO> GetAllProducts(string category, int productPage = 1)
        {
            var repoQuery =
                await this._productRepository
                .Products
                .Where(c => category == null || c.Category == category)
                .OrderBy(p => p.Id)
                .Skip((productPage - 1) * PageSize)
                .Take(PageSize)
                .ToListAsync();

            var serviceModel = new ProductsListDTO()
            {
                Products = repoQuery.Select(q => new ProductDTO()
                {
                    Category    = q.Category,
                    Description = q.Description,
                    Name        = q.Name,
                    Price       = q.Price,
                    Id          = q.Id
                }),
                PagingInfo = new PagingInfoDTO()
                {
                    TotalItems = category == null ?
                                 await this._productRepository
                                 .Products
                                 .CountAsync()
                        :
                                 await this._productRepository
                                 .Products
                                 .Where(pc => pc.Category == category)
                                 .CountAsync(),
                    CurrentPage  = productPage,
                    ItemsPerPage = this.PageSize
                },
                CurrentCategory = category
            };

            return(serviceModel);
        }
        public async Task <ProductsListDTO> Products(ProductsFiltersDTO filters)
        {
            IQueryable <Product> products = Database.Products;

            if (filters == null)
            {
                return(new ProductsListDTO
                {
                    PagingInfo = new PagingInfoDTO
                    {
                        CurrentPage = 1,
                        ItemsPerPage = 15,
                        TotalItems = await products.CountAsync()
                    },
                    // Скипаем ноль объектов, и берем 15.
                    Products = await MapToDto(0, 15)
                });
            }

            if (filters.Page < 1)
            {
                filters.Page = 1;
            }

            if (filters.PageSize < 1)
            {
                filters.PageSize = 1;
            }

            if (filters.Removed == RemoveState.Yes)
            {
                products = products.Where(p => p.Removed);
            }
            else if (filters.Removed == RemoveState.No)
            {
                products = products.Where(p => p.Removed == false);
            }

            if (!string.IsNullOrWhiteSpace(filters.Category))
            {
                products = products.Where(p => p.Category.Name.Contains(filters.Category));
            }

            if (!string.IsNullOrWhiteSpace(filters.Brand))
            {
                products = products.Where(p => p.Brand.Name.Contains(filters.Brand));
            }

            if (!string.IsNullOrWhiteSpace(filters.Country))
            {
                products = products.Where(p => p.Country.Name.Contains(filters.Country));
            }

            if (!string.IsNullOrWhiteSpace(filters.Name))
            {
                products = products.Where(p => p.Name.Contains(filters.Name));
            }

            if (filters.Price.HasValue)
            {
                products = products.Where(p => p.Price == filters.Price);
            }

            if (filters.Weight.HasValue)
            {
                products = products.Where(p => p.Weight == filters.Weight);
            }

            int totalItems = await products.CountAsync();

            int skipCount = (int)(filters.Page - 1) * filters.PageSize;

            var productsManagmentList = new ProductsListDTO
            {
                Products   = await MapToDto(skipCount, filters.PageSize),
                PagingInfo = new PagingInfoDTO
                {
                    CurrentPage  = (int)filters.Page,
                    ItemsPerPage = filters.PageSize,
                    TotalItems   = totalItems
                }
            };

            return(productsManagmentList);

            #region Local Functions

            async Task <IEnumerable <ProductDTO> > MapToDto(int skip, int pageSize)
            {
                var dtoList = await products.Select(p => new ProductDTO
                {
                    Id          = p.Id,
                    Name        = p.Name,
                    BrandId     = p.BrandId,
                    CategoryId  = p.CategoryId,
                    CountryId   = p.CountryId,
                    Character   = p.Character,
                    Description = p.Description,
                    Image       = p.Image,
                    Price       = p.Price,
                    Weight      = p.Weight,
                    Removed     = p.Removed,
                    Brand       = p.Brand == null ? null : new BrandDTO
                    {
                        Id   = p.Brand.Id,
                        Name = p.Brand.Name
                    },
                    Category = p.Category == null ? null : new CategoryDTO
                    {
                        Id   = p.Category.Id,
                        Name = p.Category.Name
                    },
                    Country = p.Country == null ? null : new CountryDTO
                    {
                        Id   = p.Country.Id,
                        Name = p.Country.Name
                    }
                }).OrderBy(p => p.Id).Skip(skip).Take(pageSize).ToArrayAsync();

                return(dtoList);
            }

            #endregion
        }
Exemple #7
0
        /// <summary>
        /// Update/Insert product
        /// </summary>
        /// <param name="productsList">The product to upsert</param>
        /// <returns>Update result of upsert operation</returns>
        /// <exception cref="ArgumentNullException">Throws when product is null</exception>
        /// <exception cref="ArgumentException">Throws when invalid chain</exception>
        /// <exception cref="ArgumentException">Throws when store id is empty</exception>
        /// <exception cref="ArgumentException">Throws when products are empty</exception>
        public async Task UpdateProductsAsync(ProductsListDTO productsList)
        {
            #region Validations

            if (productsList is null)
            {
                throw new ArgumentNullException(nameof(productsList));
            }

            if (productsList.ChainID == EChain.None)
            {
                throw new ArgumentException("Invalid chain", nameof(productsList.ChainID));
            }

            if (string.IsNullOrWhiteSpace(productsList.StoreID))
            {
                throw new ArgumentException("Store id is empty", nameof(productsList.StoreID));
            }

            if (productsList.Products.IsNullOrEmpty())
            {
                throw new ArgumentException("Products are empty", nameof(productsList.Products));
            }

            #endregion

            #region Upsert Products

            var productModels = new List <Product>(productsList.Products.Count());

            foreach (var product in productsList.Products)
            {
                decimal.TryParse(product.Quantity, out decimal quantity);
                decimal.TryParse(product.UnitOfMeasurePrice, out decimal unitOfMeasurePrice);

                await _productRepository.UpsertProductAsync(new Product
                {
                    Code                    = product.ItemCode,
                    Name                    = product.ItemName,
                    ManufacturerName        = product.ManufacturerName,
                    ManufactureCountry      = product.ManufactureCountry,
                    ManufacturerDescription = product.ManufacturerItemDescription,
                    Quantity                = quantity,
                    UnitQuantityType        = product.UnitQty.ToUnitQuantity(),
                    UnitOfMeasure           = ExtractUnitOfMeasure(product.UnitOfMeasure),
                    UnitOfMeasurePrice      = unitOfMeasurePrice
                });
            }

            #endregion

            #region Insert Product Prices

            await _productPricesRepository.InsertProductsPricesProductAsync(productsList.Products.Select(product =>
                                                                                                         new ProductPrice
            {
                Code            = product.ItemCode,
                ChainID         = productsList.ChainID,
                StoreID         = Convert.ToInt32(productsList.StoreID),
                Price           = Convert.ToDecimal(product.ItemPrice),
                PriceUpdateDate = product.PriceUpdateDate
            }));

            #endregion
        }