using System.ComponentModel.DataAnnotations; using EnotaryoPH.Data; using EnotaryoPH.Data.Entities; using EnotaryoPH.Web.Common.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; 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 = "Principal"; #if DEBUG RollNumber = "ROLL1234"; IBPNumber = "IBP1234"; MCLEComplianceNumber = "MCLE1234"; MCLEDate = new DateTime(2023, 1, 15, 0, 0, 0, DateTimeKind.Utc); PTRDate = new DateTime(2023, 1, 15, 0, 0, 0, DateTimeKind.Utc); PTRLocation = "ptr location"; PTRNumber = "PTR98723"; CommissionExpiration = new DateTime(2023, 1, 15, 0, 0, 0, DateTimeKind.Utc); CommissionLocation = "COMM LOC 8732"; CommissionNumber = "COMM NO 8392"; OfficeAddress = "123 Fictional Road, NY, Cubao"; PhoneNumber = "639151220001"; BirthDate = new DateTime(1979, 9, 10, 0, 0, 0, DateTimeKind.Utc); Password = "arst1234"; ConfirmPassword = "arst1234"; #endif } 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 newUser = new User { BirthDate = new DateTime(BirthDate.Ticks, DateTimeKind.Utc), Email = Email, PasswordHash = _passwordService.HashPassword(Password), PhoneNumber = PhoneNumber, Role = RoleType }; _notaryoDBContext.Users.Add(newUser); if (RoleType == "Notary Public") { var newLawyer = new Lawyer { User = newUser, CommissionExpiration = new DateTime(CommissionExpiration.Value.Ticks, DateTimeKind.Utc), CommissionLocation = CommissionLocation, CommissionNumber = CommissionNumber, IBPNumber = IBPNumber, MCLEComplianceNumber = MCLEComplianceNumber, MCLEDate = new DateTime(MCLEDate.Value.Ticks, DateTimeKind.Utc), OfficeAddress = OfficeAddress, PTRDate = new DateTime(PTRDate.Value.Ticks, DateTimeKind.Utc), PTRlocation = PTRLocation, PTRNumber = PTRNumber, Rollnumber = RollNumber, Status = "New" }; _notaryoDBContext.Lawyers.Add(newLawyer); } _notaryoDBContext.SaveChanges(); return RedirectToPage("/Principal/Dashboard"); } [BindProperty] public string Email { get; set; } [BindProperty] public string Password { get; set; } [BindProperty] [Compare(nameof(Password))] public string ConfirmPassword { get; set; } [BindProperty] 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? CommissionLocation { get; set; } [BindProperty] public string? OfficeAddress { get; set; } [BindProperty] public bool IsEighteenYearsOrOlder { get; set; } } }