private List <IProduct> GetCatalog(string search, bool getAll = false)
        {
            string select = "SELECT id,name,description,unitPrice,stockCount";
            string from   = "FROM Products";

            string where = "WHERE";
            string and     = "AND ";
            string or      = "OR ";
            string orderby = "ORDER BY";

            if (titleCheckBox.IsChecked == true && getAll == false)
            {
                if (descriptionCheckBox.IsChecked == false)
                {
                    where = $"{where} name LIKE @title";
                }
                if (descriptionCheckBox.IsChecked == true)
                {
                    where = $"{where} ( name LIKE @title";
                }
            }

            if (descriptionCheckBox.IsChecked == true && getAll == false)
            {
                if (where != "WHERE")
                {
                    where = $"{where} {or}";
                }

                if (where != "WHERE")
                {
                    where = $"{where} description LIKE @description)";
                }
                else
                {
                    where = $"{where} description LIKE @description";
                }
            }

            if (priceRangeCheckBox.IsChecked == true)
            {
                if (minimumPriceDUD.Value != null && minimumPriceDUD.Value > 0)
                {
                    if (where != "WHERE")
                    {
                        where = $"{where} {and}";
                    }

                    where = $"{where} unitPrice >= @minPrice";
                }

                if (maximumPriceDUD.Value != null)
                {
                    if (where != "WHERE")
                    {
                        where = $"{where} {and}";
                    }
                    where = $"{where} unitPrice <= @maxPrice";
                }
            }

            var    selectedItem = (ComboBoxItem)sortByComboBox.SelectedItem;
            string tag          = selectedItem.Tag.ToString();

            if (tag == "noSort")
            {
                orderby = string.Empty;
            }
            else
            {
                orderby = $"{orderby} {tag}";
            }

            if (where == "WHERE")
            {
                where = string.Empty;
            }

            string query = $"{select} {from} {where} {orderby}";

            var parameterKVPs = new Dictionary <string, object>();

            if (titleCheckBox.IsChecked == true)
            {
                parameterKVPs.Add("@title", $"%{search}%");
            }

            if (descriptionCheckBox.IsChecked == true)
            {
                parameterKVPs.Add("@description", $"%{search}%");
            }

            if (priceRangeCheckBox.IsChecked == true)
            {
                if (minimumPriceDUD.Value != null && minimumPriceDUD.Value > 0)
                {
                    parameterKVPs.Add("@minPrice", (decimal)minimumPriceDUD.Value);
                }

                if (maximumPriceDUD.Value != null)
                {
                    parameterKVPs.Add("@maxPrice", (decimal)maximumPriceDUD.Value);
                }
            }

            List <IProduct> products = DBAccessHelper.GetProducts(query, parameterKVPs);

            return(products);
        }