Added new get menu list for mobile
This commit is contained in:
parent
6253ba7de3
commit
03f7a5ba14
13
Marco.Pms.Model/ViewModels/DocumentManager/MenuItemVM.cs
Normal file
13
Marco.Pms.Model/ViewModels/DocumentManager/MenuItemVM.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.ViewModels.DocumentManager
|
||||
{
|
||||
public class MenuItemVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
public string? Icon { get; set; }
|
||||
public bool Available { get; set; }
|
||||
public string? Link { get; set; }
|
||||
public List<SubMenuItemVM> Submenu { get; set; } = new List<SubMenuItemVM>();
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
namespace Marco.Pms.Model.ViewModels.DocumentManager
|
||||
{
|
||||
public class MenuSectionApplicationVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public bool Available { get; set; }
|
||||
}
|
||||
}
|
11
Marco.Pms.Model/ViewModels/DocumentManager/MenuSectionVM.cs
Normal file
11
Marco.Pms.Model/ViewModels/DocumentManager/MenuSectionVM.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace Marco.Pms.Model.ViewModels.DocumentManager
|
||||
{
|
||||
public class MenuSectionVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string? Header { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public List<MenuItemVM> Items { get; set; } = new List<MenuItemVM>();
|
||||
}
|
||||
}
|
12
Marco.Pms.Model/ViewModels/DocumentManager/SubMenuItemVM.cs
Normal file
12
Marco.Pms.Model/ViewModels/DocumentManager/SubMenuItemVM.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Marco.Pms.Model.ViewModels.DocumentManager
|
||||
{
|
||||
public class SubMenuItemVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
public bool Available { get; set; }
|
||||
|
||||
public string? Link { get; set; }
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ using Marco.Pms.Model.AppMenu;
|
||||
using Marco.Pms.Model.Dtos.AppMenu;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Marco.Pms.Model.ViewModels.AppMenu;
|
||||
using Marco.Pms.Model.ViewModels.DocumentManager;
|
||||
using Marco.Pms.Services.Helpers;
|
||||
using Marco.Pms.Services.Service;
|
||||
using MarcoBMS.Services.Helpers;
|
||||
@ -518,7 +519,8 @@ namespace Marco.Pms.Services.Controllers
|
||||
_logger.LogInfo("Fetched sidebar menu successfully. Tenant: {TenantId}, EmployeeId: {EmployeeId}, SectionsReturned: {Count}",
|
||||
tenantId, employeeId, menus.Count);
|
||||
|
||||
return Ok(ApiResponse<object>.SuccessResponse(menus, "Sidebar menu fetched successfully"));
|
||||
var response = _mapper.Map<List<MenuSectionVM>>(menus);
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Sidebar menu fetched successfully"));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -612,6 +614,121 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("get/menu-mobile")]
|
||||
public async Task<IActionResult> GetAppSideBarMenuForobile()
|
||||
{
|
||||
// Step 1: Get logged-in employee
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var employeeId = loggedInEmployee.Id;
|
||||
|
||||
using var scope = _serviceScopeFactory.CreateScope();
|
||||
var _permissions = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||
|
||||
try
|
||||
{
|
||||
// Step 2: Fetch all menu sections for the tenant
|
||||
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
|
||||
List<MenuSectionApplicationVM> response = new List<MenuSectionApplicationVM>();
|
||||
|
||||
foreach (var menu in menus)
|
||||
{
|
||||
var allowedItems = new List<MenuItem>();
|
||||
|
||||
foreach (var item in menu.Items)
|
||||
{
|
||||
// --- Item permission check ---
|
||||
if (!item.PermissionIds.Any())
|
||||
{
|
||||
MenuSectionApplicationVM menuVM = new MenuSectionApplicationVM
|
||||
{
|
||||
Id = item.Id,
|
||||
Name = item.Text,
|
||||
Available = true
|
||||
};
|
||||
response.Add(menuVM);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Convert permission string IDs to GUIDs
|
||||
var menuPermissionIds = item.PermissionIds
|
||||
.Select(Guid.Parse)
|
||||
.ToList();
|
||||
|
||||
bool isAllowed = await _permissions.HasPermissionAny(menuPermissionIds, employeeId);
|
||||
|
||||
// If allowed, filter its submenus as well
|
||||
if (isAllowed)
|
||||
{
|
||||
if (item.Submenu?.Any() == true)
|
||||
{
|
||||
var allowedSubmenus = new List<SubMenuItem>();
|
||||
|
||||
foreach (var subItem in item.Submenu)
|
||||
{
|
||||
if (!subItem.PermissionIds.Any())
|
||||
{
|
||||
MenuSectionApplicationVM subMenuVM = new MenuSectionApplicationVM
|
||||
{
|
||||
Id = item.Id,
|
||||
Name = item.Text,
|
||||
Available = true
|
||||
};
|
||||
response.Add(subMenuVM);
|
||||
continue;
|
||||
}
|
||||
|
||||
var subMenuPermissionIds = subItem.PermissionIds
|
||||
.Select(Guid.Parse)
|
||||
.ToList();
|
||||
|
||||
bool isSubItemAllowed = await _permissions.HasPermissionAny(subMenuPermissionIds, employeeId);
|
||||
|
||||
if (isSubItemAllowed)
|
||||
{
|
||||
MenuSectionApplicationVM subMenuVM = new MenuSectionApplicationVM
|
||||
{
|
||||
Id = item.Id,
|
||||
Name = item.Text,
|
||||
Available = true
|
||||
};
|
||||
response.Add(subMenuVM);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace with filtered submenus
|
||||
item.Submenu = allowedSubmenus;
|
||||
}
|
||||
|
||||
MenuSectionApplicationVM menuVM = new MenuSectionApplicationVM
|
||||
{
|
||||
Id = item.Id,
|
||||
Name = item.Text,
|
||||
Available = true
|
||||
};
|
||||
response.Add(menuVM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Replace with filtered items
|
||||
menu.Items = allowedItems;
|
||||
}
|
||||
|
||||
// Step 3: Log success
|
||||
_logger.LogInfo("Fetched sidebar menu successfully. Tenant: {TenantId}, EmployeeId: {EmployeeId}, SectionsReturned: {Count}",
|
||||
tenantId, employeeId, menus.Count);
|
||||
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Sidebar menu fetched successfully", 200));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Step 4: Handle unexpected errors
|
||||
_logger.LogError(ex, "Error occurred while fetching sidebar menu. Tenant: {TenantId}, EmployeeId: {EmployeeId}",
|
||||
tenantId, employeeId);
|
||||
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server Error", "An unexpected error occurred while fetching the sidebar menu.", 500));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -311,12 +311,24 @@ namespace Marco.Pms.Services.MappingProfiles
|
||||
#region ======================================================= AppMenu =======================================================
|
||||
CreateMap<CreateMenuSectionDto, MenuSection>();
|
||||
CreateMap<UpdateMenuSectionDto, MenuSection>();
|
||||
CreateMap<MenuSection, MenuSectionVM>()
|
||||
.ForMember(
|
||||
dest => dest.Name,
|
||||
opt => opt.MapFrom(src => src.Title));
|
||||
|
||||
CreateMap<CreateMenuItemDto, MenuItem>();
|
||||
CreateMap<UpdateMenuItemDto, MenuItem>();
|
||||
CreateMap<MenuItem, MenuItemVM>()
|
||||
.ForMember(
|
||||
dest => dest.Name,
|
||||
opt => opt.MapFrom(src => src.Text));
|
||||
|
||||
CreateMap<CreateSubMenuItemDto, SubMenuItem>();
|
||||
CreateMap<UpdateSubMenuItemDto, SubMenuItem>();
|
||||
CreateMap<SubMenuItem, SubMenuItemVM>()
|
||||
.ForMember(
|
||||
dest => dest.Name,
|
||||
opt => opt.MapFrom(src => src.Text));
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user