diff --git a/Marco.Pms.Services/Controllers/EmployeeController.cs b/Marco.Pms.Services/Controllers/EmployeeController.cs index 08396e6..d654746 100644 --- a/Marco.Pms.Services/Controllers/EmployeeController.cs +++ b/Marco.Pms.Services/Controllers/EmployeeController.cs @@ -159,6 +159,135 @@ namespace MarcoBMS.Services.Controllers if (model == null) return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); + if (model.FirstName == null && model.PhoneNumber == null) + return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); + + string responsemessage = ""; + + if (model.Email != null) + { + // Check if user already exists by email + IdentityUser? existingUser = await _userHelper.GetRegisteredUser(model.Email); + var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == model.Id && e.IsActive == true); + var demo = existingUser != new IdentityUser(); + if (existingUser != null) + { + /* Identity user Exists - Create/update employee Employee */ + + // Update Employee record + existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Email == model.Email && e.Id == model.Id && e.IsActive == true); + if (existingEmployee != null) + { + existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser); + + _context.Employees.Update(existingEmployee); + await _context.SaveChangesAsync(); + responsemessage = "User updated successfully."; + } + else + { + // Create Employee record if missing + //Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id); + //_context.Employees.Add(newEmployee); + return Conflict(ApiResponse.ErrorResponse("Email already exist", "Email already exist", 409)); + } + + + } + else + { + var user = new ApplicationUser + { + UserName = model.Email, + Email = model.Email, + EmailConfirmed = true, + TenantId = tenantId + + }; + + // Create Identity User + var result = await _userManager.CreateAsync(user, "User@123"); + if (!result.Succeeded) + return Ok(ApiResponse.ErrorResponse("Failed to create user", result.Errors, 400)); + + if (existingEmployee == null) + { + Employee newEmployee = GetNewEmployeeModel(model, tenantId, user.Id); + _context.Employees.Add(newEmployee); + + await _context.SaveChangesAsync(); + + + /* SEND USER REGISTRATION MAIL*/ + var token = await _userManager.GeneratePasswordResetTokenAsync(user); + var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; + if (newEmployee.FirstName != null) + { + await _emailSender.SendResetPasswordEmailOnRegister(user.Email, newEmployee.FirstName, resetLink); + } + + } + else + { + existingEmployee.Email = model.Email; + existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser); + + _context.Employees.Update(existingEmployee); + await _context.SaveChangesAsync(); + + + /* SEND USER REGISTRATION MAIL*/ + var token = await _userManager.GeneratePasswordResetTokenAsync(user); + var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; + if (existingEmployee.FirstName != null) + { + await _emailSender.SendResetPasswordEmailOnRegister(user.Email, existingEmployee.FirstName, resetLink); + } + + } + + + responsemessage = "User created successfully. Password reset link is sent to registered email"; + } + } + else + { + var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == model.Id && e.IsActive == true); + if (existingEmployee != null) + { + existingEmployee = GetUpdateEmployeeModel(model, existingEmployee); + _context.Employees.Update(existingEmployee); + responsemessage = "User updated successfully."; + } + else + { + // Create Employee record if missing + Employee newEmployee = GetNewEmployeeModel(model, tenantId, string.Empty); + _context.Employees.Add(newEmployee); + } + try + { + await _context.SaveChangesAsync(); + } + catch (Exception ex) + { + return BadRequest(ex.InnerException?.Message ?? ex.Message); + } + responsemessage = "User created successfully."; + + } + return Ok(ApiResponse.SuccessResponse("Success.", responsemessage, 200)); + } + [HttpPost("manage-mobile")] + public async Task CreateUserMoblie([FromBody] CreateUserDto model) + { + Guid tenantId = _userHelper.GetTenantId(); + if (model == null) + return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); + + if (model.FirstName == null && model.PhoneNumber == null) + return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); + string responsemessage = ""; if (model.Email != null)