Online Restaurant Website Part 27 Search Filters

  Online Restaurant Website Part 27 Search Filters

Hi, Dear's here we learn how to implement "Pizza Restaurant Drink" Website in Visual Studio using C# ASP.NET MVC. Ilyasoft software company provide full project step by step training on our YouTube Channel ilyasoft software company so now subscribe, share and like for more project base tutorials



In this video we are going to implement Our Shop Search Filters Implementation for more details click here: watch vedio

First we are going to add  FilterCategoryMV data model to filter our shop by categories code add below:

FilterCategoryMV Code : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PizzaRestaurantDrink.Models
{
    public class FilterCategoryMV
    {
        public int StockMenuCategoryID { get; set; }
        public string StockMenuCategory { get; set; }
        public bool CategoryStatus { get; set; }
    }
}

Next add  FilterOrderTypeMV data model to filter our shop by Order Type means by delivery or by pickup code add below:

FilterOrderTypeMV Code : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PizzaRestaurantDrink.Models
{
    public class FilterOrderTypeMV
    {
        public int OrderTypeID { get; set; }
        public string OrderType { get; set; }
        public bool OrderTypeStatus { get; set; }
    }
}

Next we are going to add  StockMenuMV data model to filter our shop by search key, category , order type also code add below:

StockMenuMV Code : 

using Dblayer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PizzaRestaurantDrink.Models
{
    public class StockMenuMV
    {
        PizzaRestaurentandDrinksDbEntities db = new PizzaRestaurentandDrinksDbEntities();
        public StockMenuMV()
        {
            GetAllCategories();
            GetOrderTypes();
            GetAllItems(string.Empty);
        }
        public StockMenuMV(string searchkey)
        {
            GetAllCategories();
            GetOrderTypes();
            GetAllItems(searchkey);
        }

        public StockMenuMV(string searchkey, List<FilterCategoryMV> list_categories, List<FilterOrderTypeMV> list_ordertypes)
        {
            categorylist = list_categories;
            ordertypelist = list_ordertypes;
            GetAllItems(searchkey);
        }

        public string SearchKey { get; set; }
        public List<ItemMV> AllItems { get; set; }
        private void GetAllItems(string key)
        {
            AllItems = new List<ItemMV>();
            var checked_categories = categorylist.Where(c => c.CategoryStatus == true) != null ? categorylist.Where(c => c.CategoryStatus == true).Count() : 0;
            var checked_ordertypes = ordertypelist.Where(c => c.OrderTypeStatus == true) != null ? ordertypelist.Where(c => c.OrderTypeStatus == true).Count() : 0;
            if (String.IsNullOrEmpty(key) && checked_categories == 0 && checked_ordertypes == 0)
            {
                foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1).ToList())
                {
                    var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                    AllItems.Add(new ItemMV()
                    {
                        StockItemID = item.StockItemID,
                        ItemPhotoPath = item.ItemPhotoPath,
                        StockItemTitle = item.StockItemTitle,
                        ItemSize = item.ItemSize,
                        UnitPrice = item.UnitPrice,
                        OrderType = ordertype,
                        Rating = item.StockItemID
                    });
                }
            }
            else if (String.IsNullOrEmpty(key) && (checked_categories > 0 || checked_ordertypes > 0))
            {
                foreach (var category in categorylist.Where(c => c.CategoryStatus == true).ToList())
                {
                    foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1 && i.StockItemCategoryID == category.StockMenuCategoryID).ToList())
                    {
                        var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                        AllItems.Add(new ItemMV()
                        {
                            StockItemID = item.StockItemID,
                            ItemPhotoPath = item.ItemPhotoPath,
                            StockItemTitle = item.StockItemTitle,
                            ItemSize = item.ItemSize,
                            UnitPrice = item.UnitPrice,
                            OrderType = ordertype,
                            Rating = item.StockItemID
                        });
                    }
                }
                foreach (var order_type in ordertypelist.Where(o => o.OrderTypeStatus == true).ToList())
                {
                    foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1 && i.OrderTypeID == order_type.OrderTypeID).ToList())
                    {
                        var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                        AllItems.Add(new ItemMV()
                        {
                            StockItemID = item.StockItemID,
                            ItemPhotoPath = item.ItemPhotoPath,
                            StockItemTitle = item.StockItemTitle,
                            ItemSize = item.ItemSize,
                            UnitPrice = item.UnitPrice,
                            OrderType = ordertype,
                            Rating = item.StockItemID
                        });
                    }
                }
            }
            else if (!String.IsNullOrEmpty(key) && (checked_categories > 0 || checked_ordertypes > 0))
            {
                foreach (var category in categorylist.Where(c => c.CategoryStatus == true).ToList())
                {
                    foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1 && i.StockItemCategoryID == category.StockMenuCategoryID && i.StockItemTitle.Trim().ToLower().Contains(key.Trim().ToLower())).ToList())
                    {
                        var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                        AllItems.Add(new ItemMV()
                        {
                            StockItemID = item.StockItemID,
                            ItemPhotoPath = item.ItemPhotoPath,
                            StockItemTitle = item.StockItemTitle,
                            ItemSize = item.ItemSize,
                            UnitPrice = item.UnitPrice,
                            OrderType = ordertype,
                            Rating = item.StockItemID
                        });
                    }
                }
                foreach (var order_type in ordertypelist.Where(o => o.OrderTypeStatus == true).ToList())
                {
                    foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1 && i.OrderTypeID == order_type.OrderTypeID && i.StockItemTitle.Trim().ToLower().Contains(key.Trim().ToLower())).ToList())
                    {
                        var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                        AllItems.Add(new ItemMV()
                        {
                            StockItemID = item.StockItemID,
                            ItemPhotoPath = item.ItemPhotoPath,
                            StockItemTitle = item.StockItemTitle,
                            ItemSize = item.ItemSize,
                            UnitPrice = item.UnitPrice,
                            OrderType = ordertype,
                            Rating = item.StockItemID
                        });
                    }
                }
            }
            else if (!String.IsNullOrEmpty(key) && (checked_categories == 0 || checked_ordertypes == 0))
            {
                foreach (var item in db.StockItemTables.Where(i => i.VisibleStatusID == 1 && i.StockItemTitle.Trim().ToLower().Contains(key.Trim().ToLower())).ToList())
                {
                    var ordertype = db.OrderTypeTables.Find(item.OrderTypeID).OrderType;
                    AllItems.Add(new ItemMV()
                    {
                        StockItemID = item.StockItemID,
                        ItemPhotoPath = item.ItemPhotoPath,
                        StockItemTitle = item.StockItemTitle,
                        ItemSize = item.ItemSize,
                        UnitPrice = item.UnitPrice,
                        OrderType = ordertype,
                        Rating = item.StockItemID
                    });
                }
            }
        }

        public List<FilterCategoryMV> categorylist { get; set; }
        private void GetAllCategories()
        {
            categorylist = new List<FilterCategoryMV>();
            foreach (var category in db.StockItemCategoryTables.Where(c => c.VisibleStatusID == 1).ToList())
            {
                categorylist.Add(new FilterCategoryMV()
                {
                    StockMenuCategoryID = category.StockItemCategoryID,
                    StockMenuCategory = category.StockItemCategory,
                    CategoryStatus = false
                });
            }
        }

        public List<FilterOrderTypeMV> ordertypelist { get; set; }
        private void GetOrderTypes()
        {
            ordertypelist = new List<FilterOrderTypeMV>();
            foreach (var ordertype in db.OrderTypeTables.ToList())
            {
                ordertypelist.Add(new FilterOrderTypeMV()
                {
                    OrderTypeID = ordertype.OrderTypeID,
                    OrderType = ordertype.OrderType
                });
            }
        }
    }
}

