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.Dtos.AppMenu;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
using Marco.Pms.Model.ViewModels.AppMenu;
|
using Marco.Pms.Model.ViewModels.AppMenu;
|
||||||
|
using Marco.Pms.Model.ViewModels.DocumentManager;
|
||||||
using Marco.Pms.Services.Helpers;
|
using Marco.Pms.Services.Helpers;
|
||||||
using Marco.Pms.Services.Service;
|
using Marco.Pms.Services.Service;
|
||||||
using MarcoBMS.Services.Helpers;
|
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}",
|
_logger.LogInfo("Fetched sidebar menu successfully. Tenant: {TenantId}, EmployeeId: {EmployeeId}, SectionsReturned: {Count}",
|
||||||
tenantId, employeeId, menus.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)
|
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 =======================================================
|
#region ======================================================= AppMenu =======================================================
|
||||||
CreateMap<CreateMenuSectionDto, MenuSection>();
|
CreateMap<CreateMenuSectionDto, MenuSection>();
|
||||||
CreateMap<UpdateMenuSectionDto, MenuSection>();
|
CreateMap<UpdateMenuSectionDto, MenuSection>();
|
||||||
|
CreateMap<MenuSection, MenuSectionVM>()
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.Name,
|
||||||
|
opt => opt.MapFrom(src => src.Title));
|
||||||
|
|
||||||
CreateMap<CreateMenuItemDto, MenuItem>();
|
CreateMap<CreateMenuItemDto, MenuItem>();
|
||||||
CreateMap<UpdateMenuItemDto, MenuItem>();
|
CreateMap<UpdateMenuItemDto, MenuItem>();
|
||||||
|
CreateMap<MenuItem, MenuItemVM>()
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.Name,
|
||||||
|
opt => opt.MapFrom(src => src.Text));
|
||||||
|
|
||||||
CreateMap<CreateSubMenuItemDto, SubMenuItem>();
|
CreateMap<CreateSubMenuItemDto, SubMenuItem>();
|
||||||
CreateMap<UpdateSubMenuItemDto, SubMenuItem>();
|
CreateMap<UpdateSubMenuItemDto, SubMenuItem>();
|
||||||
|
CreateMap<SubMenuItem, SubMenuItemVM>()
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.Name,
|
||||||
|
opt => opt.MapFrom(src => src.Text));
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user