participant registration
This commit is contained in:
parent
3e7663bbbe
commit
7c54dd5a69
@ -0,0 +1,32 @@
|
|||||||
|
using EnotaryoPH.Data;
|
||||||
|
using EnotaryoPH.Web.Common.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||||
|
|
||||||
|
namespace EnotaryoPH.Web.Pages
|
||||||
|
{
|
||||||
|
public abstract class BaseIdentificationDocumentPageModel : PageModel
|
||||||
|
{
|
||||||
|
protected readonly NotaryoDBContext _notaryoDBContext;
|
||||||
|
|
||||||
|
protected BaseIdentificationDocumentPageModel(NotaryoDBContext notaryoDBContext) => _notaryoDBContext = notaryoDBContext;
|
||||||
|
|
||||||
|
protected void CreateIdentificationDocument(Guid user_UID)
|
||||||
|
{
|
||||||
|
ArgumentOutOfRangeException.ThrowIfEqual(Guid.Empty, user_UID);
|
||||||
|
var user = _notaryoDBContext.Users.AsNoTracking().FirstOrDefault(u => u.User_UID == user_UID) ?? throw new ArgumentException("User does not exist.");
|
||||||
|
var entity = NewIdentificationDocument.ToEntity(user.UserID);
|
||||||
|
_notaryoDBContext.Add(entity);
|
||||||
|
_notaryoDBContext.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
[BindProperty(SupportsGet = true)]
|
||||||
|
public Guid IdentificationDocument_UID { get; set; }
|
||||||
|
|
||||||
|
[BindProperty]
|
||||||
|
public IdentificationDocumentModel NewIdentificationDocument { get; set; }
|
||||||
|
|
||||||
|
[BindProperty]
|
||||||
|
public bool UploadNewIdentification { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -9,10 +9,15 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
public class IndexModel : PageModel
|
public class IndexModel : PageModel
|
||||||
{
|
{
|
||||||
private readonly NotaryoDBContext _notaryoDBContext;
|
private readonly NotaryoDBContext _notaryoDBContext;
|
||||||
|
private readonly ISignInService _signInService;
|
||||||
|
|
||||||
public IndexModel(NotaryoDBContext notaryoDBContext) => _notaryoDBContext = notaryoDBContext;
|
public IndexModel(NotaryoDBContext notaryoDBContext, ISignInService signInService)
|
||||||
|
{
|
||||||
|
_notaryoDBContext = notaryoDBContext;
|
||||||
|
_signInService = signInService;
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult OnGet()
|
public async Task<IActionResult> OnGetAsync()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(InvitationCode))
|
if (string.IsNullOrEmpty(InvitationCode))
|
||||||
{
|
{
|
||||||
@ -20,7 +25,9 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
}
|
}
|
||||||
|
|
||||||
var invitationCodeGuid = InvitationCode.ToGuidFromBase64();
|
var invitationCodeGuid = InvitationCode.ToGuidFromBase64();
|
||||||
var signatory = _notaryoDBContext.TransactionSignatories.FirstOrDefault(e => e.InvitationCode == invitationCodeGuid.ToString() && e.Status == nameof(SignatoryStatus.New));
|
var signatory = _notaryoDBContext.TransactionSignatories
|
||||||
|
.Include(e => e.Transaction)
|
||||||
|
.FirstOrDefault(e => e.InvitationCode == invitationCodeGuid.ToString() && (e.Status == nameof(SignatoryStatus.New) || e.Status == nameof(SignatoryStatus.Registered)));
|
||||||
if (signatory == null)
|
if (signatory == null)
|
||||||
{
|
{
|
||||||
return NotFound();
|
return NotFound();
|
||||||
@ -33,7 +40,15 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
signatory.UserID = existingUser.UserID;
|
signatory.UserID = existingUser.UserID;
|
||||||
_notaryoDBContext.Update(signatory);
|
_notaryoDBContext.Update(signatory);
|
||||||
_notaryoDBContext.SaveChanges();
|
_notaryoDBContext.SaveChanges();
|
||||||
return Redirect("Steps/UploadIdentification");
|
|
||||||
|
await _signInService.SignInAsync(new UserLogin
|
||||||
|
{
|
||||||
|
Email = existingUser.Email,
|
||||||
|
Role = existingUser.Role,
|
||||||
|
User_UID = existingUser.User_UID.Value
|
||||||
|
});
|
||||||
|
|
||||||
|
return Redirect($"Steps/UploadIdentification/{signatory.Transaction.Transaction_UID}");
|
||||||
}
|
}
|
||||||
|
|
||||||
TransactionSignatory_UID = signatory.TransactionSignatory_UID.GetValueOrDefault();
|
TransactionSignatory_UID = signatory.TransactionSignatory_UID.GetValueOrDefault();
|
||||||
@ -41,7 +56,7 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult OnPost()
|
public async Task<IActionResult> OnPostAsync()
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
@ -54,7 +69,8 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
var signatory = _notaryoDBContext.TransactionSignatories.FirstOrDefault(e => e.TransactionSignatory_UID == TransactionSignatory_UID && e.Status == nameof(SignatoryStatus.New));
|
var signatory = _notaryoDBContext.TransactionSignatories
|
||||||
|
.FirstOrDefault(e => e.TransactionSignatory_UID == TransactionSignatory_UID && e.Status == nameof(SignatoryStatus.New));
|
||||||
if (signatory == null)
|
if (signatory == null)
|
||||||
{
|
{
|
||||||
return BadRequest();
|
return BadRequest();
|
||||||
@ -81,7 +97,14 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
|||||||
_notaryoDBContext.Update(signatory);
|
_notaryoDBContext.Update(signatory);
|
||||||
_notaryoDBContext.SaveChanges();
|
_notaryoDBContext.SaveChanges();
|
||||||
|
|
||||||
return Redirect("Steps/UploadIdentification");
|
await _signInService.SignInAsync(new UserLogin
|
||||||
|
{
|
||||||
|
Email = newUser.Email,
|
||||||
|
Role = newUser.Role,
|
||||||
|
User_UID = newUser.User_UID.Value
|
||||||
|
});
|
||||||
|
|
||||||
|
return Redirect($"Steps/UploadIdentification/{signatory.Transaction.Transaction_UID}");
|
||||||
}
|
}
|
||||||
|
|
||||||
[BindProperty(SupportsGet = true)]
|
[BindProperty(SupportsGet = true)]
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
@page "{Transaction_UID:guid}"
|
||||||
|
@model EnotaryoPH.Web.Pages.Participant.Registration.Steps.TakeSelfieModel
|
||||||
|
@{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<section class="my-5">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Registration Steps</h1>
|
||||||
|
<div class="mt-3">
|
||||||
|
<ul id="transactionwizardnav" class="nav nav-pills nav-justified d-block d-sm-flex" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<a class="nav-link disabled" role="tab" data-bs-toggle="pill" href="#tab-1">
|
||||||
|
<div><span class="badge rounded-pill fs-6 me-1">STEP 1</span></div><span class="text-dark step-text">Choose Identification</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<a class="nav-link disabled active" role="tab" data-bs-toggle="pill" href="#" style="border-bottom-width: 3px;border-bottom-color: var(--bs-body-color);">
|
||||||
|
<div class="text-dark"><span class="badge rounded-pill fs-6 me-1">STEP 2</span></div><span class="text-dark step-text">Take Selfie</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content mt-3"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<form class="mt-3">
|
||||||
|
<div class="ratio ratio-16x9"><iframe allowfullscreen frameborder="0" src="https://www.youtube.com/embed/d1CT5wr0I1c" width="560" height="315"></iframe></div>
|
||||||
|
</form>
|
||||||
|
<div class="d-flex mt-3">
|
||||||
|
<a class="btn btn-secondary btn-lg me-1" role="button" href="dashboard.html"><i class="fas fa-camera me-2"></i>TAKE PICTURE</a><a class="btn btn-secondary btn-lg" role="button" href="dashboard.html"><i class="fas fa-redo-alt me-2"></i>AGAIN</a>
|
||||||
|
<div class="flex-grow-1"></div><button class="btn btn-primary btn-lg" type="button" data-bs-target="#modal-message" data-bs-toggle="modal">NEXT<i class="fas fa-chevron-right ms-2"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
@ -0,0 +1,15 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||||
|
|
||||||
|
namespace EnotaryoPH.Web.Pages.Participant.Registration.Steps
|
||||||
|
{
|
||||||
|
public class TakeSelfieModel : PageModel
|
||||||
|
{
|
||||||
|
public void OnGet()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[BindProperty(SupportsGet = true)]
|
||||||
|
public Guid Transaction_UID { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,106 +1,46 @@
|
|||||||
@page
|
@page "{Transaction_UID:guid}"
|
||||||
|
@using EnotaryoPH.Web.Pages.Shared.Components.NotaryoSteps
|
||||||
|
@using EnotaryoPH.Web.Pages.Shared.Components.UploadOrChooseIdentificationDocument
|
||||||
@model EnotaryoPH.Web.Pages.Participant.Registration.Steps.UploadIdentificationModel
|
@model EnotaryoPH.Web.Pages.Participant.Registration.Steps.UploadIdentificationModel
|
||||||
|
|
||||||
<section class="mt-5 mb-2">
|
@section Head {
|
||||||
|
<link href="\lib\fontawesome-free-6.7.1-web\css\all.min.css" rel="stylesheet" />
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="my-5">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>Registration Steps</h1>
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h1>Notaryo Steps</h1>
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<ul id="transactionwizardnav" class="nav nav-pills nav-justified d-block d-sm-flex" role="tablist">
|
@await Component.InvokeAsync("NotaryoSteps", new
|
||||||
<li class="nav-item" role="presentation">
|
{
|
||||||
<a class="nav-link active" role="tab" data-bs-toggle="pill" href="#tab-1">
|
NotaryoSteps = new List<NotaryoStep>()
|
||||||
<div><span class="badge rounded-pill fs-6 me-1">STEP 1</span></div><span class="text-dark step-text">Choose Identification</span>
|
{
|
||||||
</a>
|
new NotaryoStep { Name = "Upload Identification", Step = 1, IsActive = true },
|
||||||
</li>
|
new NotaryoStep { Name = "Take Selfie", Step = 2 }
|
||||||
<li class="nav-item" role="presentation">
|
}
|
||||||
<a class="nav-link disabled" role="tab" data-bs-toggle="pill" href="#" style="border-bottom-width: 3px;border-bottom-color: var(--bs-body-color);">
|
})
|
||||||
<div class="text-dark"><span class="badge rounded-pill fs-6 me-1">STEP 2</span></div><span class="text-dark step-text">Take Selfie</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div class="tab-content mt-3"></div>
|
<div class="tab-content mt-3"></div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<form class="mt-4" id="UploadIdentificationForm" method="post" enctype="multipart/form-data">
|
||||||
<div class="row mt-4 mb-3">
|
|
||||||
<div class="col">
|
@await Component.InvokeAsync("UploadOrChooseIdentificationDocument", Model.Transaction_UID)
|
||||||
<div class="d-flex">
|
<div class="d-flex mt-3">
|
||||||
<div class="form-check me-2"><input id="checkUpload" class="form-check-input" type="radio" checked value="UploadNew" name="NewOrOld" /><label class="form-check-label me-3" for="checkUpload">Upload a new Identification Document</label></div>
|
<div class="flex-grow-1"></div>
|
||||||
<div class="form-check"><input id="checkUseExisting" class="form-check-input" type="radio" value="UseExisting" name="NewOrOld" /><label class="form-check-label" for="checkUseExisting">Use any of the existing Identification Documents</label></div>
|
<button class="btn btn-primary btn-lg wizard__nextbutton" type="submit">NEXT<i class="fas fa-chevron-right ms-2"></i></button>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-4">
|
|
||||||
<div class="col-12 col-lg-4">
|
|
||||||
<div class="card" data-bss-baguettebox>
|
|
||||||
<a href="cody passport.webp"><img class="card-img w-100 d-block fit-cover rounded-top" src="cody passport.webp" style="height: 300px;" /></a>
|
|
||||||
<div class="card-body p-2">
|
|
||||||
<p class="card-text mb-1">passport-2024-12-07__final.jpg</p>
|
|
||||||
<div><button class="btn btn-secondary btn-sm me-1" type="button">Upload Photo<i class="fas fa-upload ms-1"></i></button></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 col-lg-7">
|
|
||||||
<div>
|
|
||||||
<label class="form-label">Type</label><select class="form-select">
|
|
||||||
<option value="12" selected>Driver's License</option>
|
|
||||||
<option value="13">This is item 2</option>
|
|
||||||
<option value="14">This is item 3</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-lg-7">
|
|
||||||
<div class="mb-3"><label class="form-label">ID Number</label><input class="form-control" type="text" /></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 col-lg-7">
|
|
||||||
<div class="mb-3"><label class="form-label">Place Issued</label><input class="form-control" type="text" /></div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-lg-7">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 col-sm-6">
|
|
||||||
<div class="mb-3"><label class="form-label">Expiration Date</label><input id="name-1" class="form-control" name="name" placeholder="Name" value="2024-11-30" type="date" /></div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-sm-6">
|
|
||||||
<div class="mb-3"><label class="form-label">Date Issued</label><input id="name-4" class="form-control" name="name" placeholder="Name" value="2024-11-30" type="date" /></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-4">
|
|
||||||
<div class="col">
|
|
||||||
<h4>Existing Identification Documents</h4>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Identification Document Type</th>
|
|
||||||
<th>Uploaded On</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Driver's License</td>
|
|
||||||
<td>2024-11-31</td>
|
|
||||||
<td><button class="btn btn-danger btn-sm identificationdocument__delete__button" type="button"><i class="fas fa-times me-1"></i><span class="d-none d-md-inline-block">Delete</span></button></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Passport</td>
|
|
||||||
<td>2024-12-17</td>
|
|
||||||
<td><button class="btn btn-danger btn-sm" type="button"><i class="fas fa-times me-1"></i><span class="d-none d-md-inline-block">Delete</span></button></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex mt-4">
|
|
||||||
<div class="flex-grow-1"></div><a class="btn btn-primary btn-lg" role="button" href="/participant/onboardingwizard2_selfie.html">NEXT<i class="fas fa-chevron-right ms-2"></i></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||||
|
<partial name="_ValidationScriptsPartial" />
|
||||||
|
<script src="/dist/js/jfa.min.js"></script>
|
||||||
|
<script src="/js/identification-document.js"></script>
|
||||||
|
<script src="~/Pages/Participant/Registration/Steps/UploadIdentification.cshtml.js" asp-append-version="true"></script>
|
||||||
|
}
|
@ -1,12 +1,36 @@
|
|||||||
|
using EnotaryoPH.Data;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
||||||
|
|
||||||
namespace EnotaryoPH.Web.Pages.Participant.Registration.Steps
|
namespace EnotaryoPH.Web.Pages.Participant.Registration.Steps
|
||||||
{
|
{
|
||||||
public class UploadIdentificationModel : PageModel
|
public class UploadIdentificationModel : BaseIdentificationDocumentPageModel
|
||||||
{
|
{
|
||||||
|
private readonly ICurrentUserService _currentUserService;
|
||||||
|
|
||||||
|
public UploadIdentificationModel(NotaryoDBContext notaryoDBContext, ICurrentUserService currentUserService)
|
||||||
|
: base(notaryoDBContext) => _currentUserService = currentUserService;
|
||||||
|
|
||||||
public void OnGet()
|
public void OnGet()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> OnPostAsync()
|
||||||
|
{
|
||||||
|
if (UploadNewIdentification)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
return Page();
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateIdentificationDocument(_currentUserService.GetUser_UID());
|
||||||
|
}
|
||||||
|
|
||||||
|
return Redirect($"../TakeSelfie/{Transaction_UID}");
|
||||||
|
}
|
||||||
|
|
||||||
|
[BindProperty(SupportsGet = true)]
|
||||||
|
public Guid Transaction_UID { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
"use strict";
|
||||||
|
(function () {
|
||||||
|
const
|
||||||
|
control_existingDocumentsContainer = document.getElementById("ExistingDocumentsContainer"),
|
||||||
|
control_newIdentificationDocumentContainer = document.getElementById("NewIdentificationDocumentContainer"),
|
||||||
|
control_uploadNewIdentificationRadios = document.getElementsByName("UploadNewIdentification");
|
||||||
|
|
||||||
|
function _bindEvents() {
|
||||||
|
|
||||||
|
control_uploadNewIdentificationRadios.forEach(radio => {
|
||||||
|
radio.addEventListener("change", _radioOptionChanged)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function _init() {
|
||||||
|
_bindEvents();
|
||||||
|
|
||||||
|
_radioOptionChanged(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _radioOptionChanged(sender) {
|
||||||
|
let uploadNewIdentificationDocument = sender?.target?.value ?? "true";
|
||||||
|
if (uploadNewIdentificationDocument === "true") {
|
||||||
|
jfa.utilities.element.hide(control_existingDocumentsContainer);
|
||||||
|
jfa.utilities.element.show(control_newIdentificationDocumentContainer)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
jfa.utilities.element.show(control_existingDocumentsContainer);
|
||||||
|
jfa.utilities.element.hide(control_newIdentificationDocumentContainer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_init();
|
||||||
|
})();
|
@ -3,7 +3,6 @@ using EnotaryoPH.Web.Common.Models;
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
||||||
{
|
{
|
||||||
@ -37,7 +36,6 @@ namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
|||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreAntiforgeryToken]
|
|
||||||
public async Task<IActionResult> OnPostAsync()
|
public async Task<IActionResult> OnPostAsync()
|
||||||
{
|
{
|
||||||
if (UploadNewIdentification)
|
if (UploadNewIdentification)
|
||||||
@ -50,11 +48,6 @@ namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
|||||||
};
|
};
|
||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
var user = _notaryoDBContext.Users.AsNoTracking().FirstOrDefault(u => u.User_UID == _currentUserService.GetUser_UID());
|
|
||||||
var entity = NewIdentificationDocument.ToEntity(user.UserID);
|
|
||||||
_notaryoDBContext.Add(entity);
|
|
||||||
_notaryoDBContext.SaveChanges();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return RedirectToPage("/Principal/NotaryoSteps/TakeSelfie");
|
return RedirectToPage("/Principal/NotaryoSteps/TakeSelfie");
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
@model UploadOrChooseIdentificationDocumentModel
|
||||||
|
|
||||||
|
@if (Model.ExistingIdentificationDocuments.Count > 0)
|
||||||
|
{
|
||||||
|
<div class="row mt-4 mb-3">
|
||||||
|
<div class="col">
|
||||||
|
<div class="d-flex">
|
||||||
|
<div class="form-check me-2"><input asp-for="UploadNewIdentification" id="UploadNewIdentificationYes" class="form-check-input" type="radio" value="true" /> <label class="form-check-label me-3" for="UploadNewIdentificationYes">Upload a new Identification Document</label></div>
|
||||||
|
<div class="form-check me-2"><input asp-for="UploadNewIdentification" id="UploadNewIdentificationNah" class="form-check-input" type="radio" value="false" /><label class="form-check-label me-3" for="UploadNewIdentificationNah">Use any of the existing Identification Documents</label></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<input type="hidden" asp-for="UploadNewIdentification" />
|
||||||
|
}
|
||||||
|
|
||||||
|
<div id="NewIdentificationDocumentContainer">
|
||||||
|
@Html.EditorFor(m => m.NewIdentificationDocument)
|
||||||
|
</div>
|
||||||
|
@if (Model.ExistingIdentificationDocuments.Count > 0)
|
||||||
|
{
|
||||||
|
<div id="ExistingDocumentsContainer">
|
||||||
|
<div class="row mt-4">
|
||||||
|
<div class="col">
|
||||||
|
<h4>Existing Identification Documents</h4>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Identification Document Type</th>
|
||||||
|
<th>Expiration</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var id in Model.ExistingIdentificationDocuments)
|
||||||
|
{
|
||||||
|
<tr class="existingdocument__row">
|
||||||
|
<td>@id.IdentificationType</td>
|
||||||
|
<td>@id.ExpirationDate.Value.ToShortDateString()</td>
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-danger btn-sm identificationdocument__delete__button" type="button" data-uid="@id.IdentificationDocument_UID">
|
||||||
|
<i class="fas fa-times me-1"></i>
|
||||||
|
<span class="d-none d-md-inline-block">Delete</span>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<input type="hidden" asp-for="ExistingIdentificationDocumentCount" />
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
using EnotaryoPH.Data;
|
||||||
|
using EnotaryoPH.Web.Common.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
|
||||||
|
namespace EnotaryoPH.Web.Pages.Shared.Components.UploadOrChooseIdentificationDocument
|
||||||
|
{
|
||||||
|
public class UploadOrChooseIdentificationDocumentViewComponent : ViewComponent
|
||||||
|
{
|
||||||
|
private readonly ICurrentUserService _currentUserService;
|
||||||
|
private readonly NotaryoDBContext _notaryoDBContext;
|
||||||
|
|
||||||
|
public UploadOrChooseIdentificationDocumentViewComponent(NotaryoDBContext notaryoDBContext, ICurrentUserService currentUserService)
|
||||||
|
{
|
||||||
|
_notaryoDBContext = notaryoDBContext;
|
||||||
|
_currentUserService = currentUserService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IViewComponentResult> InvokeAsync(Guid transaction_UID)
|
||||||
|
{
|
||||||
|
var model = new UploadOrChooseIdentificationDocumentModel
|
||||||
|
{
|
||||||
|
ExistingIdentificationDocuments = [],
|
||||||
|
NewIdentificationDocument = new(),
|
||||||
|
UploadNewIdentification = true
|
||||||
|
};
|
||||||
|
var user = _notaryoDBContext.Users.AsNoTracking().FirstOrDefault(u => u.User_UID == _currentUserService.GetUser_UID());
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
model.ExistingIdentificationDocuments = GetIdentityDocumentsByUserID(user.UserID);
|
||||||
|
model.NewIdentificationDocument = new IdentificationDocumentModel
|
||||||
|
{
|
||||||
|
IdentificationTypes = GetIdentificationDocumentTypes()
|
||||||
|
};
|
||||||
|
model.UploadNewIdentification = true;
|
||||||
|
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SelectListItem> GetIdentificationDocumentTypes()
|
||||||
|
{
|
||||||
|
var lookupIdentificationTypes = _notaryoDBContext.LookupData.AsNoTracking().Include(e => e.LookupDataValues).FirstOrDefault(e => e.Name == "Identification Types");
|
||||||
|
return lookupIdentificationTypes.LookupDataValues
|
||||||
|
.ConvertAll(m => new SelectListItem
|
||||||
|
{
|
||||||
|
Text = m.Title.DefaultIfEmpty(m.Value),
|
||||||
|
Value = m.Value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<IdentificationDocumentModel> GetIdentityDocumentsByUserID(int userID)
|
||||||
|
=> _notaryoDBContext.IdentificationDocuments
|
||||||
|
.AsNoTracking()
|
||||||
|
.Where(d => d.UserID == userID)
|
||||||
|
.Select(d => new IdentificationDocumentModel(d)).ToList();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
using EnotaryoPH.Web.Common.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace EnotaryoPH.Web.Pages.Shared.Components.UploadOrChooseIdentificationDocument
|
||||||
|
{
|
||||||
|
public class UploadOrChooseIdentificationDocumentModel
|
||||||
|
{
|
||||||
|
public int ExistingIdentificationDocumentCount => ExistingIdentificationDocuments.Count;
|
||||||
|
|
||||||
|
public List<IdentificationDocumentModel> ExistingIdentificationDocuments { get; set; } = [];
|
||||||
|
|
||||||
|
[BindProperty]
|
||||||
|
public IdentificationDocumentModel NewIdentificationDocument { get; set; }
|
||||||
|
|
||||||
|
[BindProperty]
|
||||||
|
public bool UploadNewIdentification { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -18,8 +18,13 @@ namespace EnotaryoPH.Web
|
|||||||
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||||
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
|
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||||
options => options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Login"));
|
options => options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Login"));
|
||||||
builder.Services.AddAuthorization(options => options.AddPolicy("PrincipalPolicy", policy => policy.RequireRole("Principal")));
|
builder.Services.AddAuthorization(options => options.AddPolicy("PrincipalPolicy", policy => policy.RequireRole(nameof(UserType.Principal))));
|
||||||
var razorBuilder = builder.Services.AddRazorPages(options => options.Conventions.AuthorizeFolder("/Principal", "PrincipalPolicy"));
|
builder.Services.AddAuthorization(options => options.AddPolicy("ParticipantPolicy", policy => policy.RequireRole(nameof(UserType.Witness), nameof(UserType.Principal))));
|
||||||
|
var razorBuilder = builder.Services.AddRazorPages(options =>
|
||||||
|
{
|
||||||
|
options.Conventions.AuthorizeFolder("/Principal", "PrincipalPolicy");
|
||||||
|
options.Conventions.AuthorizeFolder("/Participant/Registration/Steps", "ParticipantPolicy");
|
||||||
|
});
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
razorBuilder.AddRazorRuntimeCompilation();
|
razorBuilder.AddRazorRuntimeCompilation();
|
||||||
#endif
|
#endif
|
||||||
@ -34,7 +39,6 @@ namespace EnotaryoPH.Web
|
|||||||
{
|
{
|
||||||
BaseUrl = config.GetValue<string>("BaseUrl") ?? ""
|
BaseUrl = config.GetValue<string>("BaseUrl") ?? ""
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.Services.AddTransient<ISignInService, SignInService>();
|
builder.Services.AddTransient<ISignInService, SignInService>();
|
||||||
builder.Services.AddTransient<IPasswordService, PasswordService>();
|
builder.Services.AddTransient<IPasswordService, PasswordService>();
|
||||||
builder.Services.AddTransient<ICurrentUserService, CurrentUserService>();
|
builder.Services.AddTransient<ICurrentUserService, CurrentUserService>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user