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
|
||||
{
|
||||
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))
|
||||
{
|
||||
@ -20,7 +25,9 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
return NotFound();
|
||||
@ -33,7 +40,15 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
||||
signatory.UserID = existingUser.UserID;
|
||||
_notaryoDBContext.Update(signatory);
|
||||
_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();
|
||||
@ -41,7 +56,7 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
||||
return Page();
|
||||
}
|
||||
|
||||
public IActionResult OnPost()
|
||||
public async Task<IActionResult> OnPostAsync()
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
@ -54,7 +69,8 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
||||
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)
|
||||
{
|
||||
return BadRequest();
|
||||
@ -81,7 +97,14 @@ namespace EnotaryoPH.Web.Pages.Participant.Registration
|
||||
_notaryoDBContext.Update(signatory);
|
||||
_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)]
|
||||
|
@ -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
|
||||
|
||||
<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">
|
||||
<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 active" 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" 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>
|
||||
<div class="row mt-4 mb-3">
|
||||
<div class="col">
|
||||
<div class="d-flex">
|
||||
<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="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>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h1>Notaryo Steps</h1>
|
||||
<div class="mt-3">
|
||||
@await Component.InvokeAsync("NotaryoSteps", new
|
||||
{
|
||||
NotaryoSteps = new List<NotaryoStep>()
|
||||
{
|
||||
new NotaryoStep { Name = "Upload Identification", Step = 1, IsActive = true },
|
||||
new NotaryoStep { Name = "Take Selfie", Step = 2 }
|
||||
}
|
||||
})
|
||||
<div class="tab-content mt-3"></div>
|
||||
</div>
|
||||
<form class="mt-4" id="UploadIdentificationForm" method="post" enctype="multipart/form-data">
|
||||
|
||||
@await Component.InvokeAsync("UploadOrChooseIdentificationDocument", Model.Transaction_UID)
|
||||
<div class="d-flex mt-3">
|
||||
<div class="flex-grow-1"></div>
|
||||
<button class="btn btn-primary btn-lg wizard__nextbutton" type="submit">NEXT<i class="fas fa-chevron-right ms-2"></i></button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</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>
|
||||
</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.RazorPages;
|
||||
|
||||
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 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.RazorPages;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
||||
{
|
||||
@ -37,7 +36,6 @@ namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
||||
return Page();
|
||||
}
|
||||
|
||||
[IgnoreAntiforgeryToken]
|
||||
public async Task<IActionResult> OnPostAsync()
|
||||
{
|
||||
if (UploadNewIdentification)
|
||||
@ -50,11 +48,6 @@ namespace EnotaryoPH.Web.Pages.Principal.NotaryoSteps
|
||||
};
|
||||
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");
|
||||
|
@ -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)
|
||||
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
options => options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Login"));
|
||||
builder.Services.AddAuthorization(options => options.AddPolicy("PrincipalPolicy", policy => policy.RequireRole("Principal")));
|
||||
var razorBuilder = builder.Services.AddRazorPages(options => options.Conventions.AuthorizeFolder("/Principal", "PrincipalPolicy"));
|
||||
builder.Services.AddAuthorization(options => options.AddPolicy("PrincipalPolicy", policy => policy.RequireRole(nameof(UserType.Principal))));
|
||||
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
|
||||
razorBuilder.AddRazorRuntimeCompilation();
|
||||
#endif
|
||||
@ -34,7 +39,6 @@ namespace EnotaryoPH.Web
|
||||
{
|
||||
BaseUrl = config.GetValue<string>("BaseUrl") ?? ""
|
||||
});
|
||||
|
||||
builder.Services.AddTransient<ISignInService, SignInService>();
|
||||
builder.Services.AddTransient<IPasswordService, PasswordService>();
|
||||
builder.Services.AddTransient<ICurrentUserService, CurrentUserService>();
|
||||
|
Loading…
x
Reference in New Issue
Block a user