Added the APi to manage organization hierarchies
This commit is contained in:
parent
0b2ed71dab
commit
b023883233
@ -104,7 +104,18 @@ namespace Marco.Pms.Services.Controllers
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("hierarchy/manage/{employeeId}")]
|
||||
public async Task<IActionResult> ManageOrganizationHierarchy(Guid employeeId, [FromBody] List<OrganizationHierarchyDto> model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _organizationService.ManageOrganizationHierarchyAsync(employeeId, model, loggedInEmployee, tenantId, loggedOrganizationId);
|
||||
if (response.Success)
|
||||
{
|
||||
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Organization_Hierarchy", Response = response.Data };
|
||||
await _signalR.SendNotificationAsync(notification);
|
||||
}
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@ -780,8 +780,79 @@ namespace Marco.Pms.Services.Service
|
||||
return ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has occurred", 500);
|
||||
}
|
||||
}
|
||||
public async Task<ApiResponse<object>> ManageOrganizationHierarchyAsync(Guid employeeId, List<OrganizationHierarchyDto> model, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId)
|
||||
{
|
||||
var reportToIDs = model.Select(oh => oh.ReportToId).ToList();
|
||||
var existingOrganizationHieraechies = await _context.OrganizationHierarchies
|
||||
.AsNoTracking()
|
||||
.Where(oh => oh.EmployeeId == employeeId && reportToIDs.Contains(oh.ReportToId) && oh.IsActive && oh.TenantId == tenantId)
|
||||
.ToListAsync();
|
||||
var newOrganizationHieraechies = new List<OrganizationHierarchy>();
|
||||
var removeOrganizationHieraechies = new List<OrganizationHierarchy>();
|
||||
var orgHierarchyLogs = new List<OrgHierarchyLog>();
|
||||
|
||||
foreach (var hierarchy in model)
|
||||
{
|
||||
var existingOrganizationHieraechy = existingOrganizationHieraechies.FirstOrDefault(oh => oh.EmployeeId == employeeId && oh.ReportToId == hierarchy.ReportToId);
|
||||
if (hierarchy.IsActive && existingOrganizationHieraechy == null)
|
||||
{
|
||||
var newOrganizationHieraechy = new OrganizationHierarchy
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
EmployeeId = employeeId,
|
||||
ReportToId = hierarchy.ReportToId,
|
||||
IsPrimary = hierarchy.IsPrimary,
|
||||
IsActive = true,
|
||||
AssignedAt = DateTime.UtcNow,
|
||||
AssignedById = loggedInEmployee.Id,
|
||||
TenantId = tenantId
|
||||
};
|
||||
newOrganizationHieraechies.Add(newOrganizationHieraechy);
|
||||
|
||||
}
|
||||
else if (!hierarchy.IsActive && existingOrganizationHieraechy != null)
|
||||
{
|
||||
existingOrganizationHieraechy.IsActive = false;
|
||||
removeOrganizationHieraechies.Add(existingOrganizationHieraechy);
|
||||
|
||||
orgHierarchyLogs.Add(new OrgHierarchyLog
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
OrganizationHierarchyId = existingOrganizationHieraechy.Id,
|
||||
ReAssignedAt = DateTime.UtcNow,
|
||||
ReAssignedById = loggedInEmployee.Id,
|
||||
TenantId = tenantId
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (newOrganizationHieraechies.Any())
|
||||
{
|
||||
_context.OrganizationHierarchies.AddRange(newOrganizationHieraechies);
|
||||
}
|
||||
if (removeOrganizationHieraechies.Any())
|
||||
{
|
||||
_context.OrganizationHierarchies.UpdateRange(removeOrganizationHieraechies);
|
||||
}
|
||||
if (orgHierarchyLogs.Any())
|
||||
{
|
||||
_context.OrgHierarchyLogs.AddRange(orgHierarchyLogs);
|
||||
}
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var organizationHieraechies = await _context.OrganizationHierarchies
|
||||
.Include(oh => oh.Employee).ThenInclude(e => e!.JobRole)
|
||||
.Include(oh => oh.ReportTo).ThenInclude(e => e!.JobRole)
|
||||
.Include(oh => oh.AssignedBy).ThenInclude(e => e!.JobRole)
|
||||
.AsNoTracking()
|
||||
.Where(oh => oh.EmployeeId == employeeId && oh.IsActive && oh.TenantId == tenantId)
|
||||
.OrderByDescending(oh => oh.AssignedAt)
|
||||
.ToListAsync();
|
||||
|
||||
var response = _mapper.Map<List<OrganizationHierarchyVM>>(organizationHieraechies);
|
||||
return ApiResponse<object>.SuccessResponse(response, $"{response.Count} superior fetched successfully", 200);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Put Functions ===================================================================
|
||||
|
||||
@ -16,7 +16,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
||||
Task<ApiResponse<object>> CreateOrganizationAsync(CreateOrganizationDto model, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
|
||||
Task<ApiResponse<object>> AssignOrganizationToProjectAsync(AssignOrganizationDto model, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
|
||||
Task<ApiResponse<object>> AssignOrganizationToTenantAsync(Guid organizationId, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
|
||||
|
||||
Task<ApiResponse<object>> ManageOrganizationHierarchyAsync(Guid employeeId, List<OrganizationHierarchyDto> model, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Put Functions ===================================================================
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user