public List <Product> GetProductsByCriteria(GetProductBySearchTypeDto getProductBySearchTypeDto)
        {
            IEnumerable <ProductDto> productDtos = new List <ProductDto>();

            if (getProductBySearchTypeDto == null)
            {
                return(new List <Product>());
            }

            switch (getProductBySearchTypeDto.ProductSearchTypeId)
            {
            case 1:
                productDtos = _productDao.GetAllProducts();
                break;

            case 2:
                productDtos = _productDao.GetAllActiveProductsWithStatus(new ProductStatus().Active.Id);
                break;

            case 3:
                if (getProductBySearchTypeDto.ExtraParams == null || !getProductBySearchTypeDto.ExtraParams.ContainsKey("ZoneId"))
                {
                    productDtos = new List <ProductDto>();
                    break;
                }

                var zones = _zoneService.GetAllChildZones(int.Parse(getProductBySearchTypeDto.ExtraParams["ZoneId"]));

                productDtos = _productDao.GetAllActiveProductsForZones(zones.Select(x => x.ToDto()).ToList());
                break;

            case 4:
                productDtos = _productDao.GetAllActiveProductsWithStatus(new ProductStatus().Missing.Id);
                break;

            default:
                productDtos = new List <ProductDto>();
                break;
            }

            List <Product> products = new List <Product>();

            foreach (var productDto in productDtos)
            {
                Product product = Product.FromDto(productDto);

                product.Zone  = _zoneService.GetZoneById(productDto.ZoneId);
                product.Owner = _ownerService.GetOwnerById(productDto.OwnerId);

                products.Add(product);
            }

            return(products);
        }
        public Product GetProductById(int id)
        {
            ProductDto productDto = _productDao.GetProductById(id);

            return(Product.FromDto(productDto));
        }