InventoryManager / Repositories / ProductsRepo.cs
ProductsRepo.cs
Raw
using InventoryManager.Data;
using InventoryManager.Interfaces;
using InventoryManager.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using InventoryManager.Tools;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Collections.Generic;

namespace InventoryManager.Repositories
{
    public class ProductsRepo : IProducts
    {
        private readonly InventoryContext _context;

        public ProductsRepo(InventoryContext context)
        {
            _context = context;
        }

        public Products Create(Products product)
        {
            _context.Products.Add(product);
            _context.SaveChanges();
            return product;
        }

        public Products Delete(Products product)
        {
            _context.Products.Attach(product);
            _context.Entry(product).State = EntityState.Deleted;
            _context.SaveChanges();
            return product;
        }

        public Products Edit(Products product)
        {
            _context.Products.Attach(product);
            _context.Entry(product).State = EntityState.Modified;
            _context.SaveChanges();
            return product;
        }

        private List<Products> Sort(List<Products> items, string SortProperty, SortOrder sortOrder)
        {
            string property = SortProperty.ToLower();
            switch (property)
            {
                case "description":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Description).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Description).ToList();
                        return items;
                    }
                case "qty":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Quantity).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Quantity).ToList();
                        return items;
                    }
                case "color":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Color).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Color).ToList();
                        return items;
                    }
                case "unit":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Units.Name).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Units.Name).ToList();
                        return items;
                    }
                case "collection":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Collections.Name).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Collections.Name).ToList();
                        return items;
                    }
                case "material":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Materials.Name).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Materials.Name).ToList();
                        return items;
                    }
                default:
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Name).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Name).ToList();
                        return items;
                    }
            }           
        }

        public PaginatedList<Products> GetItems(string SortProperty, SortOrder sortOrder, string SearchText = "", int pageIndex=1, int pageSize=5)
        {
            List<Products> items;

            if (SearchText != "" && SearchText != null)
            {
                items = _context.Products.Where(n => n.Name.Contains(SearchText) || n.Description.Contains(SearchText)).Include(c => c.Colors).Include(q => q.Quantity).Include(u=>u.Units).Include(m => m.Materials).Include(c => c.Collections).ToList();
            }
            else
                items = _context.Products.Include(u => u.Units).Include(c => c.Colors).Include(m => m.Materials).Include(c => c.Collections).ToList();


            items = Sort(items, SortProperty, sortOrder);

            PaginatedList<Products> retItems = new PaginatedList<Products>(items, pageIndex, pageSize);

            return retItems;
        }

        public Products GetItem(int id)
        {
            Products item = _context.Products.Where(u => u.Id == id).Include(c => c.Colors).Include(u => u.Units).Include(m => m.Materials).Include(c => c.Collections).FirstOrDefault();
            return item;
        }


        public bool IsItemUnique(string name)
        {
            int ct = _context.Products.Where(n => n.Name.ToLower() == name.ToLower()).Count();
            if(ct > 0)
                return true;
            else return false;
        }

        public bool IsItemUnique(string name, int id)
        {
            int ct = _context.Products.Where(n => n.Name.ToLower() == name.ToLower() && n.Id!=id).Count();
            if (ct > 0)
                return true;
            else return false;
        }

        public List<Products> GetNameList()
        {
            List<Products> items = _context.Products.ToList();
            return items;

        }
    }
}