Organization_Management #142
@ -12,6 +12,7 @@ using Marco.Pms.Model.ViewModels.Projects;
|
|||||||
using Marco.Pms.Services.Service;
|
using Marco.Pms.Services.Service;
|
||||||
using MarcoBMS.Services.Helpers;
|
using MarcoBMS.Services.Helpers;
|
||||||
using MarcoBMS.Services.Service;
|
using MarcoBMS.Services.Service;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@ -21,6 +22,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
{
|
{
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
|
[Authorize]
|
||||||
public class OrganizationController : ControllerBase
|
public class OrganizationController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
|
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
|
||||||
@ -109,7 +111,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
#region =================================================================== Post Functions ===================================================================
|
#region =================================================================== Post Functions ===================================================================
|
||||||
|
|
||||||
[HttpPost("create")]
|
[HttpPost("create")]
|
||||||
public async Task<IActionResult> CreateServiceProviderAsync([FromBody] CreateOrganizationDto model)
|
public async Task<IActionResult> CreateOrganizationAsync([FromBody] CreateOrganizationDto model)
|
||||||
{
|
{
|
||||||
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
using var scope = _serviceScope.CreateScope();
|
using var scope = _serviceScope.CreateScope();
|
||||||
@ -238,7 +240,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("assign/project")]
|
[HttpPost("assign/project")]
|
||||||
public async Task<IActionResult> AssignServiceProviderToProjectAsync([FromBody] AssignOrganizationDto model)
|
public async Task<IActionResult> AssignOrganizationToProjectAsync([FromBody] AssignOrganizationDto model)
|
||||||
{
|
{
|
||||||
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
using var scope = _serviceScope.CreateScope();
|
using var scope = _serviceScope.CreateScope();
|
||||||
@ -426,6 +428,70 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500));
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost("assign/tenant/{organizationId}")]
|
||||||
|
public async Task<IActionResult> AssignOrganizationToTenantAsync(Guid organizationId)
|
||||||
|
{
|
||||||
|
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
using var scope = _serviceScope.CreateScope();
|
||||||
|
await using var transaction = await _context.Database.BeginTransactionAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
|
||||||
|
var serviceProviderTenantMappingTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
return await context.TenantOrgMappings
|
||||||
|
.FirstOrDefaultAsync(spt => spt.OrganizationId == organizationId && spt.TenantId == tenantId && spt.IsActive);
|
||||||
|
});
|
||||||
|
|
||||||
|
var organizationTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
return await context.Organizations
|
||||||
|
.FirstOrDefaultAsync(o => o.Id == organizationId);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.WhenAll(serviceProviderTenantMappingTask, organizationTask);
|
||||||
|
|
||||||
|
var serviceProviderTenantMapping = serviceProviderTenantMappingTask.Result;
|
||||||
|
var organization = organizationTask.Result;
|
||||||
|
|
||||||
|
if (organization == null)
|
||||||
|
{
|
||||||
|
return NotFound(ApiResponse<object>.ErrorResponse("Organization not found", "Organization not found in database", 404));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serviceProviderTenantMapping == null)
|
||||||
|
{
|
||||||
|
var newServiceProviderTenantMapping = new TenantOrgMapping
|
||||||
|
{
|
||||||
|
OrganizationId = organization.Id,
|
||||||
|
SPRID = organization.SPRID,
|
||||||
|
AssignedDate = DateTime.UtcNow,
|
||||||
|
IsActive = true,
|
||||||
|
TenantId = tenantId
|
||||||
|
};
|
||||||
|
_context.TenantOrgMappings.Add(newServiceProviderTenantMapping);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
var response = _mapper.Map<BasicOrganizationVm>(organization);
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization has been assigned to tenant", 200));
|
||||||
|
}
|
||||||
|
catch (DbUpdateException dbEx)
|
||||||
|
{
|
||||||
|
await transaction.RollbackAsync();
|
||||||
|
|
||||||
|
_logger.LogError(dbEx, "Database Exception has been occured, While assigning the organization to project");
|
||||||
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An database exception has been occured", 500));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Exception has been occured, While assigned the organizatio to project");
|
||||||
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Put Functions ===================================================================
|
#region =================================================================== Put Functions ===================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user