InventoryManager / Repositories / MaterialsRepo.cs
MaterialsRepo.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 MaterialsRepo : IMaterials
    {
        private readonly InventoryContext _context;

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

        public Materials Create(Materials material)
        {
            _context.Materials.Add(material);
            _context.SaveChanges();
            return material;
        }

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

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

        private List<Materials> Sort(List<Materials> 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 "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 "supplier":
                    if (sortOrder == SortOrder.Ascending)
                    {
                        items = items.OrderBy(n => n.Suppliers.Name).ToList();
                        return items;
                    }
                    else
                    {
                        items = items.OrderByDescending(n => n.Suppliers.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<Materials> GetItems(string SortProperty, SortOrder sortOrder, string SearchText = "", int pageIndex=1, int pageSize=5)
        {
            List<Materials> items;

            if (SearchText != "" && SearchText != null)
            {
                items = _context.Materials.Where(n => n.Name.Contains(SearchText) || n.Description.Contains(SearchText)).Include(u=>u.Units).Include(s => s.Suppliers).ToList();
            }
            else
                items = _context.Materials.Include(u => u.Units).Include(s=>s.Suppliers).ToList();


            items = Sort(items, SortProperty, sortOrder);

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

            return retItems;
        }

        public Materials GetItem(int id)
        {
            Materials item = _context.Materials.Where(u => u.Id == id).Include(u => u.Units).Include(s => s.Suppliers).FirstOrDefault();
            return item;
        }


        public bool IsItemUnique(string name)
        {
            int ct = _context.Materials.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.Materials.Where(n => n.Name.ToLower() == name.ToLower() && n.Id!=id).Count();
            if (ct > 0)
                return true;
            else return false;
        }

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

        }
    }
}