import { PermissionCheckerService } from '@abp/auth/permission-checker.service'; import { AppSessionService } from '@shared/common/session/app-session.service'; import { FeatureCheckerService } from '@abp/features/feature-checker.service'; import { Injectable } from '@angular/core'; import { AppMenu } from './app-menu'; import { AppMenuItem } from './app-menu-item'; @Injectable() export class AppNavigationService { constructor( private _permissionCheckerService: PermissionCheckerService, private _appSessionService: AppSessionService, private _featureCheckerService: FeatureCheckerService, ) { } getMenu(): AppMenu { return new AppMenu('MainMenu', 'MainMenu', [ // new AppMenuItem('Dashboard', 'Pages.Administration.Host.Dashboard', 'flaticon-line-graph', '/app/admin/hostDashboard'), // new AppMenuItem('Dashboard', 'Pages.Tenant.Dashboard', 'flaticon-line-graph', '/app/main/dashboard'), // Controller new AppMenuItem('Controller', '', 'flaticon-analytics', '/app/sprintship/controller-routes'), //new AppMenuItem('Controller', '', 'fa fa-clipboard-list', '/app/sprintship/controller-routes-container'), //Laboratory Edition // Controller new AppMenuItem('Locator', '', 'fa fa-location-arrow', '/app/sprintship/locator'), new AppMenuItem('Clinics', '', 'flaticon-bus-stop', '', [ new AppMenuItem('Clinics', 'Pages.Clinics', 'flaticon-business', '/app/main/laboratory/clinics', undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.ClinicManagement'); }), new AppMenuItem('Stops', 'Pages.RouteStops', 'flaticon-home-2', '/app/main/laboratory/routeStops', undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.RouteStopManagement'); }), //new AppMenuItem('Schedules', 'Pages.RouteSchedules', 'flaticon-globe', '/app/main/laboratory/routeSchedules', undefined, undefined, undefined, () => { //return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.ClinicScheduleManagement'); //}), //new AppMenuItem('Schedule Details', 'Pages.RouteScheduleDetails', 'flaticon-time-2', '/app/main/laboratory/routeScheduleDetails', undefined, undefined, undefined, () => { //return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.ClinicScheduleManagement'); //}), new AppMenuItem('Route Types', 'Pages.RouteTypes', 'flaticon-location', '/app/main/laboratory/routeTypes'), new AppMenuItem('Route Definitions', 'Pages.RouteDefinitions', 'flaticon-presentation', '/app/main/laboratory/routeDefinitions'), ], undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture'); }), //Locations new AppMenuItem('Locations', '', 'fa fa-map-marked', '', [ new AppMenuItem('Location', 'Pages.Administration.Locations', 'fas fa-map-marker-alt', '/app/sprintship/locations'), // new AppMenuItem('Timezones', 'Pages.Administration.TimeZones', 'flaticon-globe', '/app/sprintship/timezones'), new AppMenuItem('Timezones', 'Pages.TimeZones', 'fas fa-globe', '/app/sprintship/timezones'), new AppMenuItem('Proximities', 'Pages.Administration.ProximitiesPages.Administration.Proximities', 'fas fa-street-view', '/app/sprintship/proximity'), new AppMenuItem('UserLocations', 'Pages.Administration.UserLocations', 'fas fa-user-check', '/app/sprintship/user-location'), new AppMenuItem('VehicleLocations', 'Pages.Administration.VehicleLocations', 'fa-layer-group', '/app/sprintship/locationvehicle') ]), //Routes new AppMenuItem('Routes', 'Pages.Shipping.Routes', 'fa fa-route', '', [ new AppMenuItem('Orders', 'Pages.Orders', 'fas fa-box', '/app/sprintship/order'), new AppMenuItem('Routes', 'Pages.Shipping.Routes', 'fa fa-map-signs', '/app/sprintship/routes'), new AppMenuItem('Templates', 'Pages.Shipping.RoutesTemplate', 'fas fa-clone', '/app/sprintship/routes-template'), new AppMenuItem('Template Types', 'Pages.Shipping.RoutesTemplate', 'fas fa-newspaper', '/app/sprintship/routes-template-types'), new AppMenuItem('Route4Me', 'Pages.Shipping.Routes.RouteForMe', 'fas fa-map', '', [ new AppMenuItem('Route List', 'Pages.Shipping.Routes.RouteForMe', 'fas fa-list', '/app/sprintship/route4me/route-list'), new AppMenuItem('Editor', 'Pages.Shipping.Routes.RouteForMe', 'fas fa-edit', '/app/sprintship/route4me/editor'), new AppMenuItem('Optimization', 'Pages.Shipping.Routes.RouteForMe', 'fas fa-cogs', '/app/sprintship/route4me/optimization'), new AppMenuItem('Multiview', 'Pages.Shipping.Routes.RouteForMe', 'fas fa-map', '/app/sprintship/route4me/multiview'), new AppMenuItem('Settings', 'Pages.Route4MeSettings', 'fas fa-cog', '/app/main/route4Me/route4MeSettings') ]) ]), //Contacts new AppMenuItem('Contacts', '', 'fas fa-address-book', '', [ new AppMenuItem('Contacts', 'Pages.Shipping.Contacts', 'fas fa-id-card', '/app/sprintship/contacts'), new AppMenuItem('AddressTypes', 'Pages.Shipping.Contacts.AddressTypes', 'fas fa-address-card', '/app/sprintship/address-types'), // new AppMenuItem('Addresses', 'Pages.Shipping.Contacts.Address', 'flaticon-home', '/app/sprintship/addresses'), new AppMenuItem('Addresses', 'Pages.Shipping.Contacts.Address', 'fas fa-book', '/app/sprintship/addresses'), new AppMenuItem('Postal Codes', 'Pages.Shipping.Contacts.PostalCodes', 'fas fa-sign', '/app/sprintship/postal-codes'), // new AppMenuItem('Emails', 'Pages.Shipping.Contacts.Emails', 'flaticon-book', '/app/sprintship/emails'), new AppMenuItem('Vendors', 'Pages.Shipping.Contacts', 'fas fa-users', '/app/sprintship/vendors'), new AppMenuItem('Timesheets', 'Pages.Administration.Employees.TimeSheet', 'fas fa-user-clock', '/app/sprintship/employees/timesheets'), new AppMenuItem('Reviews', 'Pages.Administration.Employees.EmployeeReview', 'fas fa-star', '/app/sprintship/employees/reviews') ]), //Employees // new AppMenuItem('Employees', 'Pages.Administration.Employees', 'flaticon-users', '/app/sprintship/employees', [ // new AppMenuItem('Timesheets', 'Pages.Administration.Employees.TimeSheet', 'flaticon-time', '/app/sprintship/employees/timesheets'), // new AppMenuItem('Reviews', 'Pages.Administration.Employees.EmployeeReview', 'flaticon-star', '/app/sprintship/employees/reviews') // ]), //Fleets new AppMenuItem('Fleets', '', 'fa fa-truck-moving', '', [ // new AppMenuItem('Fleets', 'Pages.Shipping.Fleets', 'flaticon-paper-plane-1', '/app/sprintship/fleets'), new AppMenuItem('Fleets', 'Pages.Shipping.Fleets', 'fas fa-shipping-fast', '/app/sprintship/fleets'), new AppMenuItem('Drivers', 'Pages.Administration.Users', 'fas fa-user-friends', '/app/sprintship/drivers'), // new AppMenuItem('Driver Incidents', 'Pages.Administration.Employees.DriverIncidents', 'fas fa-exclamation-circle', '/app/sprintship/employees/driver-incidents'), new AppMenuItem('Vehicles', 'Pages.Shipping.Vehicles', 'fas fa-truck', '/app/sprintship/vehicle'), new AppMenuItem('Driver Proximities', 'Pages.Administration.Proximities', 'fas fa-street-view', '/app/sprintship/driver-proximity'), //new AppMenuItem('VehicleMileage', 'Pages.Shipping.Vehicle.Mileage', 'flaticon-truck', '/app/sprintship/vehiclemileage'), //new AppMenuItem('Vehicles', 'Pages.Shipping.Fleet.Vehicles', 'flaticon-truck', '/app/sprintship/fleetvehicles'), //From Vehicle Tab //new AppMenuItem('Mileage', 'Pages.Shipping.Mileage', 'flaticon-time-1', '/app/sprintship/mileage'), //new AppMenuItem('VehicleMileage', 'Pages.Shipping.Vehicle.Mileage', 'flaticon-stopwatch', '/app/sprintship/vehiclemileage'), ]), //Vendors // new AppMenuItem('Vendors', '', 'flaticon-network', '', // [ // new AppMenuItem('Vendors', 'Pages.Shipping.Contacts', 'flaticon-shapes', '/app/sprintship/vendors') // ]), //Packages // new AppMenuItem('Packages', 'Pages.Shipping.Package', 'flaticon-open-box', '', [ // // new AppMenuItem('Package Types', 'Pages.Shipping.Package.PackageType', 'flaticon2-setup', '/app/sprintship/package-types') // new AppMenuItem('Packages', 'Pages.Shipping.Package.PackageType', 'flaticon2-setup', '/app/sprintship/package-types/'), // ]), //Orders new AppMenuItem('Orders', '', 'fas fa-boxes', '', [ new AppMenuItem('Tags', 'Pages.Orders.Tags', 'fas fa-tags', '/app/sprintship/tags'), new AppMenuItem('Packages', 'Pages.Orders.Package', 'fas fa-th-large', '/app/sprintship/package-order'), new AppMenuItem('Statuses', 'Pages.Orders.Status', 'fas fa-tasks', '/app/sprintship/status-order'), new AppMenuItem('Incidents', 'Pages.Administration.Employees.Incidents', 'fas fa-exclamation-circle', '/app/sprintship/incidents'), ]), //Reports new AppMenuItem('Reports', '', 'fas fa-chart-pie', '', [ ]), //Notifications // new AppMenuItem('Notifications', '', 'flaticon-alert', '', // [ // ]), //Schedules // new AppMenuItem('Schedules', '', 'flaticon-clock-2', '', // [ // ]), //Incidents // new AppMenuItem('Incidents', 'Pages.Administration.Employees.Incidents', 'flaticon-info', '/app/sprintship/incidents'), //System new AppMenuItem('System', '', 'fas fa-cog', '', [ new AppMenuItem('OrderTypes', 'Pages.OrderTypes', 'fas fa-list', '/app/sprintship/type-order'), new AppMenuItem('OrderStatusType', 'Pages.Orders.OrderStatusTypes', 'fas fa-tasks', '/app/sprintship/status-type'), new AppMenuItem('Package Types', 'Pages.Shipping.Package.PackageType', 'fas fa-shapes', '/app/sprintship/package-types/'), new AppMenuItem('TagType', 'Pages.Orders.TagTypes', 'fas fa-tags', '/app/sprintship/tag-type'), ]), new AppMenuItem('Tenants', 'Pages.Tenants', 'fas fa-list', '/app/admin/tenants'), new AppMenuItem('Editions', 'Pages.Editions', 'fas fa-user-shield', '/app/admin/editions'), // new AppMenuItem('Preferences', 'Pages.Preferences', 'flaticon-more', '/app/main/preferences/preferences'), // new AppMenuItem('ClientPreferences', 'Pages.ClientPreferences', 'flaticon-more', '/app/main/preferences/clientPreferences'), // new AppMenuItem('UserPreferences', 'Pages.UserPreferences', 'flaticon-more', '/app/main/preferences/userPreferences'), // new AppMenuItem('Packages', 'Pages.Packages', 'flaticon-more', '/app/main/shippingPackages/packages'), //new AppMenuItem('OrderTypes', 'Pages.OrderTypes', 'flaticon-more', '/app/main/orderTypes/orderTypes'), //new AppMenuItem('Route4MeSettings', 'Pages.Route4MeSettings', 'flaticon-more', '/app/main/route4Me/route4MeSettings'), new AppMenuItem('Administration', '', 'fa fa-sliders-h', '', [ new AppMenuItem('Background Processes', 'Pages.BackgroundProcesses', 'fas fa-cog', '/app/main/backgroundProcesses/backgroundProcesses'), new AppMenuItem('OrganizationUnits', 'Pages.Administration.OrganizationUnits', 'fas fa-sitemap', '/app/admin/organization-units'), new AppMenuItem('Roles', 'Pages.Administration.Roles', 'fas fa-suitcase', '/app/admin/roles'), new AppMenuItem('Users', 'Pages.Administration.Users', 'fas fa-user-cog', '/app/admin/users'), new AppMenuItem('Languages', 'Pages.Administration.Languages', 'fas fa-book-open', '/app/admin/languages'), new AppMenuItem('AuditLogs', 'Pages.Administration.AuditLogs', 'fas fa-list-ul', '/app/admin/auditLogs'), new AppMenuItem('Maintenance', 'Pages.Administration.Host.Maintenance', 'fas fa-hockey-puck', '/app/admin/maintenance'), new AppMenuItem('Subscription', 'Pages.Administration.Tenant.SubscriptionManagement', 'fa fa-file-contract', '/app/admin/subscription-management'), new AppMenuItem('VisualSettings', 'Pages.Administration.UiCustomization', 'fas fa-palette', '/app/admin/ui-customization'), new AppMenuItem('Settings', 'Pages.Administration.Host.Settings', 'fas fa-cogs', '/app/admin/hostSettings'), new AppMenuItem('Settings', 'Pages.Administration.Tenant.Settings', 'fas fa-cogs', '/app/admin/tenantSettings'), ]), new AppMenuItem('DemoUiComponents', 'Pages.DemoUiComponents', 'fas fa-draw-polygon', '/app/admin/demo-ui-components') ]); } checkChildMenuItemPermission(menuItem): boolean { for (let i = 0; i < menuItem.items.length; i++) { let subMenuItem = menuItem.items[i]; if (subMenuItem.permissionName === '' || subMenuItem.permissionName === null || subMenuItem.permissionName && this._permissionCheckerService.isGranted(subMenuItem.permissionName)) { return true; } else if (subMenuItem.items && subMenuItem.items.length) { return this.checkChildMenuItemPermission(subMenuItem); } } return false; } showMenuItem(menuItem: AppMenuItem): boolean { if (menuItem.permissionName === 'Pages.Administration.Tenant.SubscriptionManagement' && this._appSessionService.tenant && !this._appSessionService.tenant.edition) { return false; } let hideMenuItem = false; if (menuItem.requiresAuthentication && !this._appSessionService.user) { hideMenuItem = true; } if (menuItem.permissionName && !this._permissionCheckerService.isGranted(menuItem.permissionName)) { hideMenuItem = true; } if (this._appSessionService.tenant || !abp.multiTenancy.ignoreFeatureCheckForHostUsers) { if (menuItem.hasFeatureDependency() && !menuItem.featureDependencySatisfied()) { hideMenuItem = true; } } if (!hideMenuItem && menuItem.items && menuItem.items.length) { return this.checkChildMenuItemPermission(menuItem); } return !hideMenuItem; } }