106 lines
4.1 KiB
C#
106 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using LCU.Library.Internal.IncentiveApiModels.Common;
|
|
|
|
namespace LCU.Library.Internal.IncentiveApiModels.Entities
|
|
{
|
|
public class AppUser : Auditable
|
|
{
|
|
public AppUser()
|
|
{
|
|
Departments = new List<UserDepartment>();
|
|
Assignments = new List<UserAssignment>();
|
|
Terminated = null;
|
|
}
|
|
|
|
public Guid Id { get; set; }
|
|
public string AdEmail { get; set; }
|
|
public int PersonId { get; set; }
|
|
public string EmployeeId { get; set; }
|
|
public string HomeDepartment { get; set; }
|
|
public string BaseRole { get; set; }
|
|
public string? ManagerKey { get; set; }
|
|
[Obsolete("Start referring to UserDepartment.Role when possible. 09/08/2021")]
|
|
public Role Role { get; set; }
|
|
public List<UserPermission> AdditionalPermissions { get; set; }
|
|
public string FullName { get; set; }
|
|
public List<UserDepartment> Departments { get; set; }
|
|
public List<UserAssignment> Assignments { get; set; }
|
|
public DateTime? Terminated { get; set; }
|
|
|
|
public bool UserHasPermission(Permission perm)
|
|
{
|
|
var departments = ActiveDepartmentsForRange(new MonthRange());
|
|
foreach (var userDepartment in departments)
|
|
{
|
|
if (userDepartment.Role.Permissions.Any(x => x.Code == perm.Code))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return (AdditionalPermissions ?? new List<UserPermission>()).Any(x => x.Permission.Code == perm.Code);
|
|
}
|
|
|
|
public bool UserHasPermission(string permissionCode)
|
|
{
|
|
var departments = ActiveDepartmentsForRange(new MonthRange());
|
|
foreach (var userDepartment in departments)
|
|
{
|
|
if (userDepartment.Role.Permissions.Any(x => x.Code == permissionCode))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return (AdditionalPermissions ?? new List<UserPermission>()).Any(x => x.Permission.Code == permissionCode);
|
|
}
|
|
|
|
public IEnumerable<UserDepartment> ActiveDepartmentsForRange(MonthRange monthRange)
|
|
{
|
|
return Departments.Where(department => department.StartDate.Date <= monthRange.EndTime.Date &&
|
|
(department.EndDate == null ||
|
|
monthRange.StartTime.Date <= department.EndDate.Value.Date));
|
|
}
|
|
|
|
public UserDepartment FindDepartmentForRole(Role role)
|
|
{
|
|
var departments = ActiveDepartmentsForRange(new MonthRange());
|
|
return departments.FirstOrDefault(x => x.Role == role);
|
|
}
|
|
|
|
public UserDepartment FindHomeDepartment()
|
|
{
|
|
return Departments.FirstOrDefault(x => x.IsHome == true
|
|
&& x.StartDate.Date <= DateTime.Today.Date &&
|
|
(x.EndDate == null || DateTime.Today.Date <= x.EndDate.Value.Date));
|
|
}
|
|
|
|
public bool HasDepartment(int departmentId)
|
|
{
|
|
return ActiveDepartmentsForRange(new MonthRange()).Any(x => x.DepartmentId == departmentId);
|
|
}
|
|
|
|
public bool HasRoleAnywhere(Role role)
|
|
{
|
|
var departments = ActiveDepartmentsForRange(new MonthRange());
|
|
return departments.Any(userDepartment => userDepartment.Role == role);
|
|
}
|
|
|
|
public bool HasAnyRoleForActiveDepartment(int departmentId, Role[] roles)
|
|
{
|
|
var departments = ActiveDepartmentsForRange(new MonthRange());
|
|
return departments.Any(userDepartment => roles.Contains(userDepartment.Role) && userDepartment.DepartmentId == departmentId);
|
|
}
|
|
|
|
public string AppUserFullNameInFromContextFormat()
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(FullName))
|
|
{
|
|
var nameParts = FullName.Split(",");
|
|
return $"{nameParts[1]} {nameParts[0]}";
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|