205 lines
11 KiB
C#
205 lines
11 KiB
C#
using Marco.Pms.DataAccess.Data;
|
|
using Marco.Pms.Model.Dtos.Organization;
|
|
using Marco.Pms.Services.Service.ServiceInterfaces;
|
|
using MarcoBMS.Services.Helpers;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Marco.Pms.Services.Controllers
|
|
{
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
[Authorize]
|
|
public class OrganizationController : ControllerBase
|
|
{
|
|
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
|
|
private readonly IServiceScopeFactory _serviceScope;
|
|
private readonly IOrganizationService _organizationService;
|
|
private readonly UserHelper _userHelper;
|
|
private readonly ISignalRService _signalR;
|
|
private readonly Guid tenantId;
|
|
private readonly Guid loggedOrganizationId;
|
|
public OrganizationController(IDbContextFactory<ApplicationDbContext> dbContextFactory,
|
|
IServiceScopeFactory serviceScope,
|
|
IOrganizationService organizationService,
|
|
ISignalRService signalR,
|
|
UserHelper userHelper)
|
|
{
|
|
_dbContextFactory = dbContextFactory ?? throw new ArgumentNullException(nameof(dbContextFactory));
|
|
_serviceScope = serviceScope ?? throw new ArgumentNullException(nameof(serviceScope));
|
|
_organizationService = organizationService ?? throw new ArgumentNullException(nameof(organizationService));
|
|
_signalR = signalR ?? throw new ArgumentNullException(nameof(signalR));
|
|
_userHelper = userHelper ?? throw new ArgumentNullException(nameof(userHelper));
|
|
loggedOrganizationId = _userHelper.GetCurrentOrganizationId();
|
|
tenantId = userHelper.GetTenantId();
|
|
}
|
|
#region =================================================================== Get Functions ===================================================================
|
|
|
|
[HttpGet("list")]
|
|
public async Task<IActionResult> GetOrganizarionList([FromQuery] string? searchString, [FromQuery] long? sprid, [FromQuery] bool active = true,
|
|
[FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.GetOrganizarionListAsync(searchString, sprid, active, pageNumber, pageSize, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
[HttpGet("list/basic")]
|
|
public async Task<IActionResult> GetOrganizationBasicList([FromQuery] string? searchString, CancellationToken ct, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.GetOrganizationBasicListAsync(searchString, pageNumber, pageSize, loggedInEmployee, ct);
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
[HttpGet("details/{id}")]
|
|
public async Task<IActionResult> GetOrganizationDetails(Guid id)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.GetOrganizationDetailsAsync(id, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
[HttpGet("hierarchy/list/{employeeId}")]
|
|
public async Task<IActionResult> GetOrganizationHierarchyList(Guid employeeId)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.GetOrganizationHierarchyListAsync(employeeId, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region =================================================================== Post Functions ===================================================================
|
|
|
|
[HttpPost("create")]
|
|
public async Task<IActionResult> CreateOrganization([FromBody] CreateOrganizationDto model)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.CreateOrganizationAsync(model, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
if (response.Success)
|
|
{
|
|
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Organization_Management", Response = response.Data };
|
|
await _signalR.SendNotificationAsync(notification);
|
|
}
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
[HttpPost("assign/project")]
|
|
public async Task<IActionResult> AssignOrganizationToProject([FromBody] AssignOrganizationDto model)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.AssignOrganizationToProjectAsync(model, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
if (response.Success)
|
|
{
|
|
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Organization_Management", Response = response.Data };
|
|
await _signalR.SendNotificationAsync(notification);
|
|
}
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
[HttpPost("assign/tenant/{organizationId}")]
|
|
public async Task<IActionResult> AssignOrganizationToTenantAsync(Guid organizationId)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.AssignOrganizationToTenantAsync(organizationId, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
if (response.Success)
|
|
{
|
|
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Organization_Management", Response = response.Data };
|
|
await _signalR.SendNotificationAsync(notification);
|
|
}
|
|
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
|
|
|
|
#region =================================================================== Put Functions ===================================================================
|
|
|
|
[HttpPut("edit/{id}")]
|
|
public async Task<IActionResult> UpdateOrganiation(Guid id, [FromBody] UpdateOrganizationDto model)
|
|
{
|
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
var response = await _organizationService.UpdateOrganiationAsync(id, model, loggedInEmployee, tenantId, loggedOrganizationId);
|
|
if (response.Success)
|
|
{
|
|
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Organization_Management", Response = response.Data };
|
|
await _signalR.SendNotificationAsync(notification);
|
|
}
|
|
return StatusCode(response.StatusCode, response);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region =================================================================== Delete Functions ===================================================================
|
|
|
|
//[HttpDelete("delete/{id}")]
|
|
//public async Task<IActionResult> DeleteServiceProviderAsync(Guid id, [FromQuery] bool active)
|
|
//{
|
|
// await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
|
// using var scope = _serviceScope.CreateScope();
|
|
|
|
// var message = active ? "Restore" : "Delete";
|
|
|
|
// var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
// var client = await _context.Clients.FirstOrDefaultAsync(c => c.PrimaryEmployeeId == loggedInEmployee.Id && c.TenantId == tenantId);
|
|
|
|
// if (!(loggedInEmployee.ApplicationUser?.IsRootUser ?? false) && !loggedInEmployee.IsPrimary && client == null)
|
|
// {
|
|
// return StatusCode(403, ApiResponse<object>.ErrorResponse("Access Denied", $"You do not have permission to {message}d service provider.", 403));
|
|
// }
|
|
|
|
// var serviceProvider = await _context.ServiceProviders.FirstOrDefaultAsync(sp => sp.Id == id);
|
|
// if (serviceProvider == null)
|
|
// {
|
|
// return NotFound(ApiResponse<object>.ErrorResponse("Service Provider not Found", "Service Provider not Found in database", 404));
|
|
// }
|
|
// if (serviceProvider.IsActive == active)
|
|
// {
|
|
// return BadRequest(ApiResponse<object>.ErrorResponse($"Service Provider is already {message}d", $"Service Provider is already {message}d", 400));
|
|
// }
|
|
|
|
// var employeeIds = await _context.Employees.Where(e => e.ServiceProviderId == id).Select(e => e.Id).ToListAsync();
|
|
|
|
// var isPendingTask = await _context.TaskMembers.AnyAsync(tm => employeeIds.Contains(tm.EmployeeId));
|
|
|
|
// if (isPendingTask && !active)
|
|
// {
|
|
// return BadRequest(ApiResponse<object>.ErrorResponse("There is an unfinshed task, Service provider cannot be deleted", "There is an unfinshed task, Service provider cannot be deleted", 400));
|
|
// }
|
|
|
|
// serviceProvider.IsActive = active;
|
|
|
|
// if (!active)
|
|
// {
|
|
// var servicePeroviderTenant = await _context.ServiceProviderTenantMappings.AsNoTracking().Where(spt => spt.ServiceProviderId == id && spt.IsActive).ToListAsync();
|
|
// var newServiceProviderTenant = servicePeroviderTenant.Select(spt =>
|
|
// {
|
|
// spt.IsActive = false;
|
|
// return spt;
|
|
|
|
// }).ToList();
|
|
// _context.ServiceProviderTenantMappings.UpdateRange(newServiceProviderTenant);
|
|
// }
|
|
|
|
// await _context.SaveChangesAsync();
|
|
// return Ok(ApiResponse<object>.SuccessResponse(new { }, $"Service Provider is {message}d", 200));
|
|
//}
|
|
#endregion
|
|
|
|
}
|
|
}
|