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; } } }