using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Yavsc.Models; using Yavsc.Server.Models.IT; using Microsoft.AspNetCore.Authorization; using Yavsc.Server.Helpers; using Yavsc.Models.Workflow; using Yavsc.Models.Payment; using Yavsc.Server.Models.IT.SourceCode; using Microsoft.Extensions.Localization; using Microsoft.EntityFrameworkCore; namespace Yavsc.Controllers { [Authorize("AdministratorOnly")] public class ProjectController : Controller { private readonly ApplicationDbContext _context; readonly IStringLocalizer _localizer; readonly IStringLocalizer _bugLocalizer; public ProjectController(ApplicationDbContext context, IStringLocalizer localizer, IStringLocalizer bugLocalizer ) { _context = context; _localizer = localizer; _bugLocalizer = bugLocalizer; } // GET: Project public async Task Index() { var applicationDbContext = _context.Project.Include(p => p.Client).Include(p => p.Context).Include(p => p.PerformerProfile).Include(p => p.Regularisation).Include(p => p.Repository); return View(await applicationDbContext.ToListAsync()); } // GET: Project/Details/5 public async Task Details(long? id) { if (id == null) { return NotFound(); } Project project = await _context.Project.SingleAsync(m => m.Id == id); if (project == null) { return NotFound(); } return View(project); } // GET: Project/Create public IActionResult Create() { ViewBag.ClientIdItems = _context.ApplicationUser.CreateSelectListItems( u => u.Id, u => u.UserName); ViewBag.OwnerIdItems = _context.ApplicationUser.CreateSelectListItems( u => u.Id, u => u.UserName); ViewBag.ActivityCodeItems = _context.Activities.CreateSelectListItems( a => a.Code, a => a.Name); ViewBag.PerformerIdItems = _context.Performers.Include(p=>p.Performer).CreateSelectListItems(p => p.PerformerId, p => p.Performer.UserName); ViewBag.PaymentIdItems = _context.PayPalPayment.CreateSelectListItems (p => p.OrderReference, p => $"{p.Executor.UserName} {p.PaypalPayerId} {p.OrderReference}"); ViewBag.Status = _bugLocalizer.CreateSelectListItems(typeof(Yavsc.QueryStatus), Yavsc.QueryStatus.Inserted); ViewBag.RepositoryItems = _context.GitRepositoryReference.CreateSelectListItems( u => u.Id.ToString(), u => u.ToString()); return View(); } // POST: Project/Create [HttpPost] [ValidateAntiForgeryToken] public async Task Create(Project project) { if (ModelState.IsValid) { _context.Project.Add(project); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } ViewBag.ClientIdItems = _context.ApplicationUser.CreateSelectListItems( u => u.Id, u => u.UserName, project.ClientId); ViewBag.OwnerIdItems = _context.ApplicationUser.CreateSelectListItems( u => u.Id, u => u.UserName, project.OwnerId); ViewBag.ActivityCodeItems = _context.Activities.CreateSelectListItems( a => a.Code, a => a.Name, project.ActivityCode); ViewBag.PerformerIdItems = _context.Performers.Include(p=>p.Performer).CreateSelectListItems(p => p.PerformerId, p => p.Performer.UserName, project.PerformerId); ViewBag.PaymentIdItems = _context.PayPalPayment.CreateSelectListItems (p => p.OrderReference, p => $"{p.Executor.UserName} {p.PaypalPayerId} {p.OrderReference}", project.PaymentId); return View(project); } // GET: Project/Edit/5 public async Task Edit(long? id) { if (id == null) { return NotFound(); } Project project = await _context.Project.SingleAsync(m => m.Id == id); if (project == null) { return NotFound(); } /* ViewBag.ClientId = new SelectList(_context.ApplicationUser, "Id", "Client", project.ClientId); ViewBag.ActivityCodeItems = new SelectList(_context.Activities, "Code", "Context", project.ActivityCode); ViewBag.PerformerId = new SelectList(_context.Performers, "PerformerId", "PerformerProfile", project.PerformerId); ViewBag.PaymentId = new SelectList(_context.PayPalPayments, "CreationToken", "Regularisation", project.PaymentId); ViewBag.Name = new SelectList(_context.GitRepositoryReference, "Path", "Repository", project.Name); */ ViewBag.Status = Yavsc.Extensions.EnumExtensions.GetSelectList(typeof(QueryStatus), _localizer, project.Status); ViewBag.Repository = new SelectList(_context.GitRepositoryReference, "Path", "Repository", project.Repository); return View(project); } // POST: Project/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public async Task Edit(Project project) { if (ModelState.IsValid) { _context.Update(project); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } return View(project); } // GET: Project/Delete/5 [ActionName("Delete")] public async Task Delete(long? id) { if (id == null) { return NotFound(); } Project project = await _context.Project.SingleAsync(m => m.Id == id); if (project == null) { return NotFound(); } return View(project); } // POST: Project/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public async Task DeleteConfirmed(long id) { Project project = await _context.Project.SingleAsync(m => m.Id == id); _context.Project.Remove(project); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } } }