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 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; } } }