139 lines
4.4 KiB
C#
139 lines
4.4 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using EnotaryoPH.Data;
|
|
using EnotaryoPH.Data.Entities;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
|
|
namespace EnotaryoPH.Web.Pages
|
|
{
|
|
public class RegisterModel : PageModel
|
|
{
|
|
private readonly NotaryoDBContext _notaryoDBContext;
|
|
private readonly IPasswordService _passwordService;
|
|
|
|
public RegisterModel(NotaryoDBContext notaryoDBContext, IPasswordService passwordService)
|
|
{
|
|
_notaryoDBContext = notaryoDBContext;
|
|
_passwordService = passwordService;
|
|
}
|
|
|
|
public void OnGet()
|
|
{
|
|
RoleType = nameof(UserType.Principal);
|
|
BirthDate = DateTime.Now.AddYears(-18);
|
|
}
|
|
|
|
public IActionResult OnPost()
|
|
{
|
|
if (!ModelState.IsValid)
|
|
{
|
|
return Page();
|
|
}
|
|
|
|
var hasDuplicateEmail = _notaryoDBContext.Users.Any(u => EF.Functions.Like(u.Email, Email));
|
|
if (hasDuplicateEmail)
|
|
{
|
|
ModelState.AddModelError(nameof(Email), "That email already exists in the database.");
|
|
return Page();
|
|
}
|
|
|
|
var today = DateTime.Now;
|
|
if (today.Year - BirthDate.Year < 18 || (today.Year - BirthDate.Year == 18 && BirthDate.Month < today.Month))
|
|
{
|
|
ModelState.AddModelError(nameof(BirthDate), "You must be 18 or older");
|
|
return Page();
|
|
}
|
|
|
|
var newUser = new User
|
|
{
|
|
BirthDate = new DateTime(BirthDate.Ticks, DateTimeKind.Utc),
|
|
Email = Email,
|
|
PasswordHash = _passwordService.HashPassword(Password),
|
|
PhoneNumber = PhoneNumber,
|
|
Role = RoleType,
|
|
User_UID = Guid.CreateVersion7(DateTime.UtcNow)
|
|
};
|
|
_notaryoDBContext.Users.Add(newUser);
|
|
|
|
if (RoleType == nameof(UserType.Notary))
|
|
{
|
|
var newLawyer = new Lawyer
|
|
{
|
|
User = newUser,
|
|
CommissionExpiration = new DateTime(CommissionExpiration.Value.Ticks, DateTimeKind.Utc),
|
|
CommissionNumber = CommissionNumber,
|
|
IBPNumber = IBPNumber,
|
|
MCLEComplianceNumber = MCLEComplianceNumber,
|
|
MCLEDate = MCLEDate.ToUTC(),
|
|
OfficeAddress = OfficeAddress,
|
|
PTRDate = PTRDate.ToUTC(),
|
|
PTRlocation = PTRLocation,
|
|
PTRNumber = PTRNumber,
|
|
Rollnumber = RollNumber,
|
|
Status = "New",
|
|
CreatedOn = DateTime.UtcNow,
|
|
Lawyer_UID = Guid.CreateVersion7(DateTime.UtcNow)
|
|
};
|
|
_notaryoDBContext.Lawyers.Add(newLawyer);
|
|
}
|
|
|
|
_notaryoDBContext.SaveChanges();
|
|
|
|
return RoleType == nameof(UserType.Principal)
|
|
? Redirect("/Principal/Dashboard/Dashboard")
|
|
: Redirect("/Notary/Dashboard/Dashboard");
|
|
}
|
|
|
|
[BindProperty]
|
|
public string Email { get; set; }
|
|
|
|
[BindProperty]
|
|
public string Password { get; set; }
|
|
|
|
[BindProperty]
|
|
[Compare(nameof(Password), ErrorMessage = "Passwords must match")]
|
|
public string ConfirmPassword { get; set; }
|
|
|
|
[BindProperty, Required]
|
|
public string PhoneNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public DateTime BirthDate { get; set; }
|
|
|
|
[BindProperty]
|
|
public string RoleType { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? RollNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? IBPNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? MCLEComplianceNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public DateTime? MCLEDate { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? PTRNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public DateTime? PTRDate { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? PTRLocation { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? CommissionNumber { get; set; }
|
|
|
|
[BindProperty]
|
|
public DateTime? CommissionExpiration { get; set; }
|
|
|
|
[BindProperty]
|
|
public string? OfficeAddress { get; set; }
|
|
|
|
[BindProperty]
|
|
public bool IsEighteenYearsOrOlder { get; set; }
|
|
}
|
|
} |