Organization_Management #142
212
Marco.Pms.Model/Entitlements/MenuStaticMaster.cs
Normal file
212
Marco.Pms.Model/Entitlements/MenuStaticMaster.cs
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
using Marco.Pms.Model.AppMenu;
|
||||||
|
|
||||||
|
namespace Marco.Pms.Model.Entitlements
|
||||||
|
{
|
||||||
|
public static class MenuStaticMaster
|
||||||
|
{
|
||||||
|
public static readonly MenuSection menu = new MenuSection
|
||||||
|
{
|
||||||
|
Header = "Main Navigation",
|
||||||
|
Title = "Main Menu",
|
||||||
|
Items = new List<MenuItem>
|
||||||
|
{
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Dashboard",
|
||||||
|
Icon = "bx bx-home",
|
||||||
|
Available = true,
|
||||||
|
Link = "/dashboard",
|
||||||
|
PermissionIds = new List<string>(),
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Projects",
|
||||||
|
Icon = "bx bx-building-house",
|
||||||
|
Available = true,
|
||||||
|
Link = "",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"6ea44136-987e-44ba-9e5d-1cf8f5837ebc",
|
||||||
|
"172fc9b6-755b-4f62-ab26-55c34a330614",
|
||||||
|
"b94802ce-0689-4643-9e1d-11c86950c35b",
|
||||||
|
"8d7cc6e3-9147-41f7-aaa7-fa507e450bd4",
|
||||||
|
"cf2825ad-453b-46aa-91d9-27c124d63373",
|
||||||
|
"9fcc5f87-25e3-4846-90ac-67a71ab92e3c",
|
||||||
|
"08752f33-3b29-4816-b76b-ea8a968ed3c5",
|
||||||
|
"6a32379b-8b3f-49a6-8c48-4b7ac1b55dc2",
|
||||||
|
"db4e40c5-2ba9-4b6d-b8a6-a16a250ff99c"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>
|
||||||
|
{
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Project List",
|
||||||
|
Available = true,
|
||||||
|
Link = "/projects",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"6ea44136-987e-44ba-9e5d-1cf8f5837ebc",
|
||||||
|
"172fc9b6-755b-4f62-ab26-55c34a330614",
|
||||||
|
"b94802ce-0689-4643-9e1d-11c86950c35b",
|
||||||
|
"8d7cc6e3-9147-41f7-aaa7-fa507e450bd4",
|
||||||
|
"cf2825ad-453b-46aa-91d9-27c124d63373",
|
||||||
|
"9fcc5f87-25e3-4846-90ac-67a71ab92e3c",
|
||||||
|
"08752f33-3b29-4816-b76b-ea8a968ed3c5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Daily Task Planning",
|
||||||
|
Available = true,
|
||||||
|
Link = "/activities/task",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"8d7cc6e3-9147-41f7-aaa7-fa507e450bd4",
|
||||||
|
"9fcc5f87-25e3-4846-90ac-67a71ab92e3c",
|
||||||
|
"6a32379b-8b3f-49a6-8c48-4b7ac1b55dc2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Daily Progress Report",
|
||||||
|
Available = true,
|
||||||
|
Link = "/activities/records",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"9fcc5f87-25e3-4846-90ac-67a71ab92e3c",
|
||||||
|
"6a32379b-8b3f-49a6-8c48-4b7ac1b55dc2",
|
||||||
|
"db4e40c5-2ba9-4b6d-b8a6-a16a250ff99c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Image Gallary",
|
||||||
|
Available = true,
|
||||||
|
Link = "/gallary",
|
||||||
|
PermissionIds = new List<string>()
|
||||||
|
},
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Project Report",
|
||||||
|
Available = true,
|
||||||
|
Link = "/activities/reports",
|
||||||
|
PermissionIds = new List<string>()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Employees",
|
||||||
|
Icon = "bx bx-user",
|
||||||
|
Available = true,
|
||||||
|
Link = "/employees",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"60611762-7f8a-4fb5-b53f-b1139918796b",
|
||||||
|
"b82d2b7e-0d52-45f3-997b-c008ea460e7f",
|
||||||
|
"a97d366a-c2bb-448d-be93-402bd2324566",
|
||||||
|
"fbd213e0-0250-46f1-9f5f-4b2a1e6e76a3"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Attendance",
|
||||||
|
Icon = "bx bx-list-ul",
|
||||||
|
Available = true,
|
||||||
|
Link = "/activities/Attendance",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"915e6bff-65f6-4e3f-aea8-3fd217d3ea9e",
|
||||||
|
"57802c4a-00aa-4a1f-a048-fd2f70dd44b6",
|
||||||
|
"ccb0589f-712b-43de-92ed-5b6088e7dc4e"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Directory",
|
||||||
|
Icon = "bx bx-group",
|
||||||
|
Available = true,
|
||||||
|
Link = "/directory",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"4286a13b-bb40-4879-8c6d-18e9e393beda",
|
||||||
|
"62668630-13ce-4f52-a0f0-db38af2230c5",
|
||||||
|
"0f919170-92d4-4337-abd3-49b66fc871bb"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Expense",
|
||||||
|
Icon = "bx bx-receipt",
|
||||||
|
Available = true,
|
||||||
|
Link = "/expenses",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"385be49f-8fde-440e-bdbc-3dffeb8dd116",
|
||||||
|
"01e06444-9ca7-4df4-b900-8c3fa051b92f",
|
||||||
|
"0f57885d-bcb2-4711-ac95-d841ace6d5a7",
|
||||||
|
"1f4bda08-1873-449a-bb66-3e8222bd871b",
|
||||||
|
"eaafdd76-8aac-45f9-a530-315589c6deca",
|
||||||
|
"ea5a1529-4ee8-4828-80ea-0e23c9d4dd11",
|
||||||
|
"ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Administration",
|
||||||
|
Icon = "bx bx-box",
|
||||||
|
Available = true,
|
||||||
|
Link = "",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"5ffbafe0-7ab0-48b1-bb50-c1bf76b65f9d",
|
||||||
|
"588a8824-f924-4955-82d8-fc51956cf323",
|
||||||
|
"d032cb1a-3f30-462c-bef0-7ace73a71c0b",
|
||||||
|
"00e20637-ce8d-4417-bec4-9b31b5e65092",
|
||||||
|
"647145c6-2108-4c98-aab4-178602236e55"
|
||||||
|
},
|
||||||
|
Submenu = new List<SubMenuItem>
|
||||||
|
{
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Tenant",
|
||||||
|
Available = true,
|
||||||
|
Link = "/tenants",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"d032cb1a-3f30-462c-bef0-7ace73a71c0b",
|
||||||
|
"00e20637-ce8d-4417-bec4-9b31b5e65092",
|
||||||
|
"647145c6-2108-4c98-aab4-178602236e55"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new SubMenuItem
|
||||||
|
{
|
||||||
|
Text = "Masters",
|
||||||
|
Available = true,
|
||||||
|
Link = "/masters",
|
||||||
|
PermissionIds = new List<string>
|
||||||
|
{
|
||||||
|
"5ffbafe0-7ab0-48b1-bb50-c1bf76b65f9d",
|
||||||
|
"588a8824-f924-4955-82d8-fc51956cf323"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new MenuItem
|
||||||
|
{
|
||||||
|
Text = "Inventory",
|
||||||
|
Icon = "bx bx-store",
|
||||||
|
Available = true,
|
||||||
|
Link = "/inventory",
|
||||||
|
PermissionIds = new List<string>(),
|
||||||
|
Submenu = new List<SubMenuItem>()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -456,6 +456,14 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
// Step 2: Fetch all menu sections for the tenant
|
// Step 2: Fetch all menu sections for the tenant
|
||||||
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
|
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
|
||||||
|
|
||||||
|
if (!(menus?.Any() ?? false))
|
||||||
|
{
|
||||||
|
menus = new List<MenuSection>
|
||||||
|
{
|
||||||
|
MenuStaticMaster.menu
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var menu in menus)
|
foreach (var menu in menus)
|
||||||
{
|
{
|
||||||
var allowedItems = new List<MenuItem>();
|
var allowedItems = new List<MenuItem>();
|
||||||
@ -632,6 +640,13 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
{
|
{
|
||||||
// Step 2: Fetch all menu sections for the tenant
|
// Step 2: Fetch all menu sections for the tenant
|
||||||
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
|
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
|
||||||
|
if (!(menus?.Any() ?? false))
|
||||||
|
{
|
||||||
|
menus = new List<MenuSection>
|
||||||
|
{
|
||||||
|
MenuStaticMaster.menu
|
||||||
|
};
|
||||||
|
}
|
||||||
List<MenuSectionApplicationVM> response = new List<MenuSectionApplicationVM>();
|
List<MenuSectionApplicationVM> response = new List<MenuSectionApplicationVM>();
|
||||||
|
|
||||||
foreach (var menu in menus)
|
foreach (var menu in menus)
|
||||||
@ -718,7 +733,42 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
menu.Items = allowedItems;
|
menu.Items = allowedItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _permissions.HasPermission(PermissionsMaster.ViewDocument, employeeId))
|
var viewDocumentTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
using var taskScope = _serviceScopeFactory.CreateScope();
|
||||||
|
var permissions = taskScope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await permissions.HasPermission(PermissionsMaster.ViewDocument, employeeId);
|
||||||
|
});
|
||||||
|
|
||||||
|
var uploadDocumentTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
using var taskScope = _serviceScopeFactory.CreateScope();
|
||||||
|
var permissions = taskScope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await permissions.HasPermission(PermissionsMaster.UploadDocument, employeeId);
|
||||||
|
});
|
||||||
|
|
||||||
|
var verifyDocumentTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
using var taskScope = _serviceScopeFactory.CreateScope();
|
||||||
|
var permissions = taskScope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await permissions.HasPermission(PermissionsMaster.VerifyDocument, employeeId);
|
||||||
|
});
|
||||||
|
|
||||||
|
var downloadDocumentTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
using var taskScope = _serviceScopeFactory.CreateScope();
|
||||||
|
var permissions = taskScope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||||
|
return await permissions.HasPermission(PermissionsMaster.DownloadDocument, employeeId);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.WhenAll(viewDocumentTask, uploadDocumentTask, verifyDocumentTask, downloadDocumentTask);
|
||||||
|
|
||||||
|
var viewDocument = viewDocumentTask.Result;
|
||||||
|
var uploadDocument = uploadDocumentTask.Result;
|
||||||
|
var verifyDocument = verifyDocumentTask.Result;
|
||||||
|
var downloadDocument = downloadDocumentTask.Result;
|
||||||
|
|
||||||
|
if (viewDocument || uploadDocument || verifyDocument || downloadDocument)
|
||||||
{
|
{
|
||||||
response.Add(new MenuSectionApplicationVM
|
response.Add(new MenuSectionApplicationVM
|
||||||
{
|
{
|
||||||
|
@ -119,8 +119,12 @@ namespace Marco.Pms.Services.Service
|
|||||||
// 2. --- Deserialize Filter and Apply ---
|
// 2. --- Deserialize Filter and Apply ---
|
||||||
ExpensesFilter? expenseFilter = TryDeserializeFilter(filter);
|
ExpensesFilter? expenseFilter = TryDeserializeFilter(filter);
|
||||||
|
|
||||||
var (totalPages, totalCount, cacheList) = await _cache.GetExpenseListAsync(tenantId, loggedInEmployeeId, hasViewAllPermissionTask.Result, hasViewSelfPermissionTask.Result,
|
//var (totalPages, totalCount, cacheList) = await _cache.GetExpenseListAsync(tenantId, loggedInEmployeeId, hasViewAllPermissionTask.Result, hasViewSelfPermissionTask.Result,
|
||||||
pageNumber, pageSize, expenseFilter, searchString);
|
// pageNumber, pageSize, expenseFilter, searchString);
|
||||||
|
|
||||||
|
List<ExpenseDetailsMongoDB>? cacheList = null;
|
||||||
|
var totalPages = 0;
|
||||||
|
var totalCount = 0;
|
||||||
|
|
||||||
// 3. --- Build Base Query and Apply Permissions ---
|
// 3. --- Build Base Query and Apply Permissions ---
|
||||||
// Start with a base IQueryable. Filters will be chained onto this.
|
// Start with a base IQueryable. Filters will be chained onto this.
|
||||||
@ -268,7 +272,8 @@ namespace Marco.Pms.Services.Service
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var expenseDetails = await _cache.GetExpenseDetailsById(id, tenantId);
|
//ExpenseDetailsMongoDB? expenseDetails = await _cache.GetExpenseDetailsById(id, tenantId);
|
||||||
|
ExpenseDetailsMongoDB? expenseDetails = null;
|
||||||
if (expenseDetails == null)
|
if (expenseDetails == null)
|
||||||
{
|
{
|
||||||
var expense = await _context.Expenses.AsNoTracking().FirstOrDefaultAsync(e => e.Id == id && e.TenantId == tenantId);
|
var expense = await _context.Expenses.AsNoTracking().FirstOrDefaultAsync(e => e.Id == id && e.TenantId == tenantId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user