using Brizco.Domain.Entities.Task; using System.Linq; using Brizco.Domain.Entities.Routine; using Brizco.Domain.Entities.Shift; using Task = Brizco.Domain.Entities.Task.Task; namespace Brizco.Core.CoreServices; public class PageService : IPageService { private readonly ICurrentUserService _currentUserService; private readonly IRepositoryWrapper _repositoryWrapper; private readonly RoleManager _roleManager; public PageService( ICurrentUserService currentUserService, IRepositoryWrapper repositoryWrapper, RoleManager roleManager) { _currentUserService = currentUserService; _repositoryWrapper = repositoryWrapper; _roleManager = roleManager; } public async Task GetAppDashboardAsync(CancellationToken cancellationToken) { if (_currentUserService.UserId == null) throw new AppException("User id is null "); if (Guid.TryParse(_currentUserService.UserId, out Guid userId)!) throw new AppException("User id is wrong"); if (Guid.TryParse(_currentUserService.ComplexId, out Guid complexId)!) throw new AppException("Complex id is wrong"); var todayTasks = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(a => a.UserId == userId) .ToListAsync(cancellationToken); var page = new AppDashboardPageDto { DoneActivitiesToday = todayTasks.Count(t => t.IsDone), TotalActivitiesToday = todayTasks.Count, UnDoneActivitiesToday = todayTasks.Count(t => t.IsDone!) }; if (_currentUserService.Permissions != null) { int totalStepCount = 0; int completeStepCount = 0; string currentStep = string.Empty; if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageRoutines)) { totalStepCount++; var hasRoutine = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r=>r.ComplexId== complexId, cancellationToken); if(hasRoutine) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش روتین ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageSections)) { totalStepCount++; var hasSection = await _repositoryWrapper.SetRepository
() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasSection) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش سکشن ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManagePositions)) { totalStepCount++; var hasPosition = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasPosition) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش پوزیشن ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageStaffs)) { totalStepCount++; var hasStaff = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasStaff) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش کاربر ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageShifts)) { totalStepCount++; var hasShift = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasShift) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش شیفت ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageTasks)) { totalStepCount++; var hasTask = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasTask) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش تسک ها"; } } if (_currentUserService.Permissions.Exists(s => s == ApplicationPermission.ManageShiftPlans)) { totalStepCount++; var hasStaff = await _repositoryWrapper.SetRepository() .TableNoTracking .AnyAsync(r => r.ComplexId == complexId, cancellationToken); if (hasStaff) completeStepCount++; else { if (currentStep.IsNullOrEmpty()) currentStep = "تکمیل بخش شیفت بندی ها"; } } page.SignUpCompletePercent = ((totalStepCount * 100) / completeStepCount); page.CurrentSignUpStep = currentStep; } return page; } }