Organization_Management #142

Merged
ashutosh.nehete merged 92 commits from Organization_Management into main 2025-09-30 09:05:14 +00:00
Showing only changes of commit 2e0ea562fe - Show all commits

View File

@ -12,6 +12,7 @@ using Marco.Pms.Model.ViewModels.Projects;
using Marco.Pms.Services.Service;
using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@ -21,6 +22,7 @@ namespace Marco.Pms.Services.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class OrganizationController : ControllerBase
{
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
@ -109,7 +111,7 @@ namespace Marco.Pms.Services.Controllers
#region =================================================================== Post Functions ===================================================================
[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();
using var scope = _serviceScope.CreateScope();
@ -238,7 +240,7 @@ namespace Marco.Pms.Services.Controllers
}
[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();
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));
}
}
[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
#region =================================================================== Put Functions ===================================================================