diff --git a/Marco.Pms.Services/Service/FirebaseService.cs b/Marco.Pms.Services/Service/FirebaseService.cs index 0d140d2..b17a665 100644 --- a/Marco.Pms.Services/Service/FirebaseService.cs +++ b/Marco.Pms.Services/Service/FirebaseService.cs @@ -1775,12 +1775,24 @@ namespace Marco.Pms.Services.Service await using var _context = await _dbContextFactory.CreateDbContextAsync(); using var scope = _serviceScopeFactory.CreateScope(); + var roleIds = await _context.RolePermissionMappings + .Where(rp => rp.FeaturePermissionId == PermissionsMaster.ViewDocument) + .Select(rp => rp.ApplicationRoleId).ToListAsync(); + var employeeIds = await _context.EmployeeRoleMappings + .Where(er => + roleIds.Contains(er.RoleId)) + .Select(er => er.EmployeeId) + .ToListAsync(); + + employeeIds.Add(employeeId); + var data = new Dictionary() { - { "Keyword", "Employee_Document_Modified" } + { "Keyword", "Employee_Document_Modified" }, + { "EmployeeId", employeeId.ToString() } }; - var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => ft.EmployeeId == employeeId && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync(); + var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => employeeIds.Contains(ft.EmployeeId) && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync(); await SendMessageToMultipleDevicesWithDataAsync(registrationTokensForNotification, notification, data); } @@ -1820,20 +1832,32 @@ namespace Marco.Pms.Services.Service .ToListAsync(); return employeeIds; }); + var viewDocumentForProjectEmployeeIdsTask = Task.Run(async () => + { + await using var dbContext = await _dbContextFactory.CreateDbContextAsync(); + var employeeIds = await dbContext.ProjectLevelPermissionMappings + .Where(pl => pl.ProjectId == projectId && pl.PermissionId == PermissionsMaster.ViewDocument) + .Select(pl => pl.EmployeeId) + .ToListAsync(); + return employeeIds; + }); - await Task.WhenAll(assignedEmployeeIdsTask, manageProjectEmployeeIdsTask, viewDocumentEmployeeIdsTask); + await Task.WhenAll(assignedEmployeeIdsTask, manageProjectEmployeeIdsTask, viewDocumentEmployeeIdsTask, viewDocumentForProjectEmployeeIdsTask); var assignedEmployeeIds = assignedEmployeeIdsTask.Result; var manageProjectEmployeeIds = manageProjectEmployeeIdsTask.Result; var viewDocumentEmployeeIds = viewDocumentEmployeeIdsTask.Result; + var viewDocumentForProjectEmployeeIds = viewDocumentForProjectEmployeeIdsTask.Result; assignedEmployeeIds.AddRange(manageProjectEmployeeIds); + assignedEmployeeIds.AddRange(viewDocumentForProjectEmployeeIds); var finalEmployeeIds = assignedEmployeeIds.Intersect(viewDocumentEmployeeIds).ToList(); var data = new Dictionary() { - { "Keyword", "Project_Document_Modified" } + { "Keyword", "Project_Document_Modified" }, + { "ProjectId", projectId.ToString() } }; var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => finalEmployeeIds.Contains(ft.EmployeeId) && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync();