Files
T
2026-03-17 09:53:09 -05:00

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;
}
}
}