Document_Manager #129
11
Marco.Pms.Model/Dtos/Util/ProjctLevelPermissionDto.cs
Normal file
11
Marco.Pms.Model/Dtos/Util/ProjctLevelPermissionDto.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using Marco.Pms.Model.Dtos.Roles;
|
||||||
|
|
||||||
|
namespace Marco.Pms.Model.Dtos.Util
|
||||||
|
{
|
||||||
|
public class ProjctLevelPermissionDto
|
||||||
|
{
|
||||||
|
public Guid EmployeeId { get; set; }
|
||||||
|
public Guid ProjectId { get; set; }
|
||||||
|
public FeaturesPermissionDto? Permission { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
using Marco.Pms.Model.Employees;
|
||||||
|
using Marco.Pms.Model.Projects;
|
||||||
|
using Marco.Pms.Model.Utilities;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace Marco.Pms.Model.Entitlements
|
||||||
|
{
|
||||||
|
public class ProjectLevelPermissionMapping : TenantRelation
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public Guid EmployeeId { get; set; }
|
||||||
|
|
||||||
|
[ValidateNever]
|
||||||
|
[ForeignKey("EmployeeId")]
|
||||||
|
public Employee? Employee { get; set; }
|
||||||
|
public Guid ProjectId { get; set; }
|
||||||
|
|
||||||
|
[ValidateNever]
|
||||||
|
[ForeignKey("ProjectId")]
|
||||||
|
public Project? Project { get; set; }
|
||||||
|
public Guid PermissionId { get; set; }
|
||||||
|
|
||||||
|
[ValidateNever]
|
||||||
|
[ForeignKey("PermissionId")]
|
||||||
|
public FeaturePermission? Permission { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -186,6 +186,9 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var totalCount = await documentQuery.CountAsync();
|
||||||
|
var totalPages = totalCount / pageSize;
|
||||||
|
|
||||||
// Apply pagination & ordering
|
// Apply pagination & ordering
|
||||||
var documents = await documentQuery
|
var documents = await documentQuery
|
||||||
.OrderByDescending(t => t.UploadedAt)
|
.OrderByDescending(t => t.UploadedAt)
|
||||||
@ -202,7 +205,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
// Map to ViewModel
|
// Map to ViewModel
|
||||||
var response = documents.Select(doc =>
|
var documentListVMs = documents.Select(doc =>
|
||||||
{
|
{
|
||||||
var version = versions.FirstOrDefault(v => v.ChildAttachmentId == doc.Id);
|
var version = versions.FirstOrDefault(v => v.ChildAttachmentId == doc.Id);
|
||||||
var vm = _mapper.Map<DocumentListVM>(doc);
|
var vm = _mapper.Map<DocumentListVM>(doc);
|
||||||
@ -211,7 +214,16 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return vm;
|
return vm;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
_logger.LogInfo("Fetched {Count} documents for EntityId {EntityId}", response.Count, entityId);
|
_logger.LogInfo("Fetched {Count} documents for EntityId {EntityId}", documentListVMs.Count, entityId);
|
||||||
|
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
CurrentFilter = documentFilter,
|
||||||
|
CurrentPage = pageNumber,
|
||||||
|
TotalPages = totalPages,
|
||||||
|
TotalEntites = totalCount,
|
||||||
|
Data = documentListVMs,
|
||||||
|
};
|
||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Document list fetched successfully", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Document list fetched successfully", 200));
|
||||||
}
|
}
|
||||||
@ -404,12 +416,17 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve all version mappings linked to the parent attachment and tenant
|
// Retrieve all version mappings linked to the parent attachment and tenant
|
||||||
var versionMappings = await _context.AttachmentVersionMappings
|
var versionMappingsQuery = _context.AttachmentVersionMappings
|
||||||
.Include(av => av.ChildAttachment)
|
.Include(av => av.ChildAttachment)
|
||||||
.ThenInclude(da => da!.UploadedBy)
|
.ThenInclude(da => da!.UploadedBy)
|
||||||
.Include(av => av.ChildAttachment)
|
.Include(av => av.ChildAttachment)
|
||||||
.ThenInclude(da => da!.UpdatedBy)
|
.ThenInclude(da => da!.UpdatedBy)
|
||||||
.Where(av => av.ParentAttachmentId == parentAttachmentId && av.TenantId == tenantId)
|
.Where(av => av.ParentAttachmentId == parentAttachmentId && av.TenantId == tenantId);
|
||||||
|
|
||||||
|
var totalPages = await versionMappingsQuery.CountAsync();
|
||||||
|
var totalCount = totalPages / pageSize;
|
||||||
|
|
||||||
|
var versionMappings = await versionMappingsQuery
|
||||||
.OrderByDescending(da => da.ChildAttachment!.UploadedAt)
|
.OrderByDescending(da => da.ChildAttachment!.UploadedAt)
|
||||||
.Skip((pageNumber - 1) * pageSize)
|
.Skip((pageNumber - 1) * pageSize)
|
||||||
.Take(pageSize)
|
.Take(pageSize)
|
||||||
@ -428,13 +445,21 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
_logger.LogInfo("Found {Count} versions for ParentAttachmentId: {ParentAttachmentId}", versionMappings.Count, parentAttachmentId);
|
_logger.LogInfo("Found {Count} versions for ParentAttachmentId: {ParentAttachmentId}", versionMappings.Count, parentAttachmentId);
|
||||||
|
|
||||||
// Map the retrieved child attachments to view models with version info
|
// Map the retrieved child attachments to view models with version info
|
||||||
var response = versionMappings.Select(versionMapping =>
|
var attachmentVersionVMs = versionMappings.Select(versionMapping =>
|
||||||
{
|
{
|
||||||
var documentVM = _mapper.Map<AttachmentVersionVM>(versionMapping.ChildAttachment);
|
var documentVM = _mapper.Map<AttachmentVersionVM>(versionMapping.ChildAttachment);
|
||||||
documentVM.Version = versionMapping.Version;
|
documentVM.Version = versionMapping.Version;
|
||||||
return documentVM;
|
return documentVM;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
CurrentPage = pageNumber,
|
||||||
|
TotalPages = totalPages,
|
||||||
|
TotalEntites = totalCount,
|
||||||
|
Data = attachmentVersionVMs,
|
||||||
|
};
|
||||||
|
|
||||||
_logger.LogInfo("Successfully mapped version data for ParentAttachmentId: {ParentAttachmentId}", parentAttachmentId);
|
_logger.LogInfo("Successfully mapped version data for ParentAttachmentId: {ParentAttachmentId}", parentAttachmentId);
|
||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Document versions fetched successfully", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Document versions fetched successfully", 200));
|
||||||
|
@ -3,6 +3,7 @@ using AutoMapper.QueryableExtensions;
|
|||||||
using Marco.Pms.DataAccess.Data;
|
using Marco.Pms.DataAccess.Data;
|
||||||
using Marco.Pms.Model.Activities;
|
using Marco.Pms.Model.Activities;
|
||||||
using Marco.Pms.Model.Dtos.Project;
|
using Marco.Pms.Model.Dtos.Project;
|
||||||
|
using Marco.Pms.Model.Dtos.Util;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
using Marco.Pms.Model.MongoDBModels.Project;
|
using Marco.Pms.Model.MongoDBModels.Project;
|
||||||
@ -46,6 +47,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
|
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
|
||||||
_generalHelper = generalHelper ?? throw new ArgumentNullException(nameof(generalHelper));
|
_generalHelper = generalHelper ?? throw new ArgumentNullException(nameof(generalHelper));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region =================================================================== Project Get APIs ===================================================================
|
#region =================================================================== Project Get APIs ===================================================================
|
||||||
|
|
||||||
public async Task<ApiResponse<object>> GetAllProjectsBasicAsync(Guid tenantId, Employee loggedInEmployee)
|
public async Task<ApiResponse<object>> GetAllProjectsBasicAsync(Guid tenantId, Employee loggedInEmployee)
|
||||||
@ -1462,6 +1464,36 @@ namespace Marco.Pms.Services.Service
|
|||||||
Response = ApiResponse<object>.SuccessResponse(new { id = task.Id }, "Task deleted successfully.", 200)
|
Response = ApiResponse<object>.SuccessResponse(new { id = task.Id }, "Task deleted successfully.", 200)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region =================================================================== Project-Level Permission APIs ===================================================================
|
||||||
|
public async Task<ApiResponse<object>> ManageProjectLevelPermissionAsync(ProjctLevelPermissionDto model, Guid tenantId, Employee loggedInEmployee)
|
||||||
|
{
|
||||||
|
var employeeTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
return await context.ProjectAllocations.FirstOrDefaultAsync(e => e.Id == model.EmployeeId && e.TenantId == tenantId && e.IsActive);
|
||||||
|
});
|
||||||
|
var projectTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
return await context.Projects.FirstOrDefaultAsync(p => p.Id == model.ProjectId && p.TenantId == tenantId);
|
||||||
|
});
|
||||||
|
var featurePermissionsTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
});
|
||||||
|
return ApiResponse<object>.SuccessResponse("");
|
||||||
|
}
|
||||||
|
public async Task<ApiResponse<object>> GetAssignedProjectLevelPermissionAsync(Guid employeeId, Guid projectId, Guid tenantId, Employee loggedInEmployee)
|
||||||
|
{
|
||||||
|
return ApiResponse<object>.SuccessResponse("");
|
||||||
|
}
|
||||||
|
public async Task<ApiResponse<object>> AssignProjectLevelModulesAsync(Guid tenantId, Employee loggedInEmployee)
|
||||||
|
{
|
||||||
|
return ApiResponse<object>.SuccessResponse("");
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Helper Functions ===================================================================
|
#region =================================================================== Helper Functions ===================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user