Api/Brizco.Core/CoreServices/PageService.cs

165 lines
6.9 KiB
C#
Raw Normal View History

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<ApplicationRole> _roleManager;
public PageService(
ICurrentUserService currentUserService,
IRepositoryWrapper repositoryWrapper,
RoleManager<ApplicationRole> roleManager)
{
_currentUserService = currentUserService;
_repositoryWrapper = repositoryWrapper;
_roleManager = roleManager;
}
public async Task<AppDashboardPageDto> 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<Activity>()
.TableNoTracking
.Where(a => a.ComplexId == complexId && a.SetFor.Date == DateTime.Today.Date)
.ToListAsync(cancellationToken);
var todayShiftPlans = await _repositoryWrapper.SetRepository<ShiftPlan>()
.TableNoTracking
.Where(a => a.PlanFor.Date == DateTime.Today.Date && a.ComplexId == complexId)
.Select(ShiftPlanMapper.ProjectToSDto)
.ToListAsync(cancellationToken);
var names = new List<string>();
names.AddRange(todayShiftPlans.SelectMany(sp => sp.Users).Select(s => s.UserFullName).ToList());
var page = new AppDashboardPageDto
{
DoneActivitiesToday = todayTasks.Count(t => t.IsDone),
TotalActivitiesToday = todayTasks.Count,
UnDoneActivitiesToday = todayTasks.Count(t => t.IsDone!),
TotalShiftToday = todayShiftPlans.Count,
TodayStaffNames = names,
TotalStaffToday = todayShiftPlans.SelectMany(sp => sp.Users).Count()
};
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<Routine>()
.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<Section>()
.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<Position>()
.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<ComplexUser>()
.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<Shift>()
.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<Task>()
.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<ShiftPlan>()
.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;
}
}