diff --git a/.version b/.version index c8f5a9a..b40757e 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.2.3.1 \ No newline at end of file +0.2.3.2 \ No newline at end of file diff --git a/Brizco.Api/Brizco.Api.csproj b/Brizco.Api/Brizco.Api.csproj index 34f9939..7158b34 100644 --- a/Brizco.Api/Brizco.Api.csproj +++ b/Brizco.Api/Brizco.Api.csproj @@ -6,8 +6,8 @@ enable Linux ..\docker-compose.dcproj - 0.2.3.1 - 0.2.3.1 + 0.2.3.2 + 0.2.3.2 diff --git a/Brizco.Core/EntityServices/ActivityService.cs b/Brizco.Core/EntityServices/ActivityService.cs index edecafe..c2eaf70 100644 --- a/Brizco.Core/EntityServices/ActivityService.cs +++ b/Brizco.Core/EntityServices/ActivityService.cs @@ -3,6 +3,7 @@ using Brizco.Domain.Entities.Shift; using Brizco.Domain.Entities.Task; using System.Threading.Tasks; using Brizco.Domain.Mappers; +using Task = Brizco.Domain.Entities.Task.Task; namespace Brizco.Core.EntityServices; @@ -11,7 +12,7 @@ public class ActivityService : IActivityService private readonly IMediator _mediator; private readonly IRepositoryWrapper _repositoryWrapper; - public ActivityService(IMediator mediator,IRepositoryWrapper repositoryWrapper) + public ActivityService(IMediator mediator, IRepositoryWrapper repositoryWrapper) { _mediator = mediator; _repositoryWrapper = repositoryWrapper; @@ -38,10 +39,10 @@ public class ActivityService : IActivityService { var activity = await _repositoryWrapper.SetRepository().TableNoTracking .FirstOrDefaultAsync(a => a.Id == activityRequestDto.ActivityId, cancellationToken); - if(activity==null) + if (activity == null) continue; - activity.CompleteActivity(activityRequestDto.IsCompleted,activityRequestDto.PerformanceDescription); + activity.CompleteActivity(activityRequestDto.IsCompleted, activityRequestDto.PerformanceDescription); _repositoryWrapper.SetRepository().Update(activity); await _repositoryWrapper.SaveChangesAsync(cancellationToken); } @@ -50,7 +51,7 @@ public class ActivityService : IActivityService } - public async Task UnDoneActivityAsync(Guid activityId,string undoneReason, CancellationToken cancellationToken) + public async Task UnDoneActivityAsync(Guid activityId, string undoneReason, CancellationToken cancellationToken) { var activity = await _repositoryWrapper.SetRepository() .TableNoTracking @@ -70,20 +71,35 @@ public class ActivityService : IActivityService if (shiftPlan.Id == Guid.Empty) return false; - var tasks = await _repositoryWrapper.SetRepository() - .ExecuteCommand( - $@"SELECT t.""Id"", t.""Amount"", t.""AmountType"", t.""ComplexId"", -t.""CreatedAt"", t.""CreatedBy"", t.""Description"", t.""Discriminator"", t.""HasDisposed"", t.""IsDisposable"", t.""IsRemoved"", t.""ModifiedAt"", -t.""ModifiedBy"", t.""RemovedAt"", t.""RemovedBy"", t.""ScheduleType"", t.""SetFor"", t.""Title"", t.""Type"", t.""DoneAt"", t.""IsDone"", -t.""PerformanceDescription"", t.""ShiftId"", t.""Status"", t.""UserId"" , t.""IsActivity"" , t.""UnDoneReason"" -FROM public.""Tasks"" t -INNER JOIN public.""TaskShifts"" t1 ON t.""Id"" = t1.""TaskId"" -INNER JOIN public.""TaskDays"" t2 ON t.""Id"" = t1.""TaskId"" -INNER JOIN public.""TaskRoutines"" t3 ON t.""Id"" = t1.""TaskId"" -AND {shiftPlan.ShiftId} = t1.""ShiftId"" -AND {shiftPlan.RoutineId} = t3.""RoutineId"" -AND {shiftPlan.PlanFor.DayOfWeek} = t2.""DayOfWeek"" -GROUP BY t.""Id""").AsNoTracking().ToListAsync(cancellationToken); + var dailyTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && task.ScheduleType == TaskScheduleType.Daily + select task).AsNoTracking().ToListAsync(cancellationToken); + + var weeklyTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskDay in _repositoryWrapper.SetRepository().Entities on task.Id equals taskDay.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && + taskDay.DayOfWeek == shiftPlan.PlanFor.DayOfWeek && task.ScheduleType == TaskScheduleType.Weekly + group task by task.Id into groupedTask + select groupedTask.FirstOrDefault()).AsNoTracking().ToListAsync(cancellationToken); + + var customTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && + task.ScheduleType == TaskScheduleType.Custom && task.SetFor.Date == shiftPlan.PlanFor.Date + select task).AsNoTracking().ToListAsync(cancellationToken); + + var tasks = new List(); + tasks.AddRange(weeklyTasks); + tasks.AddRange(dailyTasks); + tasks.AddRange(customTasks); var shiftPlanPositions = await _repositoryWrapper.SetRepository() .TableNoTracking @@ -110,40 +126,56 @@ GROUP BY t.""Id""").AsNoTracking().ToListAsync(cancellationToken); foreach (var taskPosition in taskPositions) { var foundedUser = shiftPlanPositions.FirstOrDefault(spu => spu.PositionId == taskPosition.PositionId); - if(foundedUser == null) + if (foundedUser == null) continue; if (activity.UserId != foundedUser.UserId) { - await _mediator.Send(new UpdateActivityCommand(activity.Id,activity.Status,activity.DoneAt,activity.PerformanceDescription, - activity.Type,activity.Title,activity.Description,activity.IsDisposable,activity.SetFor,activity.HasDisposed,activity.Amount - ,activity.AmountType,activity.ScheduleType,shiftPlan.ShiftId,foundedUser.UserId), cancellationToken); + await _mediator.Send(new UpdateActivityCommand(activity.Id, activity.Status, activity.DoneAt, activity.PerformanceDescription, + activity.Type, activity.Title, activity.Description, activity.IsDisposable, activity.SetFor, activity.HasDisposed, activity.Amount + , activity.AmountType, activity.ScheduleType, shiftPlan.ShiftId, foundedUser.UserId), cancellationToken); } } } return true; } - public async Task CreateActivitiesByShiftPlan(Guid shiftPlanId,CancellationToken cancellationToken) + public async Task CreateActivitiesByShiftPlan(Guid shiftPlanId, CancellationToken cancellationToken) { var shiftPlan = await _mediator.Send(new GetShiftPlanQuery(shiftPlanId), cancellationToken); if (shiftPlan.Id == Guid.Empty) return false; - var tasks = await _repositoryWrapper.SetRepository() - .ExecuteCommand( - $@"SELECT t.""Id"", t.""Amount"", t.""AmountType"", t.""ComplexId"", -t.""CreatedAt"", t.""CreatedBy"", t.""Description"", t.""Discriminator"", t.""HasDisposed"", t.""IsDisposable"", t.""IsRemoved"", t.""ModifiedAt"", -t.""ModifiedBy"", t.""RemovedAt"", t.""RemovedBy"", t.""ScheduleType"", t.""SetFor"", t.""Title"", t.""Type"", t.""DoneAt"", t.""IsDone"", -t.""PerformanceDescription"", t.""ShiftId"", t.""Status"", t.""UserId"" , t.""IsActivity"" , t.""UnDoneReason"" -FROM public.""Tasks"" t -INNER JOIN public.""TaskShifts"" t1 ON t.""Id"" = t1.""TaskId"" -INNER JOIN public.""TaskDays"" t2 ON t.""Id"" = t1.""TaskId"" -INNER JOIN public.""TaskRoutines"" t3 ON t.""Id"" = t1.""TaskId"" -AND {shiftPlan.ShiftId} = t1.""ShiftId"" -AND {shiftPlan.RoutineId} = t3.""RoutineId"" -AND {shiftPlan.PlanFor.DayOfWeek} = t2.""DayOfWeek"" -GROUP BY t.""Id""").AsNoTracking().ToListAsync(cancellationToken); + var dailyTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && task.ScheduleType == TaskScheduleType.Daily + select task).AsNoTracking().ToListAsync(cancellationToken); + + var weeklyTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskDay in _repositoryWrapper.SetRepository().Entities on task.Id equals taskDay.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && + taskDay.DayOfWeek == shiftPlan.PlanFor.DayOfWeek && task.ScheduleType == TaskScheduleType.Weekly + group task by task.Id into groupedTask + select groupedTask.FirstOrDefault()).AsNoTracking().ToListAsync(cancellationToken); + + var customTasks = await (from task in _repositoryWrapper.SetRepository().Entities + join taskShift in _repositoryWrapper.SetRepository().Entities on task.Id equals taskShift.TaskId + join taskRoutine in _repositoryWrapper.SetRepository().Entities on task.Id equals taskRoutine + .TaskId + where taskShift.ShiftId == shiftPlan.ShiftId && taskRoutine.RoutineId == shiftPlan.RoutineId && + task.ScheduleType == TaskScheduleType.Custom && task.SetFor.Date == shiftPlan.PlanFor.Date + select task).AsNoTracking().ToListAsync(cancellationToken); + + var tasks = new List(); + tasks.AddRange(weeklyTasks); + tasks.AddRange(dailyTasks); + tasks.AddRange(customTasks); + var shiftPlanPositions = await _repositoryWrapper.SetRepository() .TableNoTracking @@ -163,8 +195,8 @@ GROUP BY t.""Id""").AsNoTracking().ToListAsync(cancellationToken); if (fundedUser != null) { await _mediator.Send(new CreateActivityCommand(task.Type, task.Title, task.Description, task.IsDisposable, - shiftPlan.PlanFor, task.HasDisposed, task.Amount, task.AmountType, - task.ScheduleType, shiftPlan.ShiftId, fundedUser.UserId),cancellationToken); + shiftPlan.PlanFor, task.HasDisposed, task.Amount, task.AmountType, + task.ScheduleType, shiftPlan.ShiftId, fundedUser.UserId), cancellationToken); } } } diff --git a/Brizco.Core/EntityServices/UserService.cs b/Brizco.Core/EntityServices/UserService.cs index ad8a417..b0091c3 100644 --- a/Brizco.Core/EntityServices/UserService.cs +++ b/Brizco.Core/EntityServices/UserService.cs @@ -1,5 +1,6 @@ using System.Security.Claims; using Brizco.Domain.CommandQueries.Queries; +using Brizco.Domain.Entities.Complex; using Brizco.Domain.Mappers; using Mapster; @@ -58,6 +59,25 @@ public class UserService : IUserService response.Permissions = roleClaims.Where(c => c.Type == "Permission").Select(c => c.Value).ToList(); } } + else + { + var complexUserRole = complexUsers.FirstOrDefault(); + if (complexUserRole != null) + { + user.SelectedComplexUserRoleId = complexUserRole.Id; + await _userManager.UpdateAsync(user); + userSDto.SelectedComplexName = complexUserRole!.ComplexName; + userSDto.SelectedRoleName = complexUserRole!.RoleName; + response.User.SelectedRoleId = complexUserRole!.Id; + var role = await _roleManager.FindByIdAsync(complexUserRole.RoleId.ToString()); + if (role != null) + { + var roleClaims = await _roleManager.GetClaimsAsync(role); + response.Permissions = roleClaims.Where(c => c.Type == "Permission").Select(c => c.Value).ToList(); + } + } + + } response.Roles = complexUsers; return response;