diff --git a/Marco.Pms.Model/Entitlements/MenuStaticMaster.cs b/Marco.Pms.Model/Entitlements/MenuStaticMaster.cs new file mode 100644 index 0000000..941b874 --- /dev/null +++ b/Marco.Pms.Model/Entitlements/MenuStaticMaster.cs @@ -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 + { + new MenuItem + { + Text = "Dashboard", + Icon = "bx bx-home", + Available = true, + Link = "/dashboard", + PermissionIds = new List(), + Submenu = new List() + }, + new MenuItem + { + Text = "Projects", + Icon = "bx bx-building-house", + Available = true, + Link = "", + PermissionIds = new List + { + "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 + { + new SubMenuItem + { + Text = "Project List", + Available = true, + Link = "/projects", + PermissionIds = new List + { + "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 + { + "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 + { + "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() + }, + new SubMenuItem + { + Text = "Project Report", + Available = true, + Link = "/activities/reports", + PermissionIds = new List() + }, + } + }, + new MenuItem + { + Text = "Employees", + Icon = "bx bx-user", + Available = true, + Link = "/employees", + PermissionIds = new List + { + "60611762-7f8a-4fb5-b53f-b1139918796b", + "b82d2b7e-0d52-45f3-997b-c008ea460e7f", + "a97d366a-c2bb-448d-be93-402bd2324566", + "fbd213e0-0250-46f1-9f5f-4b2a1e6e76a3" + }, + Submenu = new List() + }, + new MenuItem + { + Text = "Attendance", + Icon = "bx bx-list-ul", + Available = true, + Link = "/activities/Attendance", + PermissionIds = new List + { + "915e6bff-65f6-4e3f-aea8-3fd217d3ea9e", + "57802c4a-00aa-4a1f-a048-fd2f70dd44b6", + "ccb0589f-712b-43de-92ed-5b6088e7dc4e" + }, + Submenu = new List() + }, + new MenuItem + { + Text = "Directory", + Icon = "bx bx-group", + Available = true, + Link = "/directory", + PermissionIds = new List + { + "4286a13b-bb40-4879-8c6d-18e9e393beda", + "62668630-13ce-4f52-a0f0-db38af2230c5", + "0f919170-92d4-4337-abd3-49b66fc871bb" + }, + Submenu = new List() + }, + new MenuItem + { + Text = "Expense", + Icon = "bx bx-receipt", + Available = true, + Link = "/expenses", + PermissionIds = new List + { + "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() + }, + new MenuItem + { + Text = "Administration", + Icon = "bx bx-box", + Available = true, + Link = "", + PermissionIds = new List + { + "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 + { + new SubMenuItem + { + Text = "Tenant", + Available = true, + Link = "/tenants", + PermissionIds = new List + { + "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 + { + "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(), + Submenu = new List() + }, + } + }; + } +} diff --git a/Marco.Pms.Services/Controllers/AppMenuController.cs b/Marco.Pms.Services/Controllers/AppMenuController.cs index 038789f..46889ec 100644 --- a/Marco.Pms.Services/Controllers/AppMenuController.cs +++ b/Marco.Pms.Services/Controllers/AppMenuController.cs @@ -456,6 +456,14 @@ namespace Marco.Pms.Services.Controllers // Step 2: Fetch all menu sections for the tenant var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId); + if (!(menus?.Any() ?? false)) + { + menus = new List + { + MenuStaticMaster.menu + }; + } + foreach (var menu in menus) { var allowedItems = new List(); @@ -632,6 +640,13 @@ namespace Marco.Pms.Services.Controllers { // Step 2: Fetch all menu sections for the tenant var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId); + if (!(menus?.Any() ?? false)) + { + menus = new List + { + MenuStaticMaster.menu + }; + } List response = new List(); foreach (var menu in menus) @@ -718,7 +733,42 @@ namespace Marco.Pms.Services.Controllers 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(); + return await permissions.HasPermission(PermissionsMaster.ViewDocument, employeeId); + }); + + var uploadDocumentTask = Task.Run(async () => + { + using var taskScope = _serviceScopeFactory.CreateScope(); + var permissions = taskScope.ServiceProvider.GetRequiredService(); + return await permissions.HasPermission(PermissionsMaster.UploadDocument, employeeId); + }); + + var verifyDocumentTask = Task.Run(async () => + { + using var taskScope = _serviceScopeFactory.CreateScope(); + var permissions = taskScope.ServiceProvider.GetRequiredService(); + return await permissions.HasPermission(PermissionsMaster.VerifyDocument, employeeId); + }); + + var downloadDocumentTask = Task.Run(async () => + { + using var taskScope = _serviceScopeFactory.CreateScope(); + var permissions = taskScope.ServiceProvider.GetRequiredService(); + 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 { diff --git a/Marco.Pms.Services/Service/ExpensesService.cs b/Marco.Pms.Services/Service/ExpensesService.cs index 76c92e1..09a4682 100644 --- a/Marco.Pms.Services/Service/ExpensesService.cs +++ b/Marco.Pms.Services/Service/ExpensesService.cs @@ -119,8 +119,12 @@ namespace Marco.Pms.Services.Service // 2. --- Deserialize Filter and Apply --- ExpensesFilter? expenseFilter = TryDeserializeFilter(filter); - var (totalPages, totalCount, cacheList) = await _cache.GetExpenseListAsync(tenantId, loggedInEmployeeId, hasViewAllPermissionTask.Result, hasViewSelfPermissionTask.Result, - pageNumber, pageSize, expenseFilter, searchString); + //var (totalPages, totalCount, cacheList) = await _cache.GetExpenseListAsync(tenantId, loggedInEmployeeId, hasViewAllPermissionTask.Result, hasViewSelfPermissionTask.Result, + // pageNumber, pageSize, expenseFilter, searchString); + + List? cacheList = null; + var totalPages = 0; + var totalCount = 0; // 3. --- Build Base Query and Apply Permissions --- // Start with a base IQueryable. Filters will be chained onto this. @@ -268,7 +272,8 @@ namespace Marco.Pms.Services.Service { try { - var expenseDetails = await _cache.GetExpenseDetailsById(id, tenantId); + //ExpenseDetailsMongoDB? expenseDetails = await _cache.GetExpenseDetailsById(id, tenantId); + ExpenseDetailsMongoDB? expenseDetails = null; if (expenseDetails == null) { var expense = await _context.Expenses.AsNoTracking().FirstOrDefaultAsync(e => e.Id == id && e.TenantId == tenantId);