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);
|
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
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@ -780,8 +780,79 @@ namespace Marco.Pms.Services.Service
|
|||||||
return ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has occurred", 500);
|
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
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Put Functions ===================================================================
|
#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>> CreateOrganizationAsync(CreateOrganizationDto model, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
|
||||||
Task<ApiResponse<object>> AssignOrganizationToProjectAsync(AssignOrganizationDto 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>> 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
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Put Functions ===================================================================
|
#region =================================================================== Put Functions ===================================================================
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user