MaterialController.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Threading.Tasks;
  6. using GreenTree.Strohrmann.ERP.Core.Domain.Business;
  7. using GreenTree.Strohrmann.ERP.Core.Helper;
  8. using GreenTree.Strohrmann.ERP.Domain.Model;
  9. using GreenTree.Strohrmann.ERP.Services.Geolocator;
  10. using GreenTree.Strohrmann.ERP.Web.Extension;
  11. using GreenTree.Strohrmann.ERP.Web.Models.Business;
  12. using GreenTree.Strohrmann.ERP.Web.Models.Rights.User;
  13. using GreenTree.Strohrmann.ERP.Web.Models.Shared;
  14. using Microsoft.AspNetCore.Http;
  15. using Microsoft.AspNetCore.Mvc;
  16. namespace GreenTree.Strohrmann.ERP.Web.Controllers
  17. {
  18. public class MaterialController : Controller
  19. {
  20. #region DI fields
  21. // The global DbContext
  22. private readonly ERPDbContext _eRPDbContext;
  23. #endregion
  24. #region Ctor
  25. /// <summary>
  26. /// Initializes a new instance of the MaterialController class
  27. /// </summary>
  28. /// <param name="eRPDbContext">Global DbContext.</param>
  29. public MaterialController(ERPDbContext eRPDbContext)
  30. {
  31. _eRPDbContext = eRPDbContext;
  32. }
  33. #endregion
  34. #region Actions
  35. // GET: MaterialController
  36. public ActionResult Index()
  37. {
  38. var materials = _eRPDbContext.Materials
  39. .ToList()
  40. .Select(c => new MaterialModel(c));
  41. return View(materials);
  42. }
  43. // GET: MaterialController/Details/5
  44. public ActionResult Details(int id)
  45. {
  46. var material = _eRPDbContext.Materials
  47. .FirstOrDefault(c => c.Id == id);
  48. var materialModel = new MaterialModel(material);
  49. return View(materialModel);
  50. }
  51. // GET: MaterialController/Create
  52. public ActionResult Create()
  53. {
  54. ViewData.AddSelectList("AvailableUnits",
  55. _eRPDbContext.Units
  56. .OrderBy(u => u.Name),
  57. m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
  58. ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
  59. return View();
  60. }
  61. // POST: MaterialController/Create
  62. [HttpPost]
  63. [ValidateAntiForgeryToken]
  64. public ActionResult Create(MaterialModel model)
  65. {
  66. if (!ModelState.IsValid)
  67. {
  68. ViewData.AddSelectList("AvailableUnits",
  69. _eRPDbContext.Units
  70. .OrderBy(u => u.Name),
  71. m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
  72. ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
  73. return View(model);
  74. }
  75. var material = new Material
  76. {
  77. Name = model.Name,
  78. Description = model.Description,
  79. ItemNumber = model.ItemNumber,
  80. NetValue = Convert.ToDecimal(model.NetValue),
  81. Height = model.Height,
  82. Width = model.Width,
  83. Depth = model.Depth,
  84. DefaultUnit = _eRPDbContext.Units.Find(model.DefaultUnit.Id),
  85. PackageSize = model.PackageSize,
  86. Supplier = _eRPDbContext.Suppliers.Find(model.Supplier.Id),
  87. CreatedBy = User.Identity.Name,
  88. CreatedOn = DateTime.Now
  89. };
  90. _eRPDbContext.Materials.Add(material);
  91. _eRPDbContext.SaveChanges();
  92. return RedirectToAction(nameof(Index));
  93. }
  94. // GET: MaterialController/Edit/5
  95. public ActionResult Edit(int id)
  96. {
  97. ViewData.AddSelectList("AvailableUnits",
  98. _eRPDbContext.Units
  99. .OrderBy(u => u.Name),
  100. m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
  101. ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
  102. var material = _eRPDbContext.Materials
  103. .FirstOrDefault(c => c.Id == id);
  104. var materialModel = new MaterialModel(material);
  105. return View(materialModel);
  106. }
  107. // POST: MaterialController/Edit/5
  108. [HttpPost]
  109. [ValidateAntiForgeryToken]
  110. public ActionResult Edit(int id, MaterialModel model)
  111. {
  112. if (!ModelState.IsValid)
  113. {
  114. ViewData.AddSelectList("AvailableUnits",
  115. _eRPDbContext.Units
  116. .OrderBy(u => u.Name),
  117. m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
  118. ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
  119. return View(model);
  120. }
  121. var material = _eRPDbContext.Materials
  122. .FirstOrDefault(u => u.Id == id);
  123. material.Name = model.Name;
  124. material.Description = model.Description;
  125. material.ItemNumber = model.ItemNumber;
  126. material.NetValue = Convert.ToDecimal(model.NetValue);
  127. material.Height = model.Height;
  128. material.Width = model.Width;
  129. material.Depth = model.Depth;
  130. material.DefaultUnit = _eRPDbContext.Units.Find(model.DefaultUnit.Id);
  131. material.PackageSize = model.PackageSize;
  132. material.Supplier = _eRPDbContext.Suppliers.Find(model.Supplier.Id);
  133. material.ChangedBy = User.Identity.Name;
  134. material.ChangedOn = DateTime.Now;
  135. _eRPDbContext.SaveChanges();
  136. return RedirectToAction(nameof(Index));
  137. }
  138. // POST: MaterialController/Delete/5
  139. [HttpPost]
  140. [ValidateAntiForgeryToken]
  141. public ActionResult Delete(int id, IFormCollection collection)
  142. {
  143. var material = _eRPDbContext.Materials
  144. .FirstOrDefault(c => c.Id == id);
  145. _eRPDbContext.Materials.Remove(material);
  146. _eRPDbContext.SaveChanges();
  147. return RedirectToAction(nameof(Index));
  148. }
  149. #endregion
  150. #region Partials
  151. // POST: MaterialController/Search/*term*
  152. [HttpPost]
  153. public ActionResult Search(SearchModel search)
  154. {
  155. if (search == null)
  156. return new JsonResult(null);
  157. var result = new List<MaterialModel>();
  158. var words = search.SearchTerm.Split(' ');
  159. foreach (var word in words)
  160. {
  161. result.AddRange(
  162. _eRPDbContext.Materials
  163. .Where(c => c.Name.Contains(word, StringComparison.OrdinalIgnoreCase) ||
  164. c.ItemNumber.Contains(word, StringComparison.OrdinalIgnoreCase) ||
  165. c.Description.Contains(word, StringComparison.OrdinalIgnoreCase))
  166. .ToArray()
  167. .Select(m => new MaterialModel(m)));
  168. }
  169. return new JsonResult(
  170. result
  171. .GroupBy(m => m.Id)
  172. .Select(g => g.First()));
  173. }
  174. #endregion
  175. }
  176. }