From 5b2d9bc9957ed0cc85aabe76194118dd643a9c62 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 27 May 2020 22:40:59 +0100 Subject: [PATCH] Add document company creation in admin view. --- .../DocumentCompaniesController.cs | 159 ------------------ .../Views/DocumentCompanies/Create.cshtml | 42 ----- Marechai/Marechai.csproj | 3 +- Marechai/Pages/Admin/Details/Company.razor.cs | 3 +- .../Pages/Admin/Details/DocumentCompany.razor | 1 + .../Admin/Details/DocumentCompany.razor.cs | 37 +++- Marechai/Pages/Admin/DocumentCompanies.razor | 4 +- Marechai/Services/DocumentCompaniesService.cs | 13 ++ 8 files changed, 46 insertions(+), 216 deletions(-) delete mode 100644 Marechai/Areas/Admin/Controllers/DocumentCompaniesController.cs delete mode 100644 Marechai/Areas/Admin/Views/DocumentCompanies/Create.cshtml diff --git a/Marechai/Areas/Admin/Controllers/DocumentCompaniesController.cs b/Marechai/Areas/Admin/Controllers/DocumentCompaniesController.cs deleted file mode 100644 index 4e0704f4..00000000 --- a/Marechai/Areas/Admin/Controllers/DocumentCompaniesController.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Marechai.Areas.Admin.Models; -using Marechai.Database.Models; -using Marechai.ViewModels; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.EntityFrameworkCore; - -namespace Marechai.Areas.Admin.Controllers -{ - [Area("Admin"), Authorize] - public class DocumentCompaniesController : Controller - { - readonly MarechaiContext _context; - - public DocumentCompaniesController(MarechaiContext context) => _context = context; - - // GET: DocumentCompanies - public async Task Index() => View(await _context. - DocumentCompanies.OrderBy(c => c.Name). - Select(d => new DocumentCompanyViewModel - { - Id = d.Id, Name = d.Name, - Company = d.Company.Name, - CompanyId = d.CompanyId - }).ToListAsync()); - - // GET: DocumentCompanies/Details/5 - public async Task Details(int? id) - { - if(id == null) - return NotFound(); - - DocumentCompanyViewModel documentCompany = - await _context.DocumentCompanies.Select(d => new DocumentCompanyViewModel - { - Id = d.Id, Name = d.Name, Company = d.Company.Name, CompanyId = d.CompanyId - }).FirstOrDefaultAsync(m => m.Id == id); - - if(documentCompany == null) - return NotFound(); - - return View(documentCompany); - } - - // GET: DocumentCompanies/Create - public IActionResult Create() - { - ViewData["CompanyId"] = new SelectList(_context.Companies.OrderBy(c => c.Name).Select(c => new - { - c.Id, c.Name - }), "Id", "Name"); - - return View(); - } - - // POST: DocumentCompanies/Create - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Create([Bind("Name,CompanyId,Id")] DocumentCompany documentCompany) - { - if(!ModelState.IsValid) - return View(documentCompany); - - _context.Add(documentCompany); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - // GET: DocumentCompanies/Edit/5 - public async Task Edit(int? id) - { - if(id == null) - return NotFound(); - - DocumentCompany documentCompany = await _context.DocumentCompanies.FindAsync(id); - - if(documentCompany == null) - return NotFound(); - - ViewData["CompanyId"] = new SelectList(_context.Companies.OrderBy(c => c.Name).Select(c => new - { - c.Id, c.Name - }), "Id", "Name", documentCompany.CompanyId); - - return View(documentCompany); - } - - // POST: DocumentCompanies/Edit/5 - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Edit(int id, [Bind("Name,CompanyId,Id")] DocumentCompany documentCompany) - { - if(id != documentCompany.Id) - return NotFound(); - - if(ModelState.IsValid) - { - try - { - _context.Update(documentCompany); - await _context.SaveChangesAsync(); - } - catch(DbUpdateConcurrencyException) - { - if(!DocumentCompanyExists(documentCompany.Id)) - return NotFound(); - - throw; - } - - return RedirectToAction(nameof(Index)); - } - - ViewData["CompanyId"] = new SelectList(_context.Companies.OrderBy(c => c.Name).Select(c => new - { - c.Id, c.Name - }), "Id", "Name", documentCompany.CompanyId); - - return View(documentCompany); - } - - // GET: DocumentCompanies/Delete/5 - public async Task Delete(int? id) - { - if(id == null) - return NotFound(); - - DocumentCompanyViewModel documentCompany = - await _context.DocumentCompanies.Select(d => new DocumentCompanyViewModel - { - Id = d.Id, Name = d.Name, Company = d.Company.Name, CompanyId = d.CompanyId - }).FirstOrDefaultAsync(m => m.Id == id); - - if(documentCompany == null) - return NotFound(); - - return View(documentCompany); - } - - // POST: DocumentCompanies/Delete/5 - [HttpPost, ActionName("Delete"), ValidateAntiForgeryToken] - public async Task DeleteConfirmed(int id) - { - DocumentCompany documentCompany = await _context.DocumentCompanies.FindAsync(id); - _context.DocumentCompanies.Remove(documentCompany); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - bool DocumentCompanyExists(int id) => _context.DocumentCompanies.Any(e => e.Id == id); - } -} \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/DocumentCompanies/Create.cshtml b/Marechai/Areas/Admin/Views/DocumentCompanies/Create.cshtml deleted file mode 100644 index 1654dc16..00000000 --- a/Marechai/Areas/Admin/Views/DocumentCompanies/Create.cshtml +++ /dev/null @@ -1,42 +0,0 @@ -@model Marechai.Database.Models.DocumentCompany - -@{ - ViewData["Title"] = "Create"; -} -

Create

-

Document company

-
-
-
-
-
-
-
- - - - -
-
- - -
- -
-
-
- -@section Scripts { - @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } -} \ No newline at end of file diff --git a/Marechai/Marechai.csproj b/Marechai/Marechai.csproj index a216ed51..6c41b61e 100644 --- a/Marechai/Marechai.csproj +++ b/Marechai/Marechai.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 - 3.0.99.1241 + 3.0.99.1243 Canary Islands Computer Museum Copyright © 2003-2020 Natalia Portillo Canary Islands Computer Museum Website @@ -129,5 +129,6 @@ <_ContentIncludedByDefault Remove="Areas\Admin\Views\BrowserTests\Index.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\News\Delete.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\Companies\Create.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\DocumentCompanies\Create.cshtml" /> \ No newline at end of file diff --git a/Marechai/Pages/Admin/Details/Company.razor.cs b/Marechai/Pages/Admin/Details/Company.razor.cs index 95965089..be02e4c0 100644 --- a/Marechai/Pages/Admin/Details/Company.razor.cs +++ b/Marechai/Pages/Admin/Details/Company.razor.cs @@ -48,8 +48,7 @@ namespace Marechai.Pages.Admin.Details _creating = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). StartsWith("admin/companies/create", StringComparison.InvariantCulture); - if(Id <= 0 && - !_creating) + if(Id <= 0 && !_creating) return; _countries = await CountriesService.GetAsync(); diff --git a/Marechai/Pages/Admin/Details/DocumentCompany.razor b/Marechai/Pages/Admin/Details/DocumentCompany.razor index e8ca1673..1cf8942a 100644 --- a/Marechai/Pages/Admin/Details/DocumentCompany.razor +++ b/Marechai/Pages/Admin/Details/DocumentCompany.razor @@ -32,6 +32,7 @@ @page "/admin/document_companies/details/{Id:int}" @page "/admin/document_companies/edit/{Id:int}" +@page "/admin/document_companies/create" @inherits OwningComponentBase @inject IStringLocalizer L @inject CompaniesService CompaniesService diff --git a/Marechai/Pages/Admin/Details/DocumentCompany.razor.cs b/Marechai/Pages/Admin/Details/DocumentCompany.razor.cs index a0500217..6799b7e8 100644 --- a/Marechai/Pages/Admin/Details/DocumentCompany.razor.cs +++ b/Marechai/Pages/Admin/Details/DocumentCompany.razor.cs @@ -11,6 +11,7 @@ namespace Marechai.Pages.Admin.Details public partial class DocumentCompany { List _companies; + bool _creating; bool _editing; bool _loaded; DocumentCompanyViewModel _model; @@ -27,15 +28,20 @@ namespace Marechai.Pages.Admin.Details _loaded = true; - if(Id <= 0) + _creating = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). + StartsWith("admin/document_companies/create", + StringComparison.InvariantCulture); + + if(Id <= 0 && + !_creating) return; _companies = await CompaniesService.GetAsync(); - _model = await Service.GetAsync(Id); + _model = _creating ? new DocumentCompanyViewModel() : await Service.GetAsync(Id); - _editing = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). - StartsWith("admin/document_companies/edit/", - StringComparison.InvariantCulture); + _editing = _creating || NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). + StartsWith("admin/document_companies/edit/", + StringComparison.InvariantCulture); if(_editing) SetCheckboxes(); @@ -59,7 +65,15 @@ namespace Marechai.Pages.Admin.Details async void OnCancelClicked() { _editing = false; - _model = await Service.GetAsync(Id); + + if(_creating) + { + NavigationManager.ToBaseRelativePath("admin/document_companies"); + + return; + } + + _model = await Service.GetAsync(Id); SetCheckboxes(); StateHasChanged(); } @@ -76,9 +90,14 @@ namespace Marechai.Pages.Admin.Details else if(string.IsNullOrWhiteSpace(_model.Name)) return; - _editing = false; - await Service.UpdateAsync(_model); - _model = await Service.GetAsync(Id); + if(_creating) + Id = await Service.CreateAsync(_model); + else + await Service.UpdateAsync(_model); + + _editing = false; + _creating = false; + _model = await Service.GetAsync(Id); SetCheckboxes(); StateHasChanged(); } diff --git a/Marechai/Pages/Admin/DocumentCompanies.razor b/Marechai/Pages/Admin/DocumentCompanies.razor index 38fe38c5..f889a8e4 100644 --- a/Marechai/Pages/Admin/DocumentCompanies.razor +++ b/Marechai/Pages/Admin/DocumentCompanies.razor @@ -42,9 +42,7 @@ return; }

- - @L["Create new"] - + @L["Create new"]

diff --git a/Marechai/Services/DocumentCompaniesService.cs b/Marechai/Services/DocumentCompaniesService.cs index d898cedb..7c57b8d7 100644 --- a/Marechai/Services/DocumentCompaniesService.cs +++ b/Marechai/Services/DocumentCompaniesService.cs @@ -41,6 +41,19 @@ namespace Marechai.Services await _context.SaveChangesAsync(); } + public async Task CreateAsync(DocumentCompanyViewModel viewModel) + { + var model = new DocumentCompany + { + CompanyId = viewModel.CompanyId, Name = viewModel.Name + }; + + await _context.DocumentCompanies.AddAsync(model); + await _context.SaveChangesAsync(); + + return model.Id; + } + public async Task DeleteAsync(int id) { DocumentCompany item = await _context.DocumentCompanies.FindAsync(id);