using InventoryManager.Data; using InventoryManager.Interfaces; using InventoryManager.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using InventoryManager.Tools; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace InventoryManager.Repositories { public class UnitRepo : IUnit { private readonly InventoryContext _context; public UnitRepo(InventoryContext context) { _context = context; } public Unit Create(Unit unit) { _context.Units.Add(unit); _context.SaveChanges(); return unit; } public Unit Delete(Unit unit) { _context.Units.Attach(unit); _context.Entry(unit).State = EntityState.Deleted; _context.SaveChanges(); return unit; } public Unit Edit(Unit unit) { _context.Units.Attach(unit); _context.Entry(unit).State = EntityState.Modified; _context.SaveChanges(); return unit; } private List<Unit> Sort(List<Unit> units, string SortProperty, SortOrder sortOrder) { if (SortProperty.ToLower() == "name") { if (sortOrder == SortOrder.Ascending) units = units.OrderBy(n => n.Name).ToList(); else units = units.OrderByDescending(n => n.Name).ToList(); } else { if (sortOrder == SortOrder.Ascending) units = units.OrderBy(d => d.Description).ToList(); else units = units.OrderByDescending(d => d.Description).ToList(); } return units; } public PaginatedList<Unit> GetItems(string SortProperty, SortOrder sortOrder, string SearchText = "", int pageIndex=1, int pageSize=5) { List<Unit> units = _context.Units.ToList(); if (SearchText != "" && SearchText != null) { units = _context.Units.Where(n => n.Name.Contains(SearchText) || n.Description.Contains(SearchText)).ToList(); } else units = _context.Units.ToList(); units = Sort(units, SortProperty, sortOrder); PaginatedList<Unit> retUnits = new PaginatedList<Unit>(units, pageIndex, pageSize); return retUnits; } public Unit GetUnit(int id) { Unit unit = _context.Units.Where(u => u.Id == id).FirstOrDefault(); return unit; } public bool IsUnitUnique(string name) { int ct = _context.Units.Where(n => n.Name.ToLower() == name.ToLower()).Count(); if(ct > 0) return true; else return false; } public bool IsUnitUnique(string name, int id) { int ct = _context.Units.Where(n => n.Name.ToLower() == name.ToLower() && n.Id!=id).Count(); if (ct > 0) return true; else return false; } public List<Unit> GetNameList() { List<Unit> items = _context.Units.ToList(); return items; } } }