Compare commits
40 Commits
6ae2912a52
...
04d6c03b05
Author | SHA1 | Date | |
---|---|---|---|
04d6c03b05 | |||
e50eedc7e6 | |||
![]() |
5034da19cd | ||
![]() |
3fce6ef499 | ||
eba230723b | |||
69a4ad7286 | |||
212fe250c1 | |||
a42a924884 | |||
bec60cd24e | |||
c17b5df8d0 | |||
a9124e1a93 | |||
f0ed430f37 | |||
c071b7ecaf | |||
![]() |
fce9832ea2 | ||
5e9dd55a07 | |||
368e186e36 | |||
97adf8b995 | |||
8056247008 | |||
a502be4977 | |||
4936a99e57 | |||
587530856a | |||
0674f84a2c | |||
c4dcd589db | |||
414bf7ece1 | |||
ac6f52ce16 | |||
7b0a1b0073 | |||
dd75f9a115 | |||
7fcb022ab3 | |||
bea2bcffb7 | |||
063441f322 | |||
5a4b46cb4f | |||
58526d5feb | |||
35da59304d | |||
2c3463b74f | |||
93a25690f1 | |||
b85bc3d62e | |||
8b4f892edf | |||
597d86aa27 | |||
354680d28b | |||
2a6ab929d9 |
@ -34,10 +34,11 @@ namespace Marco.Pms.Model.Mapper
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Project ToProjectFromUpdateProjectDto(this UpdateProjectDto projectModel, int TenantId)
|
public static Project ToProjectFromUpdateProjectDto(this UpdateProjectDto projectModel, int TenantId,int id)
|
||||||
{
|
{
|
||||||
return new Project
|
return new Project
|
||||||
{
|
{
|
||||||
|
Id = id,
|
||||||
ContactPerson = projectModel.ContactPerson,
|
ContactPerson = projectModel.ContactPerson,
|
||||||
ProjectAddress = projectModel.ProjectAddress,
|
ProjectAddress = projectModel.ProjectAddress,
|
||||||
Name = projectModel.Name,
|
Name = projectModel.Name,
|
||||||
|
@ -38,17 +38,12 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
//var tenant = User.FindFirst("TenantId")?.Value;
|
//var tenant = User.FindFirst("TenantId")?.Value;
|
||||||
//return (tenant != null ? Convert.ToInt32(tenant) : 1);
|
//return (tenant != null ? Convert.ToInt32(tenant) : 1);
|
||||||
}
|
}
|
||||||
private int GetUserId()
|
|
||||||
{
|
|
||||||
var tenant = User.FindFirst("Id")?.Value;
|
|
||||||
return (tenant != null ? Convert.ToInt32(tenant) : 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("log/attendance/{attendanceid}")]
|
[HttpGet("log/attendance/{attendanceid}")]
|
||||||
|
|
||||||
public async Task<IActionResult> GetAttendanceLogById(int attendanceid)
|
public async Task<IActionResult> GetAttendanceLogById(int attendanceid)
|
||||||
{
|
{
|
||||||
int TenantId = GetUserId();
|
int TenantId = GetTenantId();
|
||||||
|
|
||||||
List<AttendanceLog> lstAttendance = await _context.AttendanceLogs.Where(c => c.AttendanceId == attendanceid && c.TenantId == TenantId).ToListAsync();
|
List<AttendanceLog> lstAttendance = await _context.AttendanceLogs.Where(c => c.AttendanceId == attendanceid && c.TenantId == TenantId).ToListAsync();
|
||||||
|
|
||||||
@ -59,7 +54,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
|
|
||||||
public async Task<IActionResult> GetAttendanceLogByEmployeeId(int employeeid, [FromQuery] string? date = null)
|
public async Task<IActionResult> GetAttendanceLogByEmployeeId(int employeeid, [FromQuery] string? date = null)
|
||||||
{
|
{
|
||||||
int TenantId = GetUserId();
|
int TenantId = GetTenantId();
|
||||||
DateOnly forDate = new DateOnly();
|
DateOnly forDate = new DateOnly();
|
||||||
|
|
||||||
if (date != null && DateOnly.TryParse(date, out forDate) == false)
|
if (date != null && DateOnly.TryParse(date, out forDate) == false)
|
||||||
@ -84,7 +79,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
|
|
||||||
public async Task<IActionResult> EmployeeAttendanceByDateRange([FromQuery] int projectId, [FromQuery] string? dateFrom = null, [FromQuery] string? dateTo = null)
|
public async Task<IActionResult> EmployeeAttendanceByDateRange([FromQuery] int projectId, [FromQuery] string? dateFrom = null, [FromQuery] string? dateTo = null)
|
||||||
{
|
{
|
||||||
int TenantId = GetUserId();
|
int TenantId = GetTenantId();
|
||||||
DateTime fromDate = new DateTime();
|
DateTime fromDate = new DateTime();
|
||||||
DateTime toDate = new DateTime();
|
DateTime toDate = new DateTime();
|
||||||
|
|
||||||
@ -149,9 +144,9 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("project/team")]
|
[HttpGet("project/team")]
|
||||||
|
|
||||||
public async Task<IActionResult> EmployeeAttendanceByProject([FromQuery] int projectId, [FromQuery] string? date = null)
|
public async Task<IActionResult> EmployeeAttendanceByProject([FromQuery] int projectId, [FromQuery] bool IncludeInActive, [FromQuery] string? date = null)
|
||||||
{
|
{
|
||||||
int TenantId = GetUserId();
|
int TenantId = GetTenantId();
|
||||||
DateTime forDate = new DateTime();
|
DateTime forDate = new DateTime();
|
||||||
|
|
||||||
if (date != null && DateTime.TryParse(date, out forDate) == false)
|
if (date != null && DateTime.TryParse(date, out forDate) == false)
|
||||||
@ -172,7 +167,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
List<Attendance> lstAttendance = await _context.Attendes.Where(c => c.ProjectID == projectId && c.AttendanceDate.Date == forDate && c.TenantId == TenantId).ToListAsync();
|
List<Attendance> lstAttendance = await _context.Attendes.Where(c => c.ProjectID == projectId && c.AttendanceDate.Date == forDate && c.TenantId == TenantId).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
List<ProjectAllocation> projectteam = await _projectsHelper.GetTeamByProject(TenantId, projectId, true);
|
List<ProjectAllocation> projectteam = await _projectsHelper.GetTeamByProject(TenantId, projectId, IncludeInActive);
|
||||||
foreach (ProjectAllocation teamMember in projectteam)
|
foreach (ProjectAllocation teamMember in projectteam)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -219,6 +214,8 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
Attendance attendance = await _context.Attendes.FirstOrDefaultAsync(a => a.EmployeeID == recordAttendanceDot.EmployeeID &&
|
Attendance attendance = await _context.Attendes.FirstOrDefaultAsync(a => a.EmployeeID == recordAttendanceDot.EmployeeID &&
|
||||||
a.AttendanceDate.Date == recordAttendanceDot.Date.Date && a.TenantId == TenantId); ;
|
a.AttendanceDate.Date == recordAttendanceDot.Date.Date && a.TenantId == TenantId); ;
|
||||||
|
|
||||||
|
DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
||||||
|
|
||||||
|
|
||||||
if (attendance != null)
|
if (attendance != null)
|
||||||
{
|
{
|
||||||
@ -236,13 +233,13 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
|
|
||||||
//string timeString = "10:30 PM"; // Format: "hh:mm tt"
|
//string timeString = "10:30 PM"; // Format: "hh:mm tt"
|
||||||
|
|
||||||
DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
||||||
|
|
||||||
attendance.OutTime = finalDateTime;
|
attendance.OutTime = finalDateTime;
|
||||||
}
|
}
|
||||||
else if (recordAttendanceDot.Action == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE)
|
else if (recordAttendanceDot.Action == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE)
|
||||||
{
|
{
|
||||||
DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
||||||
|
|
||||||
attendance.OutTime = finalDateTime;
|
attendance.OutTime = finalDateTime;
|
||||||
attendance.Activity = ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE;
|
attendance.Activity = ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE;
|
||||||
@ -277,7 +274,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
attendance.Date = DateTime.UtcNow;
|
attendance.Date = DateTime.UtcNow;
|
||||||
|
|
||||||
|
|
||||||
DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
|
||||||
|
|
||||||
attendance.InTime = finalDateTime;
|
attendance.InTime = finalDateTime;
|
||||||
attendance.OutTime = null;
|
attendance.OutTime = null;
|
||||||
@ -295,15 +292,15 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
AttendanceId = attendance.Id, // Use existing or new AttendanceId
|
AttendanceId = attendance.Id, // Use existing or new AttendanceId
|
||||||
Activity = attendance.Activity,
|
Activity = attendance.Activity,
|
||||||
|
|
||||||
ActivityTime = recordAttendanceDot.Date,
|
ActivityTime = finalDateTime,
|
||||||
Comment = recordAttendanceDot.Comment,
|
Comment = recordAttendanceDot.Comment,
|
||||||
EmployeeID = recordAttendanceDot.EmployeeID,
|
EmployeeID = recordAttendanceDot.EmployeeID,
|
||||||
Latitude = recordAttendanceDot.Latitude,
|
Latitude = recordAttendanceDot.Latitude,
|
||||||
Longitude = recordAttendanceDot.Longitude,
|
Longitude = recordAttendanceDot.Longitude,
|
||||||
|
|
||||||
TenantId = TenantId,
|
TenantId = TenantId,
|
||||||
UpdatedBy = GetUserId(),
|
UpdatedBy = recordAttendanceDot.EmployeeID,
|
||||||
UpdatedOn = DateTime.UtcNow
|
UpdatedOn = recordAttendanceDot.Date
|
||||||
};
|
};
|
||||||
//if (recordAttendanceDot.Image != null && recordAttendanceDot.Image.Count > 0)
|
//if (recordAttendanceDot.Image != null && recordAttendanceDot.Image.Count > 0)
|
||||||
//{
|
//{
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Marco.Pms.Model.Authentication;
|
using Marco.Pms.DataAccess.Data;
|
||||||
|
using Marco.Pms.Model.Authentication;
|
||||||
using Marco.Pms.Model.Dtos;
|
using Marco.Pms.Model.Dtos;
|
||||||
using Marco.Pms.Model.Dtos.Util;
|
using Marco.Pms.Model.Dtos.Util;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
@ -21,13 +22,14 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
public class AuthController : ControllerBase
|
public class AuthController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly UserManager<IdentityUser> _userManager;
|
private readonly UserManager<IdentityUser> _userManager;
|
||||||
|
private readonly ApplicationDbContext _context;
|
||||||
private readonly JwtSettings _jwtSettings;
|
private readonly JwtSettings _jwtSettings;
|
||||||
private readonly RefreshTokenService _refreshTokenService;
|
private readonly RefreshTokenService _refreshTokenService;
|
||||||
private readonly IEmailSender _emailSender;
|
private readonly IEmailSender _emailSender;
|
||||||
private readonly IConfiguration _configuration;
|
private readonly IConfiguration _configuration;
|
||||||
private readonly EmployeeHelper _employeeHelper;
|
private readonly EmployeeHelper _employeeHelper;
|
||||||
//string tenentId = "1";
|
//string tenentId = "1";
|
||||||
public AuthController(UserManager<IdentityUser> userManager, JwtSettings jwtSettings, RefreshTokenService refreshTokenService,
|
public AuthController(UserManager<IdentityUser> userManager,ApplicationDbContext context, JwtSettings jwtSettings, RefreshTokenService refreshTokenService,
|
||||||
IEmailSender emailSender, IConfiguration configuration, EmployeeHelper employeeHelper)
|
IEmailSender emailSender, IConfiguration configuration, EmployeeHelper employeeHelper)
|
||||||
{
|
{
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
@ -36,21 +38,27 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
_emailSender = emailSender;
|
_emailSender = emailSender;
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_employeeHelper = employeeHelper;
|
_employeeHelper = employeeHelper;
|
||||||
|
_context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("login")]
|
[HttpPost("login")]
|
||||||
public async Task<IActionResult> Login([FromBody] LoginDto loginDto)
|
public async Task<IActionResult> Login([FromBody] LoginDto loginDto)
|
||||||
{
|
{
|
||||||
var user = await _userManager.FindByEmailAsync(loginDto.Username);
|
var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Email == loginDto.Username || u.PhoneNumber == loginDto.Username);
|
||||||
var user1 = await _userManager.Users.FirstOrDefaultAsync(u => u.Email == loginDto.Username || u.PhoneNumber == loginDto.Username);
|
|
||||||
|
|
||||||
|
|
||||||
if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password))
|
if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password))
|
||||||
{
|
{
|
||||||
return Unauthorized("Invalid username or password.");
|
return Unauthorized("Invalid username or password.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.IsActive)
|
||||||
|
{
|
||||||
|
return BadRequest("User is In Active");
|
||||||
|
}
|
||||||
|
if (!user.EmailConfirmed)
|
||||||
|
{
|
||||||
|
return BadRequest("Your email is not verified, Please verify your email");
|
||||||
|
}
|
||||||
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
|
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
|
||||||
//var refreshToken = GenerateRefreshToken();
|
//var refreshToken = GenerateRefreshToken();
|
||||||
|
|
||||||
@ -162,12 +170,28 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
UserManager<ApplicationUser>.ResetPasswordTokenPurpose,
|
UserManager<ApplicationUser>.ResetPasswordTokenPurpose,
|
||||||
WebUtility.UrlDecode( model.Token)
|
WebUtility.UrlDecode( model.Token)
|
||||||
);
|
);
|
||||||
|
string token = "";
|
||||||
|
|
||||||
if (!isTokenValid)
|
if (!isTokenValid)
|
||||||
return BadRequest("Invalid or expired token.");
|
{
|
||||||
|
var isDecodedTokenValid = await _userManager.VerifyUserTokenAsync(
|
||||||
|
user,
|
||||||
|
TokenOptions.DefaultProvider, // This is the token provider
|
||||||
|
UserManager<ApplicationUser>.ResetPasswordTokenPurpose,
|
||||||
|
model.Token
|
||||||
|
);
|
||||||
|
if(!isDecodedTokenValid)
|
||||||
|
return BadRequest("Invalid or expired token.");
|
||||||
|
|
||||||
var result = await _userManager.ResetPasswordAsync(user, WebUtility.UrlDecode(model.Token), model.NewPassword);
|
token = model.Token;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
token = WebUtility.UrlDecode(model.Token);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var result = await _userManager.ResetPasswordAsync(user, token, model.NewPassword);
|
||||||
if (!result.Succeeded)
|
if (!result.Succeeded)
|
||||||
return BadRequest(result.Errors);
|
return BadRequest(result.Errors);
|
||||||
|
|
||||||
|
@ -182,23 +182,24 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
/* Identity user Exists - Create/update employee Employee */
|
/* Identity user Exists - Create/update employee Employee */
|
||||||
|
|
||||||
// Update Employee record
|
// Update Employee record
|
||||||
var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.ApplicationUserId == existingUser.Id || e.Email == model.Email || e.Id == model.Id);
|
var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Email == model.Email && e.Id == model.Id);
|
||||||
if (existingEmployee != null)
|
if (existingEmployee != null)
|
||||||
{
|
{
|
||||||
existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser);
|
existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser);
|
||||||
|
|
||||||
_context.Employees.Update(existingEmployee);
|
_context.Employees.Update(existingEmployee);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
responsemessage = "User updated successfully.";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Create Employee record if missing
|
// Create Employee record if missing
|
||||||
Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id);
|
//Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id);
|
||||||
_context.Employees.Add(newEmployee);
|
//_context.Employees.Add(newEmployee);
|
||||||
|
return BadRequest("You cannot use this email");
|
||||||
}
|
}
|
||||||
|
|
||||||
await _context.SaveChangesAsync();
|
|
||||||
|
|
||||||
responsemessage = "User updated successfully.";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -225,7 +226,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}";
|
var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}";
|
||||||
await _emailSender.SendResetPasswordEmailOnRegister(user.Email, newEmployee.FirstName, resetLink);
|
await _emailSender.SendResetPasswordEmailOnRegister(user.Email, newEmployee.FirstName, resetLink);
|
||||||
|
|
||||||
responsemessage = "User created successfully. PAssword reset link is sent to registered email";
|
responsemessage = "User created successfully. Password reset link is sent to registered email";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -197,7 +197,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
int TenantId = GetTenantId();
|
int TenantId = GetTenantId();
|
||||||
updateProjectDto.TenantId = TenantId;
|
updateProjectDto.TenantId = TenantId;
|
||||||
|
|
||||||
Project project = updateProjectDto.ToProjectFromUpdateProjectDto(TenantId);
|
Project project = updateProjectDto.ToProjectFromUpdateProjectDto(TenantId,id);
|
||||||
_context.Projects.Update(project);
|
_context.Projects.Update(project);
|
||||||
|
|
||||||
await _context.SaveChangesAsync();
|
await _context.SaveChangesAsync();
|
||||||
|
@ -64,8 +64,8 @@
|
|||||||
|
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
// "DefaultConnectionString": "Server=103.50.160.45;User ID=marcowvh_admin;Password=Marcoemp@123;Database=marcowvh_empattendanceci",
|
// "DefaultConnectionString": "Server=103.50.160.45;User ID=marcowvh_admin;Password=Marcoemp@123;Database=marcowvh_empattendanceci",
|
||||||
//"DefaultConnectionString": "Server=localhost;port=3333;User ID=root;Password=root;Database=MarcoBMS1",
|
"DefaultConnectionString": "Server=localhost;port=3306;User ID=root;Password=root;Database=MarcoBMS2",
|
||||||
"DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1"
|
//"DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1"
|
||||||
},
|
},
|
||||||
"AppSettings": {
|
"AppSettings": {
|
||||||
"WebFrontendUrl": "http://localhost:5173",
|
"WebFrontendUrl": "http://localhost:5173",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user