aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/UsersAndRolesModule.cs
blob: 21b41137dcc8fc1909c07b0776142a630b590a17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;
using Tango.BL.Enumerations;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.UsersAndRoles.Views;
using Tango.SharedUI.Helpers;

namespace Tango.MachineStudio.UsersAndRoles
{
    [StudioModule(9)]
    public class UsersAndRolesModule : StudioModuleBase
    {
        public override string Name
        {
            get
            {
                return "Users & Roles";
            }
        }

        public override string Description
        {
            get
            {
                return "Manage organizations users and their roles.";
            }
        }

        public override BitmapSource Image
        {
            get
            {
                return ResourceHelper.GetImageFromResources("Images/users-and-roles.jpg");
            }
        }

        /// <summary>
        /// Gets the module entry point view type.
        /// </summary>
        public override Type MainViewType
        {
            get
            {
                return typeof(MainView);
            }
        }

        public override Permissions Permission
        {
            get
            {
                return Permissions.RunUsersAndRolesModule;
            }
        }

        public override void Dispose()
        {
           
        }
    }
}
n> class MainViewVM : PPCViewModel { private Dictionary<EventTypes, NotificationItem> _notifications; private EventsSource _selectedEventsSource; public EventsSource SelectedEventsSource { get { return _selectedEventsSource; } set { _selectedEventsSource = value; RaisePropertyChangedAuto(); } } private ObservableCollection<MachinesEvent> _currentEvents; /// <summary> /// Gets or sets the current events. /// </summary> public ObservableCollection<MachinesEvent> CurrentEvents { get { return _currentEvents; } set { _currentEvents = value; RaisePropertyChangedAuto(); } } private MachinesEvent _selectedEvent; /// <summary> /// Gets or sets the selected event. /// </summary> public MachinesEvent SelectedEvent { get { return _selectedEvent; } set { _selectedEvent = value; RaisePropertyChangedAuto(); } } private ObservableCollection<MachinesEvent> _historyEvents; /// <summary> /// Gets or sets the history events. /// </summary> public ObservableCollection<MachinesEvent> HistoryEvents { get { return _historyEvents; } set { _historyEvents = value; RaisePropertyChangedAuto(); } } private MachinesEvent _selectedHistoryEvent; /// <summary> /// Gets or sets the selected event. /// </summary> public MachinesEvent SelectedHistoryEvent { get { return _selectedHistoryEvent; } set { _selectedHistoryEvent = value; RaisePropertyChangedAuto(); } } /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> public MainViewVM() { CurrentEvents = new ObservableCollection<MachinesEvent>(); _notifications = new Dictionary<EventTypes, NotificationItem>(); } /// <summary> /// Called when the application has been started /// </summary> public override void OnApplicationStarted() { EventLogger.EventReceived += EventLogger_EventReceived; EventLogger.EventResolved += EventLogger_EventResolved; } public override async void OnApplicationReady() { base.OnApplicationReady(); using (var db = ObservablesContext.CreateDefault()) { var last_week = DateTime.UtcNow.AddDays(-7); HistoryEvents = (await db.MachinesEvents.Where(x => x.MachineGuid == MachineProvider.Machine.Guid && x.DateTime > last_week).Include(x => x.EventType).Where(x => (EventTypeNotificationTimes)x.EventType.EventNotificationTime != EventTypeNotificationTimes.None).ToListAsync()).OrderByDescending(x => x.DateTime).ToObservableCollection(); } MachineProvider.MachineOperator.StatusChanged += MachineOperator_StatusChanged; } private void MachineOperator_StatusChanged(object sender, MachineStatuses status) { if (status == MachineStatuses.Disconnected) { foreach (var notification in _notifications.ToList()) { NotificationProvider.PopNotification(notification.Value); } _notifications.Clear(); InvokeUI(() => { CurrentEvents.Clear(); }); } } private void EventLogger_EventReceived(object sender, MachinesEvent ev) { InvokeUI(() => { if (ev.NotificationTime != EventTypeNotificationTimes.None) { CurrentEvents.Insert(0, ev); var notificationItem = new MessageNotificationItem(); notificationItem.CanClose = false; notificationItem.Message = ev.EventType.Title; notificationItem.ExpandedMessage = ev.Description; notificationItem.Pressed += async (_, __) => { SelectedEventsSource = EventsSource.CURRENT; SelectedEvent = ev; await NavigationManager.NavigateTo<EventsModule>(); }; switch (ev.Category) { case EventTypeCategories.Info: notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Info; break; case EventTypeCategories.Warning: notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Warning; break; case EventTypeCategories.Error: notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Error; break; case EventTypeCategories.Critical: notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Critical; break; } NotificationProvider.PushNotification(notificationItem); _notifications.Add(ev.EventType.Type, notificationItem); } }); } private void EventLogger_EventResolved(object sender, MachinesEvent ev) { InvokeUI(() => { if (ev.NotificationTime != EventTypeNotificationTimes.None) { CurrentEvents.Remove(ev); HistoryEvents.Insert(0, ev); if (_notifications.ContainsKey(ev.EventType.Type)) { var notification = _notifications[ev.EventType.Type]; _notifications.Remove(ev.EventType.Type); NotificationProvider.PopNotification(notification); } } }); } public override void OnNavigatedTo() { base.OnNavigatedTo(); NotificationProvider.NotificationsVisible = false; } public override void OnNavigatedFrom() { base.OnNavigatedFrom(); NotificationProvider.NotificationsVisible = true; } } }