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