using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Primitives; using ODCWeb.DataAccess.Data; using ODCWeb.DataAccess.Repository.IRepository; using ODCWeb.Models; using System.Drawing.Drawing2D; using System.Text.RegularExpressions; namespace ODCWeb.Areas.Staff.Controllers { [Area("Staff")] [Authorize(Roles = "Admin,Employee")] public class MLController: Controller { private readonly ApplicationDbContext _db; private readonly IUnitOfWork _unitOfWork; private readonly UserManager userManager; /* public static double? old_cost_total = 0;*/ public MLController(ApplicationDbContext applicationDbContext, UserManager userManager, IUnitOfWork unitOfWork) { _db = applicationDbContext; _unitOfWork = unitOfWork; this.userManager = userManager; } public IActionResult Index() { List materialss = _unitOfWork.Material.GetAll(includeProperties: "ODCProject").ToList(); /* var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}"); */ var location = new Uri($"{Request.Scheme}://{Request.Host}"); var url = location.AbsoluteUri; ViewBag.ReturnUrl = url; ViewBag.Data = "Materials"; return View(materialss); } #region API CALLS [HttpGet] public IActionResult GetAll() { List materialss = _unitOfWork.Material.GetAll(includeProperties: "ODCProject").ToList(); bool tik = false; List checker = new List(); ///to save objects (for comparison) List newmaterialss = new List(); ///to save final unique objects foreach (var item in materialss) { double tempp = item.Qty; List temp = _unitOfWork.Material.Where(u => u.Name == item.Name).ToList(); if (checker.Any(n => n.Name == item.Name) && checker.Any(b => b.ODCProjectId == item.ODCProjectId)) { // } else { foreach (var item2 in temp) { if (item2.ODCProjectId == item.ODCProjectId) { tik = true; item.Qty = item2.Qty + item.Qty; checker.Add(item); } } if (tik == true) { item.Qty = item.Qty - tempp; } newmaterialss.Add(item); } } return Json(new { data = newmaterialss }); } #endregion [HttpGet] public IActionResult AddMaterial(int? id) //*Combining Get controller for create and edit { ViewBag.TaskId = id; Material material = new() { }; /*List materials = _unitOfWork.DataMaterial.GetAll().ToList(); List material_names = new List(); foreach (var item in materials) { material_names.Add(item.Name); } ViewBag.MaterialNames = material_names;*/ ////////////////// IEnumerable MaterialList = _unitOfWork.DataMaterial.GetAll().Select(u => new SelectListItem { Text = u.Name, Value = u.DataMaterialId.ToString() }); ////////////////// ViewBag.MaterialNames = MaterialList; return View(material); } [HttpPost] public IActionResult AddMaterial(Material obj) //*Combining Post controller for create and edit { if (ModelState.IsValid) { bool checker = false; var temp = obj.Name; obj.Name = _unitOfWork.DataMaterial.Get(u => u.DataMaterialId.ToString() == temp).Name; obj.Unit_Cost = _unitOfWork.DataMaterial.Get(u => u.DataMaterialId.ToString() == temp).Unit_Cost; ActionTask taskkk = _unitOfWork.Task.Get(u => u.TaskId == obj.TaskId); double? newc = 0; double? oldc = 0; double? total = 0; newc = obj.Qty * obj.Unit_Cost; oldc = taskkk.Material_Cost; total = newc + oldc; taskkk.Material_Cost = total; _unitOfWork.Task.update(taskkk); _unitOfWork.save(); IEnumerable material = _unitOfWork.Material.Where(u => u.Name == obj.Name); foreach (var item in material) { if (item.TaskId == obj.TaskId) { checker = true; item.Qty = item.Qty + obj.Qty; _unitOfWork.Material.update(item); _unitOfWork.save(); } } if (checker == false) { ActionTask task = _unitOfWork.Task.Get(u => u.TaskId == obj.TaskId); FloorAction action = _unitOfWork.Action.Get(u => u.ActionId == task.ActionId); Floor floor = _unitOfWork.Floor.Get(u => u.FloorId == action.FloorId); ODCProject project = _unitOfWork.ODCProject.Get(u => u.Id == floor.ODCProjectId); obj.ODCProjectId = project.Id; obj.ActionId = action.ActionId; obj.FloorId = floor.FloorId; obj.Unit = "Not Given"; obj.ODCProject = _unitOfWork.ODCProject.Get(u => u.Id == obj.ODCProjectId); _unitOfWork.Material.Add(obj); _unitOfWork.save(); } TempData["success"] = "Material created successfully"; return RedirectToAction("TaskDetails", "ODCProject", new {id =obj.TaskId}); } else { TempData["error"] = "Something wrong"; return View(obj); } } [HttpGet] public IActionResult EditMaterial(int? id) { /* old_cost_total = 0;*/ Material material = _unitOfWork.Material.Get(u => u.MaterialId == id); ViewBag.TaskId = material.TaskId; /* old_cost_total = material.Qty * material.Unit_Cost;*/ return View(material); } [HttpPost] public IActionResult EditMaterial(Material obj) { if (ModelState.IsValid) { ActionTask taskk = _unitOfWork.Task.Get(u => u.TaskId == obj.TaskId); double? mat_cost = 0; IEnumerable materials = _unitOfWork.Material.Where(u => u.MaterialId == taskk.TaskId); if (materials.Any()) { foreach (var item in materials) { mat_cost = mat_cost + (item.Unit_Cost * item.Qty); } } taskk.Material_Cost = mat_cost; taskk.Mat_Lab = taskk.Material_Cost + taskk.Labor_Cost; _unitOfWork.Task.update(taskk); _unitOfWork.save(); _unitOfWork.Material.update(obj); _unitOfWork.save(); TempData["success"] = "Material updated successfully"; return RedirectToAction("TaskDetails", "ODCProject", new { id = obj.TaskId }); } else { TempData["error"] = "Something wrong"; return View(obj); } } public IActionResult DeleteMaterial(int? id) { Material material = _unitOfWork.Material.Get(u => u.MaterialId == id); ActionTask task = _unitOfWork.Task.Get(u => u.TaskId == material.TaskId); double? old_cost_total_2 = material.Qty * material.Unit_Cost; _unitOfWork.Material.Remove(material); _unitOfWork.save(); task.Material_Cost = task.Material_Cost - old_cost_total_2; _unitOfWork.Task.update(task); _unitOfWork.save(); TempData["success"] = "Material deleted successfully"; return RedirectToAction("TaskDetails", "ODCProject", new { id = material.TaskId }); } } }