139 lines
5.9 KiB
C#

using EnotaryoPH.Data;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using NsEntities = EnotaryoPH.Data.Entities;
namespace EnotaryoPH.Web.Pages.Principal.IdentificationDocument
{
public class IdentificationDocumentModel : PageModel
{
private readonly ICurrentUserService _currentUserService;
private readonly NotaryoDBContext _notaryoDBContext;
private readonly IWebHostEnvironment _webHostEnvironment;
public IdentificationDocumentModel(IWebHostEnvironment webHostEnvironment, NotaryoDBContext notaryoDBContext, ICurrentUserService currentUserService)
{
_webHostEnvironment = webHostEnvironment;
_notaryoDBContext = notaryoDBContext;
_currentUserService = currentUserService;
}
public IActionResult OnGet()
{
if (IdentificationDocument_UID != Guid.Empty)
{
var user = _notaryoDBContext.Users.AsNoTracking().FirstOrDefault(u => u.User_UID == _currentUserService.GetUser_UID());
var document = _notaryoDBContext.IdentificationDocuments.AsNoTracking().FirstOrDefault(d => d.IdentificationDocument_UID == IdentificationDocument_UID && d.UserID == user.UserID);
if (document == null)
{
return NotFound();
}
IdentificationDocument = new Common.Models.IdentificationDocumentModel(document);
}
else
{
var defaultImageFilename = $"{_webHostEnvironment.WebRootPath}/images/image-white-on-gray-400x300.jpg";
using var stream = new MemoryStream(System.IO.File.ReadAllBytes(defaultImageFilename));
var formFile = new FormFile(stream, 0, stream.Length, "Untitled.jpg", "Untitled.jpg");
IdentificationDocument = new Common.Models.IdentificationDocumentModel
{
File = formFile,
ImageBase64Url = formFile.ToBase64StringUrl()
};
}
LoadIdentificationDocumentTypes();
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return PostbackPage();
}
if (IdentificationDocument.ExpirationDate <= DateTime.Now)
{
ModelState.AddModelError(FullName.Of(IdentificationDocument.ExpirationDate), "Your Identification Document has expired");
return PostbackPage();
}
if (IdentificationDocument.DateIssued > DateTime.Now)
{
ModelState.AddModelError(FullName.Of(IdentificationDocument.DateIssued), "Your Identification Document has not yet been issued");
return PostbackPage();
}
var user = _notaryoDBContext.Users.AsNoTracking().FirstOrDefault(u => u.User_UID == _currentUserService.GetUser_UID());
var entity = new NsEntities.IdentificationDocument();
if (IdentificationDocument_UID != Guid.Empty)
{
entity = _notaryoDBContext.IdentificationDocuments.FirstOrDefault(e => e.IdentificationDocument_UID == IdentificationDocument_UID && e.UserID == user.UserID);
if (entity == null)
{
return BadRequest();
}
}
entity.ExpirationDate = IdentificationDocument.ExpirationDate.ToUTC();
entity.DateIssued = IdentificationDocument.DateIssued.ToUTC();
entity.PlaceIssued = IdentificationDocument.PlaceIssued;
entity.IdNumber = IdentificationDocument.IdNumber;
entity.Type = IdentificationDocument.IdentificationType;
entity.UploadedOn = DateTime.UtcNow;
entity.UserID = user.UserID;
var file = IdentificationDocument.File;
var stream = new MemoryStream((int)file.Length);
file.CopyTo(stream);
entity.Filename = file.FileName;
entity.File = stream.ToArray();
if (entity.IdentificationDocumentID > 0)
{
_notaryoDBContext.Update(entity);
}
else
{
entity.CreatedOn = DateTime.UtcNow;
entity.IdentificationDocument_UID = Guid.NewGuid();
_notaryoDBContext.Add(entity);
}
_notaryoDBContext.SaveChanges();
return RedirectToPage("/Principal/Dashboard/Dashboard");
}
private IActionResult PostbackPage()
{
if (IdentificationDocument.File != null)
{
IdentificationDocument.ImageBase64Url = IdentificationDocument.File.ToBase64StringUrl();
//using var stream = IdentificationDocument.File.OpenReadStream();
//IdentificationDocument.File = new FormFile(stream, 0, stream.Length, IdentificationDocument.File.Name, IdentificationDocument.File.Name);
}
LoadIdentificationDocumentTypes();
return Page();
}
private void LoadIdentificationDocumentTypes()
{
var lookupIdentificationTypes = _notaryoDBContext.LookupData.AsNoTracking().Include(e => e.LookupDataValues).FirstOrDefault(e => e.Name == "Identification Types");
IdentificationDocument.IdentificationTypes = lookupIdentificationTypes.LookupDataValues
.ConvertAll(m => new SelectListItem
{
Text = m.Title.DefaultIfEmpty(m.Value),
Value = m.Value
});
}
[BindProperty]
public Common.Models.IdentificationDocumentModel IdentificationDocument { get; set; }
[BindProperty(SupportsGet = true)]
public Guid IdentificationDocument_UID { get; set; }
}
}