From f633e11e97d672d494f67609256adc8d7d81399a Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Fri, 19 Sep 2025 16:04:32 +0530 Subject: [PATCH] Added the API to get the organization list assigned to the project --- .../Controllers/ProjectController.cs | 12 +++++ Marco.Pms.Services/Service/ProjectServices.cs | 48 +++++++++++++++++++ .../ServiceInterfaces/IProjectServices.cs | 2 + 3 files changed, 62 insertions(+) diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 8346a98..f8a8275 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -540,5 +540,17 @@ namespace MarcoBMS.Services.Controllers return StatusCode(response.StatusCode, response); } #endregion + + #region =================================================================== Assign Organization APIs =================================================================== + + [HttpGet("get/assigned/organization/{projectId}")] + public async Task GetAssignedOrganizationsToProject(Guid projectId) + { + Employee loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _projectServices.GetAssignedOrganizationsToProjectAsync(projectId, tenantId, loggedInEmployee); + return StatusCode(response.StatusCode, response); + } + + #endregion } }; \ No newline at end of file diff --git a/Marco.Pms.Services/Service/ProjectServices.cs b/Marco.Pms.Services/Service/ProjectServices.cs index b0d8188..37c3a6b 100644 --- a/Marco.Pms.Services/Service/ProjectServices.cs +++ b/Marco.Pms.Services/Service/ProjectServices.cs @@ -16,6 +16,7 @@ using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Activities; using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Master; +using Marco.Pms.Model.ViewModels.Organization; using Marco.Pms.Model.ViewModels.Projects; using Marco.Pms.Services.Helpers; using Marco.Pms.Services.Service.ServiceInterfaces; @@ -2053,6 +2054,53 @@ namespace Marco.Pms.Services.Service #endregion + #region =================================================================== Assign Organization APIs =================================================================== + + public async Task> GetAssignedOrganizationsToProjectAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee) + { + try + { + using var scope = _serviceScopeFactory.CreateScope(); + var _permission = scope.ServiceProvider.GetRequiredService(); + + var project = await _context.Projects.FirstOrDefaultAsync(p => p.Id == projectId && p.TenantId == tenantId); + if (project == null) + { + return ApiResponse.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.ErrorResponse("Access Denied.", "You do not have permission to modify this project.", 403); + } + + var projectOrgMapping = await _context.ProjectOrgMappings + .Include(po => po.ProjectService) + .Include(po => po.Organization) + .Where(po => po.ProjectService != null && po.ProjectService.ProjectId == projectId && po.TenantId == tenantId).ToListAsync(); + + var response = projectOrgMapping.Select(po => _mapper.Map(po.Organization)).ToList(); + + return ApiResponse.SuccessResponse(response, "Successfully fetched the list of organization assigned to the 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.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.ErrorResponse("Internal error", "An internal exception has been occured", 500); + } + } + + #endregion + #region =================================================================== Helper Functions =================================================================== public async Task> GetAllProjectByTanentID(Guid tanentId) diff --git a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs index d8eb23f..57bbfe4 100644 --- a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs +++ b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs @@ -47,5 +47,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces Task> AssignServiceToProjectAsync(AssignServiceDto model, Guid tenantId, Employee loggedInEmployee); Task> DeassignServiceToProjectAsync(DeassignServiceDto model, Guid tenantId, Employee loggedInEmployee); + Task> GetAssignedOrganizationsToProjectAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee); + } }