Added the API to get list of services according to the project and logged in employee #132
@ -1,15 +1,11 @@
|
||||
using Marco.Pms.Model.ViewModels.Master;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Activities
|
||||
namespace Marco.Pms.Model.ViewModels.Activities
|
||||
{
|
||||
public class ActivityVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string? ActivityName { get; set; }
|
||||
|
||||
public string? UnitOfMeasurement { get; set; }
|
||||
public List<CheckListVM>? CheckLists { get; set; }
|
||||
public ActivityGroupMasterVM? ActivityGroup { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
public bool IsSystem { get; set; } = false;
|
||||
}
|
||||
|
@ -5,7 +5,6 @@
|
||||
public Guid Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public ServiceMasterVM? Service { get; set; }
|
||||
public bool IsSystem { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
}
|
||||
|
@ -256,6 +256,14 @@ namespace Marco.Pms.Services.Controllers
|
||||
.Where(sp => model.ServiceIds.Contains(sp.ServiceId) && sp.ProjectId == model.ProjectId && sp.IsActive).ToListAsync();
|
||||
});
|
||||
|
||||
var projectOrganizationsTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.ProjectOrgMappings
|
||||
.Include(po => po.ProjectService)
|
||||
.Where(po => po.ProjectService != null && model.ServiceIds.Contains(po.ProjectService.ServiceId) && po.ProjectService.ProjectId == model.ProjectId).ToListAsync();
|
||||
});
|
||||
|
||||
var serviceTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
@ -299,13 +307,15 @@ namespace Marco.Pms.Services.Controllers
|
||||
&& p.OrganizationTypeId == ServiceProvider);
|
||||
});
|
||||
|
||||
await Task.WhenAll(organizationTask, parentorganizationTask, projectTask, projectServicesTask, isPMCTask, isServiceProviderTask, serviceTask, organizationTypeTask);
|
||||
await Task.WhenAll(organizationTask, parentorganizationTask, projectTask, projectServicesTask, isPMCTask, isServiceProviderTask,
|
||||
serviceTask, organizationTypeTask, projectOrganizationsTask);
|
||||
|
||||
var services = serviceTask.Result;
|
||||
var organizationType = organizationTypeTask.Result;
|
||||
var organization = organizationTask.Result;
|
||||
var projectServices = projectServicesTask.Result;
|
||||
var parentorganization = parentorganizationTask.Result;
|
||||
var projectOrganizations = projectOrganizationsTask.Result;
|
||||
var project = projectTask.Result;
|
||||
var isPMC = isPMCTask.Result;
|
||||
var isServiceProvider = isServiceProviderTask.Result;
|
||||
@ -324,7 +334,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
|
||||
var serviceProviderTenantMapping = await _context.TenantOrgMappings
|
||||
.FirstOrDefaultAsync(spt => spt.OrganizationId == model.OrganizationId && spt.TenantId == project.TenantId);
|
||||
.FirstOrDefaultAsync(spt => spt.OrganizationId == model.OrganizationId && spt.TenantId == project.TenantId && spt.IsActive);
|
||||
|
||||
if (serviceProviderTenantMapping == null)
|
||||
{
|
||||
@ -332,6 +342,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
{
|
||||
OrganizationId = organization.Id,
|
||||
SPRID = organization.SPRID,
|
||||
AssignedDate = DateTime.UtcNow,
|
||||
IsActive = true,
|
||||
TenantId = project.TenantId
|
||||
};
|
||||
@ -374,7 +385,12 @@ namespace Marco.Pms.Services.Controllers
|
||||
AssignedDate = DateTime.UtcNow,
|
||||
TenantId = project.TenantId
|
||||
};
|
||||
projectOrgMappings.Add(projectOrgMapping);
|
||||
var projectOrganization = projectOrganizations
|
||||
.FirstOrDefault(po => po.ProjectService != null && po.ProjectService.ProjectId == project.Id && po.ProjectService.ServiceId == serviceId);
|
||||
if (projectOrganization == null)
|
||||
{
|
||||
projectOrgMappings.Add(projectOrgMapping);
|
||||
}
|
||||
}
|
||||
|
||||
_context.ProjectOrgMappings.AddRange(projectOrgMappings);
|
||||
|
@ -502,6 +502,14 @@ namespace MarcoBMS.Services.Controllers
|
||||
|
||||
#region =================================================================== Assign Service APIs ===================================================================
|
||||
|
||||
[HttpGet("get/assigned/services/{projectId}")]
|
||||
public async Task<IActionResult> AssignServiceToProject(Guid projectId)
|
||||
{
|
||||
Employee loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _projectServices.GetAssignedServiceToProjectAsync(projectId, tenantId, loggedInEmployee);
|
||||
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
[HttpPost("assign/service")]
|
||||
public async Task<IActionResult> AssignServiceToProject([FromBody] AssignServiceDto model)
|
||||
{
|
||||
|
@ -213,6 +213,7 @@ namespace Marco.Pms.Services.Service
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Services APIs ===================================================================
|
||||
public async Task<ApiResponse<object>> GetServicesAsync(Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
|
@ -7,6 +7,7 @@ using Marco.Pms.Model.Dtos.Projects;
|
||||
using Marco.Pms.Model.Dtos.Util;
|
||||
using Marco.Pms.Model.Employees;
|
||||
using Marco.Pms.Model.Entitlements;
|
||||
using Marco.Pms.Model.Master;
|
||||
using Marco.Pms.Model.MongoDBModels.Project;
|
||||
using Marco.Pms.Model.OrganizationModel;
|
||||
using Marco.Pms.Model.Projects;
|
||||
@ -1834,16 +1835,84 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
#region =================================================================== Assign Service APIs ===================================================================
|
||||
|
||||
public async Task<ApiResponse<object>> GetAssignedServiceToProjectAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var scope = _serviceScopeFactory.CreateScope();
|
||||
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||
|
||||
var project = await _context.Projects.FirstOrDefaultAsync(p => p.Id == projectId && p.TenantId == tenantId);
|
||||
if (project == null)
|
||||
{
|
||||
return ApiResponse<object>.ErrorResponse("Project not found", "Project not found in database", 404);
|
||||
}
|
||||
|
||||
var hasPermission = await _permission.HasProjectPermission(loggedInEmployee, projectId);
|
||||
if (!hasPermission)
|
||||
{
|
||||
_logger.LogWarning("Access DENIED for user {UserId} attempting to update project {ProjectId}.", loggedInEmployee.Id, projectId);
|
||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to modify this project.", 403);
|
||||
}
|
||||
|
||||
List<ServiceMaster> services = new List<ServiceMaster>();
|
||||
if (project.PromoterId == loggedInEmployee.OrganizationId && project.PMCId == loggedInEmployee.OrganizationId)
|
||||
{
|
||||
var projectServices = await _context.ProjectServiceMappings
|
||||
.Include(ps => ps.Service)
|
||||
.Where(ps => ps.ProjectId == projectId && ps.Service != null && ps.TenantId == tenantId && ps.IsActive)
|
||||
.ToListAsync();
|
||||
services = projectServices.Select(ps => ps.Service!).Distinct().ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
var orgProjectMapping = await _context.ProjectOrgMappings
|
||||
.Include(po => po.ProjectService)
|
||||
.ThenInclude(ps => ps!.Service)
|
||||
.Where(po => po.OrganizationId == loggedInEmployee.OrganizationId && po.ProjectService != null
|
||||
&& po.ProjectService.IsActive && po.ProjectService.ProjectId == projectId && po.ProjectService.Service != null)
|
||||
.ToListAsync();
|
||||
|
||||
services = orgProjectMapping.Select(po => po.ProjectService!.Service!).Distinct().ToList();
|
||||
}
|
||||
var response = _mapper.Map<List<ServiceMasterVM>>(services);
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "Successfully fetched the services for this project", 200);
|
||||
}
|
||||
catch (DbUpdateException dbEx)
|
||||
{
|
||||
//await transaction.RollbackAsync();
|
||||
|
||||
_logger.LogError(dbEx, "Database Exception has been occured, While deassigning the sevice to the project");
|
||||
return ApiResponse<object>.ErrorResponse("Internal error", "An database exception has been occured", 500);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception has been occured, While deassigning the sevice to the project");
|
||||
return ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500);
|
||||
}
|
||||
}
|
||||
public async Task<ApiResponse<object>> AssignServiceToProjectAsync(AssignServiceDto model, Guid tenantId, Employee loggedInEmployee)
|
||||
{
|
||||
await using var transaction = await _context.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
using var scope = _serviceScopeFactory.CreateScope();
|
||||
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||
|
||||
var project = await _context.Projects.FirstOrDefaultAsync(p => p.Id == model.ProjectId && p.TenantId == tenantId);
|
||||
if (project == null)
|
||||
{
|
||||
return ApiResponse<object>.ErrorResponse("Project not found", "Project not found in database", 404);
|
||||
}
|
||||
|
||||
var hasPermission = await _permission.HasProjectPermission(loggedInEmployee, model.ProjectId);
|
||||
if (!hasPermission)
|
||||
{
|
||||
_logger.LogWarning("Access DENIED for user {UserId} attempting to update project {ProjectId}.", loggedInEmployee.Id, model.ProjectId);
|
||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to modify this project.", 403);
|
||||
}
|
||||
|
||||
var todaysDate = DateTime.UtcNow.Date;
|
||||
|
||||
var projectServicesTask = Task.Run(async () =>
|
||||
@ -1915,11 +1984,21 @@ namespace Marco.Pms.Services.Service
|
||||
await using var transaction = await _context.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
using var scope = _serviceScopeFactory.CreateScope();
|
||||
var _permission = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||
|
||||
var project = await _context.Projects.FirstOrDefaultAsync(p => p.Id == model.ProjectId && p.TenantId == tenantId);
|
||||
if (project == null)
|
||||
{
|
||||
return ApiResponse<object>.ErrorResponse("Project not found", "Project not found in database", 404);
|
||||
}
|
||||
|
||||
var hasPermission = await _permission.HasProjectPermission(loggedInEmployee, model.ProjectId);
|
||||
if (!hasPermission)
|
||||
{
|
||||
_logger.LogWarning("Access DENIED for user {UserId} attempting to update project {ProjectId}.", loggedInEmployee.Id, model.ProjectId);
|
||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to modify this project.", 403);
|
||||
}
|
||||
var todaysDate = DateTime.UtcNow.Date;
|
||||
|
||||
var projectServicesTask = Task.Run(async () =>
|
||||
|
@ -43,6 +43,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
||||
Task<ApiResponse<object>> GetEmployeeToWhomProjectLevelAssignedAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee);
|
||||
Task<ApiResponse<object>> GetAllPermissionFroProjectAsync(Guid projectId, Employee loggedInEmployee, Guid tenantId);
|
||||
|
||||
Task<ApiResponse<object>> GetAssignedServiceToProjectAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee);
|
||||
Task<ApiResponse<object>> AssignServiceToProjectAsync(AssignServiceDto model, Guid tenantId, Employee loggedInEmployee);
|
||||
Task<ApiResponse<object>> DeassignServiceToProjectAsync(DeassignServiceDto model, Guid tenantId, Employee loggedInEmployee);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user