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', [ // Controller new AppMenuItem('Dispatch', 'Pages.Shipping.Controller', 'flaticon-analytics', '/app/sprintship/dispatch'), new AppMenuItem('Will Call', 'Pages.Shipping.WillCall', 'fa fa-phone', '/app/sprintship/will-call', undefined, undefined, undefined, ()=> { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.WillCall'); }), // Controller new AppMenuItem('Locator', 'Pages.Shipping.Locator', 'fa fa-location-arrow', '/app/sprintship/locator'), new AppMenuItem('Clinics', '', 'fa fa-clinic-medical', '', [ new AppMenuItem('Clinics', 'Pages.Clinics', 'flaticon-business', '/app/main/laboratory/clinics', undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.ClinicManagement'); }), //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'), new AppMenuItem('Route Analyzer (Pickup)', 'Pages.Shipping.RoutesTemplate', 'fas fa-stopwatch', '/app/sprintship/route-analyzer-pickup'), new AppMenuItem('Route Analyzer (Delivery)', 'Pages.Shipping.RoutesTemplate', 'fas fa-stopwatch', '/app/sprintship/route-analyzer-delivery'), ], undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.RouteManagementFeauture'); }), //Locations new AppMenuItem('Locations', 'Pages.Administration.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', 'fas fa-globe', '/app/sprintship/timezones'), // new AppMenuItem('Proximities', 'Pages.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', 'fas fa-layer-group', '/app/sprintship/locationvehicle') ]), //Routes new AppMenuItem('Routes', 'Pages.Shipping.PagesRoutes', 'fa fa-route', '', [ new AppMenuItem('Routes', 'Pages.Shipping.PagesRoutes', 'fa fa-map-signs', '/app/sprintship/routes'), new AppMenuItem('Route Definitions', 'Pages.RouteDefinitions', 'flaticon-presentation', '/app/sprintship/route-definition'), // new AppMenuItem('Stops', 'Pages.RouteStops', 'flaticon-home-2', '/app/sprintship/route-stop', undefined, undefined, undefined, () => { // return this._featureCheckerService.isEnabled('App.RouteManagementFeauture.RouteStopManagement'); // }), new AppMenuItem('Stops', 'Pages.RouteStops', 'flaticon-home-2', '/app/sprintship/route-stop'), // 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('Route Optimizer', '', 'fas fa-newspaper', '/app/sprintship/route-optimizer',undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.GoogleDirectionApi.GoogleDirectionApi'); }), ]), //Fleets new AppMenuItem('Fleets', 'Pages.Shipping.Fleets', 'fa fa-truck-moving', '', [ new AppMenuItem('Fleets', 'Pages.Shipping.Fleets', 'fas fa-shipping-fast', '/app/sprintship/fleets'), new AppMenuItem('Vehicles', 'Pages.Shipping.Fleets', 'fas fa-truck', '', [ new AppMenuItem('Vehicles', 'Pages.Shipping.Vehicles', 'fas fa-truck', '/app/sprintship/vehicles'), new AppMenuItem('VehicleChecklists', 'Pages.VehicleChecklists', 'fas fa-check-double', '/app/sprintship/vehicleChecklists/vehicleChecklists'), ]), new AppMenuItem('Drivers', 'Pages.Administration.Drivers', 'fas fa-user-friends', '', [ new AppMenuItem('Drivers', 'Pages.Administration.Drivers', 'fas fa-user-friends', '/app/sprintship/drivers'), new AppMenuItem('Proximities', 'Pages.Administration.Proximities', 'fas fa-street-view', '/app/sprintship/driver-proximity'), new AppMenuItem('Incidents', 'Pages.Administration.Employees.DriverIncidents', 'fas fa-exclamation-circle', '/app/sprintship/driver-incidents'), ]), new AppMenuItem('Vendors', 'Pages.Administration.Vendors', 'fas fa-users', '/app/sprintship/vendors'), ]), //Employees new AppMenuItem('Employees', 'Pages.Administration.Employees', 'flaticon-users', '', [ new AppMenuItem('Employees', 'Pages.Administration.Employees', 'flaticon-users', '/app/sprintship/employees'), 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'), new AppMenuItem('Incidents', 'Pages.Administration.Employees', 'fas fa-exclamation-circle', '/app/sprintship/employee-incidents'), // new AppMenuItem('Incidents', 'Pages.Administration.Employees.Incidents', 'fas fa-exclamation-circle', '/app/sprintship/incidents') ]), //Orders new AppMenuItem('Orders', 'Pages.Shipping.PagesOrders', 'fas fa-boxes', '', [ new AppMenuItem('Orders', 'Pages.Orders', 'fas fa-box', '/app/sprintship/order'), new AppMenuItem('Tracking', 'Pages.Tracking', 'fas fa-truck-pickup', '/app/sprintship/tracking-page'), 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.OrderStatuses', 'fas fa-tasks', '/app/sprintship/status-order'), new AppMenuItem('Incidents', 'Pages.OrderIncidents', 'fas fa-exclamation-circle', '/app/sprintship/incidents'), ]), //Reports new AppMenuItem('Reports', 'Pages.Shipping.PagesReports', 'fas fa-chart-pie', '/app/main/report'), //Dashboards new AppMenuItem('Dashboards', 'Pages.Tenant.Dashboard', 'fas fa-chart-line', '/app/main/grid-dashboard'), /*new AppMenuItem('Reports', 'Pages.Shipping.PagesReports', 'fas fa-chart-pie', '', [ new AppMenuItem('Packages', 'Pages.Report.Packages.By.ZipCode', 'fas fa-th-large', '/app/sprintship/report-packages-per-postal-code', undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.Report.ReportPackagesByZipCode'); }), new AppMenuItem('Mileage Reimbursement', 'Pages.Report.Mileage.Reimbursement', 'fas fa-cash-register', '/app/sprintship/mileage-reimbursement', undefined, undefined, undefined, () => { return this._featureCheckerService.isEnabled('App.Report.ReportMileageReimbursement'); }), //new AppMenuItem('SLA', 'Pages.Orders.Package', 'fas fa-th-large', '/app/sprintship/sla'), new AppMenuItem('Report Designer', 'Pages.Report.Designer', 'fas fa-chart-pie', '/app/main/report-designer'), ]),*/ //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'), //Notifications new AppMenuItem('Notifications', 'Pages.Orders.OrderNotifications', 'fas fa-bell', '', [ new AppMenuItem('Notifications', 'Pages.Orders.OrderNotifications', 'fas fa-bell', '/app/sprintship/order-notifications'), new AppMenuItem('SMS Accounts', 'Pages.Administration.SmsAccounts', 'fas fa-users-cog', '/app/sprintship/sms'), new AppMenuItem('Templates', 'Pages.Orders.OrderNotificationTemplates', 'fas fa-mail-bulk', '', [ new AppMenuItem('SMS Templates', 'Pages.Administration.SmsTemplates', 'fas fa-sms', '/app/sprintship/sms-templates'), new AppMenuItem('Email Templates', 'Pages.Orders.OrderNotificationTemplates', 'fas fa-mail-bulk', '/app/sprintship/order-notification-templates'), ]), ]), //System new AppMenuItem('System', 'Pages.Administration.System.Nav', 'fas fa-cog', '', [ new AppMenuItem('Holiday Calendar', 'Pages.Holidays', 'fas fa-calendar', '/app/sprintship/locations/holidays'), 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('Order Status Type Workflow', 'Pages.Orders.OrderStatusTypes', 'fas fa-code-branch', '/app/sprintship/status-workflow'), new AppMenuItem('Package Types', 'Pages.Shipping.Package.PackageType', 'fas fa-shapes', '/app/sprintship/package-types/'), new AppMenuItem('Package Options', 'Pages.Orders.PackageOptions', 'fas fa-dice-d6', '/app/sprintship/package-options'), new AppMenuItem('TagType', 'Pages.Orders.TagTypes', 'fas fa-tags', '/app/sprintship/tag-type'), new AppMenuItem('VehicleTypes', 'Pages.VehicleTypes', 'fa fa-truck-moving', '/app/sprintship/vehicle-types'), new AppMenuItem('Contacts', 'Pages.Shipping.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', 'fas fa-book', '/app/sprintship/addresses'), //new AppMenuItem('Postal Codes', 'Pages.Shipping.Contacts.PostalCodes', 'fas fa-sign', '/app/sprintship/postal-codes'), ]), new AppMenuItem('IncidentSources', 'Pages.Administration.IncidentSources', 'flaticon-more', '/app/sprintship/incident/incident-sources'), new AppMenuItem('IncidentType', 'Pages.IncidentTypes', 'fa fa-exclamation-circle', '/app/sprintship/incident-types'), new AppMenuItem('IncidentStatus', 'Pages.IncidentStatus', 'fa fa-exclamation-circle', '/app/sprintship/incident-status'), new AppMenuItem('EmployeeIncidentTypes', 'Pages.EmployeeIncidentTypes', 'fa fa-exclamation-circle', '/app/sprintship/employee-incident-types'), new AppMenuItem('DriverIncidentTypes', 'Pages.DriverIncidentTypes', 'fa fa-exclamation-circle', '/app/sprintship/drivers/driver-incident-types'), new AppMenuItem('ImportMappings', 'Pages.ImportMappings', 'fas fa-map-signs', '/app/main/importMappings/importMappings') ]), 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('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('Help Desk', 'HelpDesk', 'fas fa-headset', '/app/sprintship/support-ticket'), new AppMenuItem('Help Desk', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-headset', '',[ new AppMenuItem('Tickets', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-ticket-alt', '/app/sprintship/support-ticket'), new AppMenuItem('Category Types', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-clone', '/app/sprintship/supportCategoryTypes'), new AppMenuItem('Documentation', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-file', '/app/sprintship/support-documentation'), new AppMenuItem('On-Boarding Guide', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-file', '/app/sprintship/support-onBoardingGuide'), new AppMenuItem('Training Video', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-file', '/app/sprintship/support-trainingVideo'), new AppMenuItem('FAQ', 'Pages.SupportTicket.Nav.Tenant', 'fas fa-file', '/app/sprintship/support-FAQUrl') ]), new AppMenuItem('DemoUiComponents', 'Pages.DemoUiComponents', 'fas fa-draw-polygon', '/app/admin/demo-ui-components'), new AppMenuItem('Help Desk', 'Pages.SupportTicket.Nav.Host', 'fas fa-headset', '', [ new AppMenuItem('Tickets', '', 'fas fa-ticket-alt', '/app/sprintship/support-ticket'), new AppMenuItem('Types', '', 'fas fa-book', '/app/sprintship/support-ticket-types'), new AppMenuItem('Status', '', 'far fa-sticky-note', '/app/sprintship/support-ticket-status'), new AppMenuItem('Category Types', '', 'fas fa-clone', '/app/sprintship/supportCategoryTypes'), // Pages.SupportCategoryTypes new AppMenuItem('Settings', '', 'fas fa-cog', '/app/sprintship/support-ticket-setting'), new AppMenuItem('Notifications', '', 'fas fa-bell', '/app/sprintship/support-ticket-notification'), ]), ]); } 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; } if (menuItem.permissionName === 'HelpDesk' && this._appSessionService.tenant != undefined) { return true; } 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; } /** * Returns all menu items recursively */ getAllMenuItems(): AppMenuItem[] { let menu = this.getMenu(); let allMenuItems: AppMenuItem[] = []; menu.items.forEach(menuItem => { allMenuItems = allMenuItems.concat(this.getAllMenuItemsRecursive(menuItem)); }); return allMenuItems; } private getAllMenuItemsRecursive(menuItem: AppMenuItem): AppMenuItem[] { if (!menuItem.items) { return [menuItem]; } let menuItems = [menuItem]; menuItem.items.forEach(subMenu => { menuItems = menuItems.concat(this.getAllMenuItemsRecursive(subMenu)); }); return menuItems; } }