Kenric Nugteren 2 лет назад
Родитель
Сommit
46801f857a

+ 34 - 13
prs.server/Forms/Deletions/DeletedEntityGrid.cs

@@ -9,17 +9,18 @@ using System.Linq;
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows.Forms;
 
 namespace PRSServer.Forms
 {
     class DeletedEntityGrid<T> : DynamicGrid<T>, ISpecificGrid where T : Entity, new()
     {
 
-        private Deletion Deletion { get; set; }
+        private CoreTable Table { get; set; }
 
-        public DeletedEntityGrid(Deletion deletion)
+        public DeletedEntityGrid(CoreTable table)
         {
-            Deletion = deletion;
+            Table = table;
 
             HiddenColumns.Add(x => x.ID);
 
@@ -30,20 +31,32 @@ namespace PRSServer.Forms
         protected override DynamicGridColumns LoadColumns()
         {
             var result = base.LoadColumns();
-            result.RemoveAll(x =>
+
+            var deletionColumns = DeletionData.DeletionColumns<T>();
+
+            var columns = new DynamicGridColumns();
+            foreach(var column in deletionColumns.GetColumns())
+            {
+                var resultColumn = result.FirstOrDefault(x => x.ColumnName == column.Property);
+                if(resultColumn is not null)
+                {
+                    columns.Add(resultColumn);
+                }
+            }
+
+            if(columns.Count == 0)
             {
-                var prop = CoreUtils.GetProperty(typeof(T), x.ColumnName);
-                return prop.GetCustomAttribute<DoNotSerialize>() != null && prop.GetCustomAttribute<DoNotPersist>() != null;
-            });
-            return result;
+                columns.Add<T, Guid>(x => x.ID, 0, "ID", "", Alignment.MiddleLeft);
+            }
+
+            return columns;
         }
 
         protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort, Action<CoreTable?, Exception?> action)
         {
             try
             {
-                var table = DbFactory.Provider.QueryDeleted(Deletion, criteria.Combine(), columns, sort);
-                action(table, null);
+                action(Table, null);
             }
             catch(Exception e)
             {
@@ -53,9 +66,7 @@ namespace PRSServer.Forms
 
         protected override T LoadItem(CoreRow row)
         {
-            var id = row.Get<T, Guid>(x => x.ID);
-            var filter = new Filter<T>(x => x.ID).IsEqualTo(id);
-            return DbFactory.Provider.QueryDeleted(Deletion, filter, null).Rows.FirstOrDefault()?.ToObject<T>();
+            return Table.Rows[row.Index].ToObject<T>();
         }
 
         protected override void DoEdit()
@@ -67,11 +78,21 @@ namespace PRSServer.Forms
 
             var editor = new DynamicEditorForm(typeof(T));
             editor.ReadOnly = true;
+            editor.OnCustomiseColumns += Editor_OnCustomiseColumns;
             editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty<T>());
             editor.Items = new BaseObject[] { item };
             editor.ShowDialog();
         }
 
+        private DynamicGridColumns Editor_OnCustomiseColumns(object sender, DynamicGridColumns? source)
+        {
+            var columns = new DynamicGridColumns();
+            columns.ExtractColumns(typeof(T));
+            var deletionColumns = DeletionData.DeletionColumns<T>();
+            columns.RemoveAll(x => !deletionColumns.GetColumns().Any(y => y.Property == x.ColumnName));
+            return columns;
+        }
+
         public override void SaveItem(T item)
         {
             // No saving allowed

+ 1 - 0
prs.server/Forms/Deletions/DeletionsGrid.cs

@@ -26,6 +26,7 @@ namespace PRSServer.Forms
                 .EndUpdate();
 
             HiddenColumns.Add(x => x.ID);
+            HiddenColumns.Add(x => x.Data);
 
             Refresh = AddButton("", Properties.Resources.refresh.AsBitmapImage(), RefreshItems);
             Recover = AddButton("Recover", null, RecoverItems);

+ 7 - 4
prs.server/Forms/Deletions/ViewDeletionWindow.xaml.cs

@@ -27,6 +27,7 @@ namespace PRSServer.Forms
     {
 
         private Deletion Deletion { get; set; }
+        private DeletionData DeletionData { get; set; }
 
         private HashSet<DynamicTabItem> _loaded = new();
 
@@ -35,6 +36,7 @@ namespace PRSServer.Forms
             InitializeComponent();
 
             Deletion = deletion;
+            DeletionData = Serialization.Deserialize<DeletionData>(deletion.Data) ?? new();
 
             Pages.SelectionChanged += PagesSelectionChanged;
 
@@ -54,13 +56,14 @@ namespace PRSServer.Forms
 
         private void LoadPages()
         {
-            var entityTypes = DbFactory.Provider.GetDeletionTypes(Deletion);
-            foreach(var type in entityTypes)
+            foreach(var (entityName, cascade) in DeletionData.Cascades)
             {
-                var title = new Inflector.Inflector(new CultureInfo("en")).Pluralize(CoreUtils.GetCaption(type));
+                if (!CoreUtils.TryGetEntity(entityName, out var entityType)) continue;
+
+                var title = new Inflector.Inflector(new CultureInfo("en")).Pluralize(CoreUtils.GetCaption(entityType));
                 var tab = new DynamicTabItem() { Header = title };
 
-                var grid = Activator.CreateInstance(typeof(DeletedEntityGrid<>).MakeGenericType(type), Deletion) as IDynamicGrid;
+                var grid = Activator.CreateInstance(typeof(DeletedEntityGrid<>).MakeGenericType(entityType), cascade) as IDynamicGrid;
                 grid.Refresh(true, true);
                 tab.Content = grid;