diff --git a/Marco.Pms.Services/Controllers/AttendanceController.cs b/Marco.Pms.Services/Controllers/AttendanceController.cs index 0fbc6b5..e0493af 100644 --- a/Marco.Pms.Services/Controllers/AttendanceController.cs +++ b/Marco.Pms.Services/Controllers/AttendanceController.cs @@ -562,7 +562,13 @@ namespace MarcoBMS.Services.Controllers Activity = attendance.Activity, JobRoleName = employee.JobRole.Name }; - await _signalR.Clients.All.SendAsync("Attendance", new { LoggedInUserId = currentEmployee.Id, ProjectId = recordAttendanceDot.ProjectID, Response = vm }); + var sendActivity = 0; + if (recordAttendanceDot.Id == Guid.Empty) + { + sendActivity = 1; + } + var notification = new { LoggedInUserId = currentEmployee.Id, Keyword = "Attendance", Activity = sendActivity, ProjectId = attendance.ProjectID, Response = vm }; + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); _logger.LogInfo("Attendance for employee {FirstName} {LastName} has been marked", employee.FirstName ?? string.Empty, employee.LastName ?? string.Empty); return Ok(ApiResponse.SuccessResponse(vm, "Attendance marked successfully.", 200)); } diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 18a790b..187497e 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -8,12 +8,13 @@ using Marco.Pms.Model.Projects; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Projects; +using Marco.Pms.Services.Hubs; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; namespace MarcoBMS.Services.Controllers { @@ -27,15 +28,18 @@ namespace MarcoBMS.Services.Controllers private readonly ILoggingService _logger; private readonly RolesHelper _rolesHelper; private readonly ProjectsHelper _projectsHelper; + private readonly IHubContext _signalR; - public ProjectController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger, RolesHelper rolesHelper, ProjectsHelper projectHelper) + public ProjectController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger, RolesHelper rolesHelper, ProjectsHelper projectHelper, IHubContext signalR) { _context = context; _userHelper = userHelper; _logger = logger; _rolesHelper = rolesHelper; _projectsHelper = projectHelper; + _signalR = signalR; + } [HttpGet("list/basic")] @@ -314,6 +318,7 @@ namespace MarcoBMS.Services.Controllers [HttpPost] public async Task Create([FromBody] CreateProjectDto projectDto) { + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); if (!ModelState.IsValid) { var errors = ModelState.Values @@ -330,6 +335,9 @@ namespace MarcoBMS.Services.Controllers _context.Projects.Add(project); await _context.SaveChangesAsync(); + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Project", Response = project.ToProjectDto() }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(project.ToProjectDto(), "Success.", 200)); } @@ -338,6 +346,7 @@ namespace MarcoBMS.Services.Controllers [Route("update/{id}")] public async Task Update([FromRoute] Guid id, [FromBody] UpdateProjectDto updateProjectDto) { + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); if (!ModelState.IsValid) { var errors = ModelState.Values @@ -356,6 +365,10 @@ namespace MarcoBMS.Services.Controllers await _context.SaveChangesAsync(); + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Project", Response = project.ToProjectDto() }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); + return Ok(ApiResponse.SuccessResponse(project.ToProjectDto(), "Success.", 200)); } @@ -365,7 +378,6 @@ namespace MarcoBMS.Services.Controllers } } - //[HttpPost("assign-employee")] //public async Task AssignEmployee(int? allocationid, int employeeId, int projectId) //{ @@ -576,6 +588,7 @@ namespace MarcoBMS.Services.Controllers public async Task CreateProjectTask(List workItemDot) { Guid tenantId = GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); List workItems = new List { }; string responseMessage = ""; if (workItemDot != null) @@ -607,6 +620,10 @@ namespace MarcoBMS.Services.Controllers } var activity = await _context.ActivityMasters.ToListAsync(); var category = await _context.WorkCategoryMasters.ToListAsync(); + + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Infra", Response = workItems }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(workItems, responseMessage, 200)); } @@ -618,6 +635,7 @@ namespace MarcoBMS.Services.Controllers public async Task DeleteProjectTask(Guid id) { Guid tenantId = _userHelper.GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); WorkItem? task = await _context.WorkItems.AsNoTracking().FirstOrDefaultAsync(t => t.Id == id && t.TenantId == tenantId); if (task != null) { @@ -629,6 +647,9 @@ namespace MarcoBMS.Services.Controllers _context.WorkItems.Remove(task); await _context.SaveChangesAsync(); _logger.LogInfo("Task with ID {WorkItemId} has been successfully deleted.", task.Id); + + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Infra", Response = id }; + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); } else { @@ -656,6 +677,8 @@ namespace MarcoBMS.Services.Controllers public async Task ManageProjectInfra(List infraDots) { Guid tenantId = GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var responseData = new InfraVM { }; string responseMessage = ""; if (infraDots != null) @@ -731,6 +754,9 @@ namespace MarcoBMS.Services.Controllers } } } + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Infra", Response = responseData }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(responseData, responseMessage, 200)); } return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Infra Details are not valid.", 400)); @@ -776,9 +802,6 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.SuccessResponse(projects, "Success.", 200)); } - - - [HttpPost("assign-projects/{employeeId}")] public async Task AssigneProjectsToEmployee([FromBody] List projectAllocationDtos, [FromRoute] Guid employeeId) {