2026-01-10 20:39:17 +01:00
|
|
|
using PlanTempus.Application.Features.Localization.Services;
|
|
|
|
|
using PlanTempus.Application.Features.Menu.Models;
|
|
|
|
|
|
|
|
|
|
namespace PlanTempus.Application.Features.Menu.Services;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Mock implementation of IMenuService with hardcoded menu data.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class MockMenuService : IMenuService
|
|
|
|
|
{
|
|
|
|
|
private readonly ILocalizationService _localize;
|
|
|
|
|
|
|
|
|
|
public MockMenuService(ILocalizationService localize)
|
|
|
|
|
{
|
|
|
|
|
_localize = localize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<MenuGroup> GetMenuForRole(UserRole role, string? currentUrl = null)
|
|
|
|
|
{
|
|
|
|
|
var allGroups = GetAllMenuGroups();
|
|
|
|
|
|
|
|
|
|
return allGroups
|
|
|
|
|
.Select(g => new MenuGroup
|
|
|
|
|
{
|
|
|
|
|
Id = g.Id,
|
|
|
|
|
Label = _localize.Get($"groups.{g.Id}"),
|
|
|
|
|
SortOrder = g.SortOrder,
|
|
|
|
|
Items = g.Items
|
|
|
|
|
.Where(i => role >= i.MinimumRole)
|
|
|
|
|
.Select(i => new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = i.Id,
|
|
|
|
|
Label = _localize.Get($"menu.{i.Id}"),
|
|
|
|
|
Icon = i.Icon,
|
|
|
|
|
Url = i.Url,
|
|
|
|
|
MinimumRole = i.MinimumRole,
|
|
|
|
|
SortOrder = i.SortOrder,
|
|
|
|
|
IsActive = currentUrl != null && i.Url.Equals(currentUrl, StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
})
|
|
|
|
|
.OrderBy(i => i.SortOrder)
|
|
|
|
|
.ToList()
|
|
|
|
|
})
|
|
|
|
|
.Where(g => g.Items.Any())
|
|
|
|
|
.OrderBy(g => g.SortOrder)
|
|
|
|
|
.ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static List<MenuGroup> GetAllMenuGroups()
|
|
|
|
|
{
|
|
|
|
|
return new List<MenuGroup>
|
|
|
|
|
{
|
|
|
|
|
// DASHBOARD GROUP
|
|
|
|
|
new MenuGroup
|
|
|
|
|
{
|
|
|
|
|
Id = "dashboard",
|
|
|
|
|
Label = "Dashboard",
|
|
|
|
|
SortOrder = 1,
|
|
|
|
|
Items = new List<MenuItem>
|
|
|
|
|
{
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "home",
|
|
|
|
|
Label = "Dashboard",
|
|
|
|
|
Icon = "ph-squares-four",
|
|
|
|
|
Url = "/",
|
|
|
|
|
MinimumRole = UserRole.Staff,
|
|
|
|
|
SortOrder = 1
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "calendar",
|
|
|
|
|
Label = "Kalender",
|
|
|
|
|
Icon = "ph-calendar",
|
|
|
|
|
Url = "/poc-calendar.html",
|
|
|
|
|
MinimumRole = UserRole.Staff,
|
|
|
|
|
SortOrder = 2
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "pos",
|
|
|
|
|
Label = "Kasse",
|
2026-01-11 21:08:56 +01:00
|
|
|
Icon = "ph-cash-register",
|
|
|
|
|
Url = "/kasse",
|
2026-01-10 20:39:17 +01:00
|
|
|
MinimumRole = UserRole.Staff,
|
|
|
|
|
SortOrder = 3
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// DATA GROUP
|
|
|
|
|
new MenuGroup
|
|
|
|
|
{
|
|
|
|
|
Id = "data",
|
|
|
|
|
Label = "Data",
|
|
|
|
|
SortOrder = 2,
|
|
|
|
|
Items = new List<MenuItem>
|
|
|
|
|
{
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "products",
|
|
|
|
|
Label = "Produkter & Lager",
|
|
|
|
|
Icon = "ph-package",
|
|
|
|
|
Url = "/poc-produkter.html",
|
|
|
|
|
MinimumRole = UserRole.Manager,
|
|
|
|
|
SortOrder = 1
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "suppliers",
|
|
|
|
|
Label = "Leverandører",
|
|
|
|
|
Icon = "ph-truck",
|
|
|
|
|
Url = "/poc-leverandoerer.html",
|
|
|
|
|
MinimumRole = UserRole.Manager,
|
|
|
|
|
SortOrder = 2
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "customers",
|
|
|
|
|
Label = "Kunder",
|
|
|
|
|
Icon = "ph-users",
|
|
|
|
|
Url = "/customers",
|
|
|
|
|
MinimumRole = UserRole.Staff,
|
|
|
|
|
SortOrder = 3
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "employees",
|
|
|
|
|
Label = "Medarbejdere",
|
|
|
|
|
Icon = "ph-user",
|
|
|
|
|
Url = "/poc-medarbejdere.html",
|
|
|
|
|
MinimumRole = UserRole.Manager,
|
|
|
|
|
SortOrder = 4
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// ANALYSE GROUP
|
|
|
|
|
new MenuGroup
|
|
|
|
|
{
|
|
|
|
|
Id = "analytics",
|
|
|
|
|
Label = "Analyse",
|
|
|
|
|
SortOrder = 3,
|
|
|
|
|
Items = new List<MenuItem>
|
|
|
|
|
{
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "reports",
|
|
|
|
|
Label = "Statistik & Rapporter",
|
|
|
|
|
Icon = "ph-chart-bar",
|
|
|
|
|
Url = "/reports",
|
|
|
|
|
MinimumRole = UserRole.Manager,
|
|
|
|
|
SortOrder = 1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// SYSTEM GROUP
|
|
|
|
|
new MenuGroup
|
|
|
|
|
{
|
|
|
|
|
Id = "system",
|
|
|
|
|
Label = "System",
|
|
|
|
|
SortOrder = 4,
|
|
|
|
|
Items = new List<MenuItem>
|
|
|
|
|
{
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "settings",
|
|
|
|
|
Label = "Indstillinger",
|
|
|
|
|
Icon = "ph-gear",
|
|
|
|
|
Url = "/poc-indstillinger.html",
|
|
|
|
|
MinimumRole = UserRole.Admin,
|
|
|
|
|
SortOrder = 1
|
|
|
|
|
},
|
|
|
|
|
new MenuItem
|
|
|
|
|
{
|
|
|
|
|
Id = "account",
|
|
|
|
|
Label = "Abonnement & Konto",
|
|
|
|
|
Icon = "ph-credit-card",
|
|
|
|
|
Url = "/poc-konto.html",
|
|
|
|
|
MinimumRole = UserRole.Admin,
|
|
|
|
|
SortOrder = 2
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|