Now update Allitems action code in home controller.

> Allitems Action  Updates Code : 

  public ActionResult AllItems()
        {
            var list = new StockMenuMV();
            return View(list);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult AllItems(StockMenuMV stockMenuMV)
        {
            var list = new StockMenuMV(stockMenuMV.SearchKey,stockMenuMV.categorylist,stockMenuMV.ordertypelist);
            return View(list);
        }

Next we are going to update view for AllItems

 'Allitem view', updating code show below 

>  Allitems View Code : 

......
......
......

<div class="left-side">
                    <h4>SEARCH FILTERS</h4>
                    @using (Html.BeginForm("AllItems", "Home", FormMethod.Post, new { @enctype = "multipart/form-data", @class = "form-horizontal" }))
                    {
                        <div class="search">
                            <!-- Search Filter Start -->
                            <fieldset>

                                @Html.AntiForgeryToken()
                                @Html.ValidationSummary(true, "", new { @class = "text-danger" })

                                <div class="form-group">
                                    @Html.EditorFor(model => model.SearchKey, new { htmlAttributes = new { @class = "form-control", @placeholder = "Search Food", @type = "text" } })
                                    <button type="submit" value="submit" class="btn"><i class="icofont icofont-search"></i></button>
                                </div>

                                <ul class="list-unstyled">
                                    @for (int i = 0; i < Model.categorylist.Count; i++)
                                    {
                                        <li>
                                            <label class="check">
                                                @Html.CheckBoxFor(c => Model.categorylist[i].CategoryStatus, new { @class = "checkclass" })
                                                @Model.categorylist[i].StockMenuCategory
                                                @Html.HiddenFor(c => Model.categorylist[i].StockMenuCategoryID)
                                                @Html.HiddenFor(c => Model.categorylist[i].StockMenuCategory)
                                            </label>
                                        </li>
                                    }

                                </ul>

                            </fieldset>
                            <!-- Search Filter End -->
                        </div>
                        <div class="food">
                            <h3>Food For</h3>
                            <ul class="list-inline">
                                @for (int i = 0; i < Model.ordertypelist.Count; i++)
                                {
                                    <li class="list-inline-item">
                                        <label class="check">
                                            @Html.CheckBoxFor(c => Model.ordertypelist[i].OrderTypeStatus, new { @class = "checkclass" })
                                            @Model.ordertypelist[i].OrderType
                                            @Html.HiddenFor(c => Model.ordertypelist[i].OrderTypeID)
                                            @Html.HiddenFor(c => Model.ordertypelist[i].OrderType)
                                        </label>
                                    </li>
                                }
                            </ul>
                        </div>
                        <div class="rating">
                            <!-- Rating Filter Start -->
                            <h3>Rating</h3>
                            <ul class="list-unstyled">
                                <li>
                                    <label class="check">
                                        <input type="radio" name="payment" class="checkclass" />
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                    </label>
                                </li>
                                <li>
                                    <label class="check">
                                        <input type="radio" name="payment" class="checkclass" />
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                    </label>
                                </li>
                                <li>
                                    <label class="check">
                                        <input type="radio" name="payment" class="checkclass" />
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                    </label>
                                </li>
                                <li>
                                    <label class="check">
                                        <input type="radio" name="payment" class="checkclass" />
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                    </label>
                                </li>
                                <li>
                                    <label class="check">
                                        <input type="radio" name="payment" class="checkclass" />
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                        <i class="icofont icofont-star"></i>
                                    </label>
                                </li>
                            </ul>
                            <!-- Rating Filter End -->
                        </div>
                    }
                </div>
......
......
......
<!-- Shop End -->

so once all above steps is done then run the application... 

Comments