Kaynağa Gözat

Added Event.Enabled

Kenric Nugteren 5 ay önce
ebeveyn
işleme
10bf827078

+ 4 - 0
prs.classes/Entities/Events/Event.cs

@@ -34,9 +34,13 @@ namespace Comal.Classes
         [NullEditor]
         public string Data { get; set; } = "";
 
+        [EditorSequence(4)]
         [ExpressionEditor(null)]
         public string NotificationExpression { get; set; } = "";
 
+        [EditorSequence(5)]
+        public bool Enabled { get; set; }
+
         static Event()
         {
             DefaultColumns.Add<Event>(x => x.Code);

+ 26 - 2
prs.shared/Database Update Scripts/Update_8_32.cs

@@ -1,6 +1,7 @@
 using Comal.Classes;
 using InABox.Core;
 using InABox.Database;
+using InABox.DynamicGrid;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -13,11 +14,11 @@ internal class Update_8_32 : DatabaseUpdateScript
 {
     public override VersionNumber Version => new(8, 32);
 
-    public override bool Update()
+    private static void DoKanbanNotes()
     {
         var provider = DbFactory.NewProvider(Logger.Main);
 
-        Logger.Send(LogType.Information, "", $"Process Kanban Notes");
+        Logger.Send(LogType.Information, "", $"Process Kanban Notes...");
         var tasks = provider.Query<Kanban>(
             null,
             Columns.None<Kanban>().Add(x => x.ID).Add(x => x.Notes))
@@ -56,6 +57,29 @@ internal class Update_8_32 : DatabaseUpdateScript
             Logger.Send(LogType.Information, "", $"Processing Kanban Notes: {percent:F2}%");
         });
         Logger.Send(LogType.Information, "", $"Processing Kanban Notes complete");
+    }
+
+    private static void DoEventEnabled()
+    {
+        var provider = DbFactory.NewProvider(Logger.Main);
+
+        Logger.Send(LogType.Information, "", $"Initialising Event.Enabled to true...");
+        var events = provider.Query(
+            null,
+            Columns.None<Event>().Add(x => x.ID).Add(x => x.Enabled))
+            .ToArray<Event>();
+        foreach(var ev in events)
+        {
+            ev.Enabled = true;
+        }
+        provider.Save(events);
+        Logger.Send(LogType.Information, "", $"Initialised Event.Enabled to true");
+    }
+
+    public override bool Update()
+    {
+        DoKanbanNotes();
+        DoEventEnabled();
 
         return true;
     }

+ 81 - 0
prs.shared/Grids/EventGrid.cs

@@ -11,6 +11,8 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
 using System.Windows.Media.Imaging;
 
 namespace PRS.Shared;
@@ -20,6 +22,8 @@ public class EventGrid : DynamicDataGrid<Event>
     private readonly BitmapImage _tick = InABox.Wpf.Resources.tick.AsBitmapImage();
     private readonly BitmapImage _disabled = InABox.Wpf.Resources.disabled.AsBitmapImage();
 
+    private Button? EnableButton = null;
+
     private HashSet<Guid> _subscribedSet = new();
 
     public Guid EmployeeID { get; set; }
@@ -29,10 +33,83 @@ public class EventGrid : DynamicDataGrid<Event>
         base.Init();
 
         HiddenColumns.Add(x => x.Data);
+        HiddenColumns.Add(x => x.Enabled);
 
         ActionColumns.Add(new DynamicImageColumn(Subscribed_Image, Subscribed_Click) { ToolTip = Subscribed_ToolTip });
+
+        if (Security.IsAllowed<CanManageEvents>())
+        {
+            EnableButton = AddButton("Disable", null, Enable_Click);
+            EnableButton.Visibility = Visibility.Collapsed;
+        }
+
+        OnSelectItem += EventGrid_OnSelectItem;
+    }
+
+    private void EventGrid_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
+    {
+        if(EnableButton is not null)
+        {
+            if(e.Rows is not null && e.Rows.Length > 0)
+            {
+                EnableButton.Visibility = Visibility.Visible;
+                EnableButton.Content = e.Rows.Any(x => !x.Get<Event, bool>(x => x.Enabled))
+                    ? "Enable" : "Disable";
+            }
+            else
+            {
+                EnableButton.Visibility = Visibility.Collapsed;
+            }
+        }
+    }
+
+    private bool Enable_Click(Button button, CoreRow[] rows)
+    {
+        var items = LoadItems(rows);
+        if(items.Any(x => !x.Enabled))
+        {
+            foreach(var item in items)
+            {
+                item.Enabled = true;
+            }
+            Client.Save(items, "Event enabled.");
+            return true;
+        }
+        else
+        {
+            foreach(var item in items)
+            {
+                item.Enabled = false;
+            }
+            Client.Save(items, "Event disabled.");
+            return true;
+        }
     }
 
+    #region UIComponent
+
+    private class UIComponent : DynamicGridGridUIComponent<Event>
+    {
+        protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
+        {
+            if(row.Get<Event, bool>(x => x.Enabled))
+            {
+                return null;
+            }
+            else
+            {
+                return Colors.Gainsboro.ToBrush(0.5);
+            }
+        }
+    }
+
+    protected override IDynamicGridUIComponent CreateUIComponent()
+    {
+        return new UIComponent { Parent = this };
+    }
+
+    #endregion
+
     protected override void DoReconfigure(DynamicGridOptions options)
     {
         base.DoReconfigure(options);
@@ -191,6 +268,10 @@ public class EventGrid : DynamicDataGrid<Event>
 
     protected override void Reload(Filters<Event> criteria, Columns<Event> columns, ref SortOrder<Event>? sort, CancellationToken token, Action<CoreTable?, Exception?> action)
     {
+        if (!Security.IsAllowed<CanManageEvents>())
+        {
+            criteria.Add(new Filter<Event>(x => x.Enabled).IsEqualTo(true));
+        }
         base.Reload(criteria, columns, ref sort, token, (data, error) =>
         {
             if(data is not null)

+ 8 - 1
prs.stores/EventStore.cs

@@ -14,7 +14,14 @@ public class EventStore : BaseStore<Event>
     protected override void AfterSave(Event entity)
     {
         base.AfterSave(entity);
-        EventUtils.AddEvent(Provider, entity);
+        if (entity.Enabled)
+        {
+            EventUtils.AddEvent(Provider, entity);
+        }
+        else
+        {
+            EventUtils.RemoveEvent(Provider, entity);
+        }
     }
 
     protected override void AfterDelete(Event entity)

+ 3 - 1
prs.stores/Events/Event.cs

@@ -250,7 +250,9 @@ public static class EventUtils
         _loadedCache = true;
         _entityEvents.Clear();
         _entityEventMap.Clear();
-        var events = provider.Query(null, Columns.None<Event>().Add(x => x.ID).Add(x => x.Code).Add(x => x.EventType).Add(x => x.Data))
+        var events = provider.Query(
+            new Filter<Event>(x => x.Enabled).IsEqualTo(true),
+            Columns.None<Event>().Add(x => x.ID).Add(x => x.Code).Add(x => x.EventType).Add(x => x.Data))
             .ToObjects<Event>();
         foreach(var ev in events)
         {