Ver Fonte

Fixed blank rows in Problems Dock

frankvandenbos há 7 meses atrás
pai
commit
3ab2a1824d

+ 20 - 7
prs.desktop/DockPanels/Problems/ProblemsDockGrid.cs

@@ -21,13 +21,16 @@ public class ProblemsDockGrid : DynamicDataGrid<Problems>
         base.Init();
         HiddenColumns.Add(x=>x.Problem.Notes);
         HiddenColumns.Add(x=>x.Problem.AssignedTo.Code);
+        
+        
         ActionColumns.Add(new DynamicImageColumn(TypeImage)
         {
             Position = DynamicActionColumnPosition.Start, 
             Filters = IMAGES.Keys.Select(x=>x.Name.Split('.').Last()).ToArray(),
-            FilterRecord = TypeFilter
-
+            GetFilterExpression = (col) => TypeExpression(col),
         });
+        
+
         ActionColumns.Add(new DynamicTextColumn(GetLastNote) { Position =  DynamicActionColumnPosition.End, Width = 0, HeaderText = "Issues" });
         ActionColumns.Add(new DynamicTextColumn(GetAssignedTo) { Position =  DynamicActionColumnPosition.End, Width = 100, HeaderText="Assigned To", Alignment = Alignment.MiddleCenter});
         ActionColumns.Add(new DynamicMenuColumn(ProblemMenu) { Position = DynamicActionColumnPosition.End });
@@ -37,7 +40,12 @@ public class ProblemsDockGrid : DynamicDataGrid<Problems>
         AddButton("Mark Resolved", PRSDesktop.Resources.delete.AsBitmapImage(), MarkResolved,
             position: DynamicGridButtonPosition.Right);
     }
-
+    
+    private string TypeExpression(DynamicActionColumn column)
+    {
+        return column.CreateFilterExpression("Type") ?? "";
+    }
+    
     private bool TypeFilter(CoreRow row, string[] filter)
     {
         string typename = row.Get<Problems, string>(x => x.Type);
@@ -85,13 +93,18 @@ public class ProblemsDockGrid : DynamicDataGrid<Problems>
             ? IMAGES[_key]
             : null;
     }
+    
+    private string? TypeText(CoreRow? row)
+    {
+        return row?.Get<Problems, string>(x => x.Type) ?? "";
+    }
 
     private void ProblemMenu(DynamicMenuColumn menu, CoreRow? row)
     {
         menu.AddItem("Add Note", null, AddNote);
         menu.AddItem("Assign To...", null, AssignTo);
         menu.AddSeparator();
-        menu.AddItem("Edit Item", null, EitItem);
+        menu.AddItem("Edit Item", null, EditItem);
         menu.AddSeparator();
         menu.AddItem("Mark as Resolved", null, MarkResolved);
     }
@@ -266,10 +279,10 @@ public class ProblemsDockGrid : DynamicDataGrid<Problems>
         base.DoDoubleClick(sender, args);
         if (args.Row == null)
             return;
-        EitItem(args.Row);
+        EditItem(args.Row);
     }
 
-    private void EitItem(CoreRow? row)
+    private void EditItem(CoreRow? row)
     {
         var _type = GetType(row);
         if (_type == null)
@@ -278,7 +291,7 @@ public class ProblemsDockGrid : DynamicDataGrid<Problems>
         if (_item == null)
             return;
         var _grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), _type);
-        if (_grid.EditItems([ _item ]))
+        if (_grid.EditItems([ _item ], null, false, this))
             Refresh(false,true);
     }
 }

+ 1 - 0
prs.shared/Database Update Scripts/DatabaseUpdateScripts.cs

@@ -53,5 +53,6 @@ public static class DatabaseUpdateScripts
         DataUpdater.RegisterUpdateScript<Update_8_22>();
         DataUpdater.RegisterUpdateScript<Update_8_23>();
         DataUpdater.RegisterUpdateScript<Update_8_24>();
+        DataUpdater.RegisterUpdateScript<Update_8_25>();
     }
 }

+ 59 - 0
prs.shared/Database Update Scripts/Update_8_25.cs

@@ -0,0 +1,59 @@
+using Comal.Classes;
+using InABox.Core;
+using InABox.Database;
+
+namespace PRS.Shared.Database_Update_Scripts;
+
+internal class Update_8_25 : DatabaseUpdateScript
+{
+    
+    private static readonly int CHUNK_SIZE = 500;
+    private static readonly bool DESTRUCTIVE = false;
+    
+    public override VersionNumber Version => new(8, 25);
+    
+    public override bool Update()
+    {
+        var _provider = DbFactory.NewProvider(Logger.Main);
+        CheckProblemNotes<Bill>(_provider);
+        CheckProblemNotes<Activity>(_provider);
+        CheckProblemNotes<ProductStyle>(_provider);
+        CheckProblemNotes<Product>(_provider);
+        CheckProblemNotes<CostSheet>(_provider);
+        CheckProblemNotes<Kit>(_provider);
+        CheckProblemNotes<JobBillOfMaterialsItem>(_provider);
+        CheckProblemNotes<JobRequisitionItem>(_provider);
+        CheckProblemNotes<ManufacturingPacket>(_provider);
+        return true;
+    }
+    
+    private void CheckProblemNotes<T>(IProvider provider) where T : Entity, IProblems<ManagedProblem>, new()
+    {
+        Queue<T> _updates = new Queue<T>();
+        Logger.Send(LogType.Information, "", $"Checking {typeof(T).EntityName().Split('.').Last()} Problem Notes");
+        var _problems = provider.Query<T>(
+            new Filter<T>(x=>x.Problem.Notes).IsNotEqualTo(Array.Empty<string>()), 
+            Columns.None<T>()
+                .Add(x=>x.ID)
+                .Add(x=>x.Problem.Notes)
+        ).ToObjects<T>();
+        foreach (var _problem in _problems)
+        {
+            if (_problem.Problem.Notes is string[] _notes && _notes.Length <= 1 && string.IsNullOrWhiteSpace(_notes.FirstOrDefault()))
+            {
+                _problem.Problem.Notes = null;
+                _updates.Enqueue(_problem);
+            }
+        }
+        
+        while (_updates.Any())
+        {
+            var _chunk = _updates.Dequeue(100).ToArray();
+            Logger.Send(LogType.Information, "", $"- Updating {_chunk.Length} {typeof(T).EntityName().Split('.').Last()} Problems ({_updates.Count} remaining)");
+            provider.Save(_chunk);
+        }
+        
+    }
+    
+
+}

+ 4 - 0
prs.stores/BaseStore.cs

@@ -6,6 +6,7 @@ using Comal.Classes;
 using InABox.Core;
 using InABox.Database;
 using System;
+using com.sun.org.glassfish.external.probe.provider.annotations;
 
 namespace Comal.Stores
 {
@@ -38,6 +39,9 @@ namespace Comal.Stores
         protected override void BeforeSave(T entity)
         {
             CheckPlatformVersion();
+            if (entity is IProblems problems && problems.Problem.Notes?.Length == 1 &&
+                string.IsNullOrEmpty(problems.Problem.Notes[0]))
+                problems.Problem.Notes = null;
             base.BeforeSave(entity);
         }