InventoryManager / Controllers / MaterialsController.cs
MaterialsController.cs
Raw
using InventoryManager.Data;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System;
using InventoryManager.Models;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using InventoryManager.Interfaces;
using InventoryManager.Tools;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Rendering;
using InventoryManager.Repositories;

namespace InventoryManager.Controllers
{
    [Authorize]
    public class MaterialsController : Controller
    {

        private readonly IMaterials _repo;
        private readonly IUnit _unitRepo;
        private readonly ISuppliers _suppliersRepo;

        public MaterialsController(IMaterials repo, IUnit unitRepo, ISuppliers suppliersRepo)
        {
            _repo = repo;
            _unitRepo = unitRepo;
            _suppliersRepo = suppliersRepo;
        }

        public IActionResult Index(string sortExpression = "", string SearchText = "",int pg = 1, int pageSize = 5)
        {

            SortModel sortModel = new SortModel();

            sortModel.AddColumn("name");
            sortModel.AddColumn("description");
            sortModel.AddColumn("unit");
            sortModel.AddColumn("supplier");
            sortModel.ApplySort(sortExpression);
            ViewData["sortModel"] = sortModel;
            ViewBag.SearchText = SearchText;

            PaginatedList<Materials> items = _repo.GetItems(sortModel.SortedProperty, sortModel.SortedOrder, SearchText, pg, pageSize);

            var pager = new PagerModel(items.TotalRecords, pg, pageSize);
            pager.SortExpression = sortExpression;
            this.ViewBag.Pager = pager;

            TempData["CurrentPage"] = pg;

            return View(items);
        }

        public IActionResult Create()
        {
            Materials item = new Materials();
            ViewBag.Units = GetUnitList();
            ViewBag.Suppliers = GetSupplierList();
            return View(item);
        }

        [HttpPost]
        public IActionResult Create(Materials item)
        {
            bool bolret = false;
            string errMessage = "";
            try
            {
                if (item.Description.Length < 4 || item.Description == null)
                    errMessage = "Description Must be at least 4 Characters";
                if (_repo.IsItemUnique(item.Name) == true)
                    errMessage += " Sorry I Already Exist";
                if (errMessage == "")
                {
                    item = _repo.Create(item);
                    bolret = true;
                }
            }
            catch(Exception ex)
            {
                errMessage += " " + ex.Message;
            }
            if (bolret == false)
            {
                TempData["ErrorMessage"] = errMessage;
                ModelState.AddModelError("", errMessage);
                return View(item);
            }
            else
            {
                TempData["SuccessMessage"] = item.Name + " Created Successfully";
                return RedirectToAction(nameof(Index));
            }
        }

        public IActionResult Details(int id)
        {
            Materials item = _repo.GetItem(id);
            ViewBag.Units = GetUnitList();
            ViewBag.Suppliers = GetSupplierList();
            return View(item);
        }

        [HttpGet]
        public IActionResult Edit(int id)
        {
            Materials item = _repo.GetItem(id);
            ViewBag.Units = GetUnitList();
            ViewBag.Suppliers = GetSupplierList();
            TempData.Keep("CurrentPage");
            return View(item);
        }

        [HttpPost]
        public IActionResult Edit(Materials item)
        {
            bool bolret = false;
            string errMessage = "";
            try
            {
                if(item.Description.Length < 4 || item.Description == null)
                    errMessage = "Description Must be at least 4 Characters";
                if (_repo.IsItemUnique(item.Name, item.Id) == true)
                    errMessage = errMessage + "Sorry I Already Exist";
                if (errMessage == "")
                {
                    item = _repo.Edit(item);
                    TempData["SuccessMessage"] = item.Name + " Updated Successfully";
                    bolret = true;
                }

            }
            catch(Exception ex)
            {
                errMessage = errMessage = " " + ex.Message;
            }

            int currentPage = 1;
            if (TempData["CurrentPage"] != null)
                currentPage = (int)TempData["CurrentPage"];

            if(bolret == false)
            {
                TempData["ErrorMessage"] = errMessage;
                ModelState.AddModelError("", errMessage);
                return View(item);
            }
            else
            {
                TempData["SuccessMessage"] = item.Name + " Saved Successfully";
                return RedirectToAction(nameof(Index), new { pg = currentPage });
            }
        }

        [HttpGet]
        public IActionResult Delete(int id)
        {
            Materials item = _repo.GetItem(id);
            ViewBag.Units = GetUnitList();
            ViewBag.Suppliers = GetSupplierList();
            TempData.Keep("CurrentPage");
            return View(item);
        }

        [HttpPost]
        public IActionResult Delete(Materials item)
        {
            try
            {
                item = _repo.Delete(item);
            }
            catch(Exception ex)
            {
                string errMessage = ex.Message;
                TempData["ErrorMessage"] = errMessage;
                ModelState.AddModelError("", errMessage);
                return View(item);

            }

            int currentPage = 1;
            if (TempData["CurrentPage"] != null)
                currentPage = (int)TempData["CurrentPage"];

            TempData["SuccessMessage"] = item.Name + " Deleted Successfully";

            return RedirectToAction(nameof(Index), new { pg = currentPage });

        }

        private List<SelectListItem>GetUnitList()
        {
            var list = new List<SelectListItem>();
            PaginatedList<Unit> units = _unitRepo.GetItems("Name", SortOrder.Ascending, "", 1, 100);
            list = units.Select(u => new SelectListItem()
                {
                Value = u.Id.ToString(),
                Text = u.Name
            }).ToList();

            var define = new SelectListItem()
            {
                Value = "",
                Text = " Select Unit"
            };

            list.Insert(0,define);
            return list;
        }

        private List<SelectListItem> GetSupplierList()
        {
            var list = new List<SelectListItem>();
            PaginatedList<Suppliers> suppliers = _suppliersRepo.GetItems("Name", SortOrder.Ascending,"", 1, 100);
            list = suppliers.Select(s => new SelectListItem()
            {
                Value = s.Id.ToString(),
                Text = s.Name
            }).ToList();

            var define = new SelectListItem()
            {
                Value = "",
                Text = " Select Supplier"
            };

            list.Insert(0, define);
            return list;
        }




    }
}