瀏覽代碼

Added Linked Properties to Job / Customer / Contact and Delivery / Job / Contact fields
Added Customer Default Contact property
Cleaned up LeaveRequest Grid and added indicators for Total / Open Form counts

frogsoftware 1 年之前
父節點
當前提交
30c7668b0f

+ 1 - 0
prs.classes/Entities/Contacts/CustomerContact.cs

@@ -12,5 +12,6 @@ namespace Comal.Classes
         public ContactLink Contact { get; set; }
 
         public ContactTypeLink Type { get; set; }
+
     }
 }

+ 7 - 2
prs.classes/Entities/Customer/Customer.cs

@@ -64,11 +64,16 @@ namespace Comal.Classes
 
         [EditorSequence(3)]
         public Address Delivery { get; set; }
-
+        
         [EditorSequence(5)]
+        [TextBoxEditor(Visible = Visible.Optional, Editable = Editable.Disabled)]
+        [Obsolete("Replaced with DefaultContact", false)]
         public string Contact { get; set; }
-
+        
         [EditorSequence(6)]
+        public ContactLink DefaultContact { get; set; }
+
+        [EditorSequence(7)]
         [TextBoxEditor]
         public string Email { get; set; }
 

+ 3 - 0
prs.classes/Entities/Customer/CustomerLink.cs

@@ -13,6 +13,7 @@ namespace Comal.Classes
 
         [TextBoxEditor(Editable = Editable.Hidden, Visible = Visible.Optional)]
         public string Name { get; set; }
+        
     }
 
     public class CustomerLink : EntityLink<Customer>
@@ -28,6 +29,8 @@ namespace Comal.Classes
 
         [TextBoxEditor(Editable = Editable.Hidden, Visible = Visible.Optional)]
         public string Contact { get; set; }
+        
+        public ContactLink DefaultContact { get; set; }
 
         [TextBoxEditor(Editable = Editable.Hidden, Visible = Visible.Optional)]
         public string Email { get; set; }

+ 7 - 4
prs.classes/Entities/DeliveryItem/Delivery.cs

@@ -43,13 +43,13 @@ namespace Comal.Classes
 
         [EditorSequence(3)]
         public JobLink Job { get; set; }
-
+        
         [EditorSequence(4)]
-        public ContactLink Contact { get; set; }
-
-        [EditorSequence(5)]
         public Address Address { get; set; }
 
+        [EditorSequence(5)]
+        public ContactLink Contact { get; set; }
+        
         [EditorSequence(6)]
         [MemoEditor]
         public string Notes { get; set; }
@@ -155,6 +155,9 @@ namespace Comal.Classes
         
         static Delivery()
         {
+            
+            LinkedProperties.Register<Delivery,ContactLink,Guid>(x=>x.Job.Contact, x=>x.ID, x=>x.Contact.ID);
+            
             LinkedProperties.Register<Delivery,Address,String>(x=>x.Job.SiteAddress, x=>x.Street, x=>x.Address.Street);
             LinkedProperties.Register<Delivery,Address,String>(x=>x.Job.SiteAddress, x=>x.City, x=>x.Address.City);
             LinkedProperties.Register<Delivery,Address,String>(x=>x.Job.SiteAddress, x=>x.PostCode, x=>x.Address.PostCode);

+ 7 - 2
prs.classes/Entities/Job/Job.cs

@@ -31,11 +31,15 @@ namespace Comal.Classes
 
         [EditorSequence(3)]
         public CustomerLink Customer { get; set; }
-
+        
         [EditorSequence(4)]
         public Address SiteAddress { get; set; }
-
+        
         [EditorSequence(5)]
+        public ContactLink Contact { get; set; }
+        
+        [EditorSequence(6)]
+        [Caption("Bill To")]
         public AccountLink Account { get; set; }
 
         #endregion
@@ -175,6 +179,7 @@ namespace Comal.Classes
         
         static Job()
         {
+            LinkedProperties.Register<Job, ContactLink, Guid>(x => x.Customer.DefaultContact, x => x.ID, x => x.Contact.ID);
             LinkedProperties.Register<Job,Address,String>(x=>x.Customer.Delivery, x=>x.Street, x=>x.SiteAddress.Street);
             LinkedProperties.Register<Job,Address,String>(x=>x.Customer.Delivery, x=>x.City, x=>x.SiteAddress.City);
             LinkedProperties.Register<Job,Address,String>(x=>x.Customer.Delivery, x=>x.PostCode, x=>x.SiteAddress.PostCode);

+ 2 - 0
prs.classes/Entities/Job/JobLink.cs

@@ -25,6 +25,8 @@ namespace Comal.Classes
         
         public Address SiteAddress { get; set; }
         
+        public ContactLink Contact { get; set; }
+        
         public JobStatusLink JobStatus { get; set; }
         
         public JobScopeLink DefaultScope { get; set; }

+ 17 - 0
prs.classes/Entities/LeaveRequest/LeaveRequest.cs

@@ -29,6 +29,19 @@ namespace Comal.Classes
                 { LeaveRequestForm => LeaveRequestForm.Parent.ID, LeaveRequest => LeaveRequest.ID }
             };
     }
+    
+    public class LeaveRequestTotalFormCount : CoreAggregate<LeaveRequest, LeaveRequestForm, Guid>
+    {
+        public override Expression<Func<LeaveRequestForm, Guid>> Aggregate => x => x.ID;
+
+        public override AggregateCalculation Calculation => AggregateCalculation.Count;
+        
+        public override Dictionary<Expression<Func<LeaveRequestForm, object>>, Expression<Func<LeaveRequest, object>>> Links =>
+            new Dictionary<Expression<Func<LeaveRequestForm, object>>, Expression<Func<LeaveRequest, object>>>()
+            {
+                { LeaveRequestForm => LeaveRequestForm.Parent.ID, LeaveRequest => LeaveRequest.ID }
+            };
+    }
 
     [UserTracking("Holiday Calendar")]
     [Caption("Leave Requests")]
@@ -105,6 +118,10 @@ namespace Comal.Classes
         [IntegerEditor(Visible = Visible.Optional,Editable = Editable.Hidden)]
         [Aggregate(typeof(LeaveRequestOpenFormCount))]
         public int OpenForms { get; set; }
+        
+        [IntegerEditor(Visible = Visible.Optional,Editable = Editable.Hidden)]
+        [Aggregate(typeof(LeaveRequestTotalFormCount))]
+        public int FormCount { get; set; }
 
         //protected override void DoPropertyChanged(string name, object? before, object? after)
         //{

+ 29 - 51
prs.desktop/Grids/LeaveRequestGrid.cs

@@ -13,48 +13,33 @@ namespace PRSDesktop
 {
     public class LeaveRequestGrid : DynamicDataGrid<LeaveRequest>
     {
-        public bool FutureOnly = true;
-        private bool InProgressOnly = true;
+        //public bool FutureOnly = true;
+        //private bool InProgressOnly = true;
 
         protected override void Init()
         {
             base.Init();
             
             HiddenColumns.Add(x=>x.OpenForms);
-            ActionColumns.Add(new DynamicImageColumn(OpenFormsImage) { Position = DynamicActionColumnPosition.Start, ToolTip = OpenFormsToolTip});
-            
-            ActionColumns.Add(new DynamicImageColumn(PRSDesktop.Resources.contract.AsBitmapImage(), FormAction) { Position = DynamicActionColumnPosition.End });
-
-            AddButton("Include Complete", null, IncompleteOnlyClick);
-            AddButton("Include History", null, ToggleAllRequests);
+            HiddenColumns.Add(x=>x.FormCount);
+            ActionColumns.Add(new DynamicImageColumn(FormImage, FormAction) { Position = DynamicActionColumnPosition.End, ToolTip = FormToolTip});
         }
         
         
         private readonly BitmapImage _openforms = PRSDesktop.Resources.warning.AsBitmapImage();
+        private readonly BitmapImage _completedforms = PRSDesktop.Resources.contract.AsBitmapImage();
         
-        private BitmapImage? OpenFormsImage(CoreRow? row)
-        {
-            return row?.Get<LeaveRequest, int>(x => x.OpenForms) != 0
-                ? _openforms
-                : null;
-        }
-        
-        private FrameworkElement? OpenFormsToolTip(DynamicActionColumn column, CoreRow? row)
+        private BitmapImage? FormImage(CoreRow? row)
         {
-            if (row == null)
-                return column.TextToolTip("Do incomplete forms exist?");
-            int open = row.Get<LeaveRequest, int>(x => x.OpenForms);
-            if (open != 0)
-                return column.TextToolTip($"{open} incomplete forms");
-            return null;
+            return row == null
+                ? _completedforms
+                : row?.Get<LeaveRequest, int>(x => x.OpenForms) != 0
+                    ? _openforms
+                    : row?.Get<LeaveRequest, int>(x => x.FormCount) != 0
+                        ? _completedforms
+                        : null;
         }
         
-        protected override void DoReconfigure(FluentList<DynamicGridOption> options)
-        {
-            base.DoReconfigure(options);
-            options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns);
-        }
-
         private bool FormAction(CoreRow? row)
         {
             if (row is null)
@@ -70,33 +55,26 @@ namespace PRSDesktop
 
             return false;
         }
-
-        private bool IncompleteOnlyClick(Button btn, CoreRow[] arg2)
-        {
-            InProgressOnly = !InProgressOnly;
-            UpdateButton(btn, null, InProgressOnly ? "Include Complete" : "In Progress Only");
-            return true;
-        }
-
-
-        private bool ToggleAllRequests(Button btn, CoreRow[] rows)
+        
+        private FrameworkElement? FormToolTip(DynamicActionColumn column, CoreRow? row)
         {
-            FutureOnly = !FutureOnly;
-            UpdateButton(btn, null, FutureOnly ? "Include History" : "Future Only");
-            return true;
+            if (row == null)
+                return column.TextToolTip("Leave Request Form Status?");
+            int open = row.Get<LeaveRequest, int>(x => x.OpenForms);
+            int total = row.Get<LeaveRequest, int>(x => x.FormCount);
+            if (open != 0)
+                return column.TextToolTip($"{open} incomplete forms");
+            if (total != 0)
+                return column.TextToolTip($"{total} forms");
+            return null;
         }
-
-
-        protected override void Reload(Filters<LeaveRequest> criteria, Columns<LeaveRequest> columns, ref SortOrder<LeaveRequest>? sort,
-            Action<CoreTable?, Exception?> action)
+        
+        protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
-            if (InProgressOnly)
-                criteria.Add(new Filter<LeaveRequest>(x => x.Status).IsEqualTo(LeaveRequestStatus.InProgress));
-            if (FutureOnly)
-                criteria.Add(new Filter<LeaveRequest>(x => x.To).IsGreaterThanOrEqualTo(DateTime.Today));
-            base.Reload(criteria, columns, ref sort, action);
+            base.DoReconfigure(options);
+            options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns);
         }
-
+        
         protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, LeaveRequest[] items, string name, object value)
         {
             var result = base.EditorValueChanged(editor, items, name, value);

+ 43 - 0
prs.desktop/Panels/Customers/CustomerContactGrid.cs

@@ -1,14 +1,28 @@
 using System;
+using System.Linq;
 using System.Windows;
+using System.Windows.Media.Imaging;
 using Comal.Classes;
+using InABox.Clients;
 using InABox.Core;
 using InABox.DynamicGrid;
+using InABox.WPF;
 
 namespace PRSDesktop
 {
     public class CustomerContactGrid : DynamicDataGrid<CustomerContact>, ICustomerGrid
     {
         
+        private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
+        
+        public CustomerContactGrid()
+        {
+            HiddenColumns.Add(x=>x.Customer.DefaultContact.ID);
+            HiddenColumns.Add(x=>x.Contact.ID);
+            HiddenColumns.Add(x=>x.Customer.ID);
+            ActionColumns.Add(new DynamicImageColumn(IsDefaultImage, SelectDefaultAction) { Position = DynamicActionColumnPosition.Start });
+        }
+        
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
             base.DoReconfigure(options);
@@ -19,6 +33,35 @@ namespace PRSDesktop
                 DynamicGridOption.DeleteRows
             );
         }
+        
+        private BitmapImage? IsDefaultImage(CoreRow? row)
+        {
+            return row == null
+                ? tick
+                : row.Get<CustomerContact, Guid>(x => x.Customer.DefaultContact.ID) == row.Get<CustomerContact, Guid>(x => x.Contact.ID)
+                    ? tick
+                    : null;
+        }
+
+        private bool SelectDefaultAction(CoreRow? row)
+        {
+            if ((row == null) ||row.Get<CustomerContact, Guid>(x => x.Customer.DefaultContact.ID) == row.Get<CustomerContact, Guid>(x => x.Contact.ID))
+                return false;
+            using (new WaitCursor())
+            {
+                var customer = new Client<Customer>().Query(
+                    new Filter<Customer>(x => x.ID).IsEqualTo(row.Get<CustomerContact, Guid>(x => x.Customer.ID)),
+                    new Columns<Customer>(x => x.ID).Add(x => x.DefaultContact.ID)
+                ).Rows.FirstOrDefault()?.ToObject<Customer>();
+                if (customer != null)
+                {
+                    customer.DefaultContact.ID = row.Get<CustomerContact, Guid>(x => x.Contact.ID);
+                    new Client<Customer>().Save(customer, "Updated Default Contact");
+                    return true;
+                }
+            }
+            return false;
+        }
 
         public Customer Customer { get; set; }
 

+ 110 - 110
prs.desktop/Panels/Delivery/DeliveryList.cs

@@ -67,118 +67,118 @@ namespace PRSDesktop
             {
                 editor.Editable = Security.IsAllowed<CanSkipDeliveryPhotos>() ? Editable.Enabled : Editable.Disabled;
             }
-            else if (column.ColumnName.Equals("Contact.ID"))
-            {
-                editor.Editable = Editable.Hidden;
-            }
-            else if (column.ColumnName.Equals("Contact.Name"))
-            {
-                editor.Editable = Editable.Enabled;
-                (editor as TextBoxEditor).Buttons = new[]
-                {
-                    new(items?.FirstOrDefault(), "Select", 50, ContactNameLookup, true),
-                    new EditorButton(items?.FirstOrDefault(), "Clear", 50, ContactNameClear, true)
-                };
-            }
-        }
-
-        private void ContactNameClear(object editor, object? item)
-        {
-            if (item is not Delivery delivery)
-                return;
-
-            delivery.Contact.ID = Guid.Empty;
-            delivery.Address.Street = "";
-            delivery.Address.City = "";
-            delivery.Address.State = "";
-            delivery.Address.PostCode = "";
-
-            if(editor is BaseDynamicEditorControl baseEditor)
-            {
-                baseEditor.SetValue(baseEditor.ColumnName, "");
-            }
+            // else if (column.ColumnName.Equals("Contact.ID"))
+            // {
+            //     editor.Editable = Editable.Hidden;
+            // }
+            // else if (column.ColumnName.Equals("Contact.Name"))
+            // {
+            //     editor.Editable = Editable.Enabled;
+            //     (editor as TextBoxEditor).Buttons = new[]
+            //     {
+            //         new(items?.FirstOrDefault(), "Select", 50, ContactNameLookup, true),
+            //         new EditorButton(items?.FirstOrDefault(), "Clear", 50, ContactNameClear, true)
+            //     };
+            // }
         }
 
-        private void ContactNameLookup(object editor, object? item)
-        {
-            var contacts = new MultiSelectDialog<Contact>(
-                null,
-                null,
-                false
-            );
-
-            if (contacts.ShowDialog() != true)
-                return;
-
-            var contact = contacts.Items().FirstOrDefault();
-            if (contact == null)
-                return;
-            if (item is not Delivery delivery)
-                return;
-
-            delivery.Contact.ID = contact.ID;
-            delivery.Address.Street = contact.Address.Street;
-            delivery.Address.City = contact.Address.City;
-            delivery.Address.State = contact.Address.State;
-            delivery.Address.PostCode = contact.Address.PostCode;
-
-            if (editor is BaseDynamicEditorControl baseEditor)
-            {
-                baseEditor.SetValue(baseEditor.ColumnName, contact.Name);
-            }
-            //SetEditorValue(item, "Contact.Name", contact.Name);
-            //SetEditorValue(item,"Address.Street",contact.Address.Street);
-            //SetEditorValue(item, "Address.City",contact.Address.City);
-            //SetEditorValue(item, "Address.State",contact.Address.State);
-            //SetEditorValue(item, "Address.PostCode",contact.Address.PostCode);
-        }
-
-        protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, Delivery[] items, string name, object value)
-        {
-            var result = base.EditorValueChanged(editor, items, name, value);
-            if (name.Equals("Job.ID"))
-            {
-                items.ForEach(item => { item.Contact.ID = Guid.Empty; });
-                editor.SetEditorValue("Contact.Name", "");
-            }
-            else if (name.Equals("Contact.Name"))
-            {
-                var street = "";
-                var city = "";
-                var state = "";
-                var postcode = "";
-                if (items.First().Contact.IsValid())
-                {
-                    street = items.First().Address.Street;
-                    city = items.First().Address.City;
-                    state = items.First().Address.State;
-                    postcode = items.First().Address.PostCode;
-                }
-                else
-                {
-                    CoreRow row = null;
-                    if (items.First().ID != Guid.Empty)
-                    {
-                        row = new Client<Job>().Query(
-                            new Filter<Job>(x => x.ID).IsEqualTo(items.First().Job.ID),
-                            new Columns<Job>(x => x.ID, x => x.SiteAddress.Street, x => x.SiteAddress.City, x => x.SiteAddress.State,
-                                x => x.SiteAddress.PostCode)
-                        ).Rows.FirstOrDefault();
-                        street = row != null ? row.Get<Job, string>(x => x.SiteAddress.Street) : "";
-                        city = row != null ? row.Get<Job, string>(x => x.SiteAddress.City) : "";
-                        state = row != null ? row.Get<Job, string>(x => x.SiteAddress.State) : "";
-                        postcode = row != null ? row.Get<Job, string>(x => x.SiteAddress.PostCode) : "";
-                    }
-                }
-
-                editor.SetEditorValue("Address.Street", street);
-                editor.SetEditorValue("Address.City", city);
-                editor.SetEditorValue("Address.State", state);
-                editor.SetEditorValue("Address.PostCode", postcode);
-            }
-
-            return result;
-        }
+        // private void ContactNameClear(object editor, object? item)
+        // {
+        //     if (item is not Delivery delivery)
+        //         return;
+        //
+        //     delivery.Contact.ID = Guid.Empty;
+        //     delivery.Address.Street = "";
+        //     delivery.Address.City = "";
+        //     delivery.Address.State = "";
+        //     delivery.Address.PostCode = "";
+        //
+        //     if(editor is BaseDynamicEditorControl baseEditor)
+        //     {
+        //         baseEditor.SetValue(baseEditor.ColumnName, "");
+        //     }
+        // }
+        //
+        // private void ContactNameLookup(object editor, object? item)
+        // {
+        //     var contacts = new MultiSelectDialog<Contact>(
+        //         null,
+        //         null,
+        //         false
+        //     );
+        //
+        //     if (contacts.ShowDialog() != true)
+        //         return;
+        //
+        //     var contact = contacts.Items().FirstOrDefault();
+        //     if (contact == null)
+        //         return;
+        //     if (item is not Delivery delivery)
+        //         return;
+        //
+        //     delivery.Contact.ID = contact.ID;
+        //     delivery.Address.Street = contact.Address.Street;
+        //     delivery.Address.City = contact.Address.City;
+        //     delivery.Address.State = contact.Address.State;
+        //     delivery.Address.PostCode = contact.Address.PostCode;
+        //
+        //     if (editor is BaseDynamicEditorControl baseEditor)
+        //     {
+        //         baseEditor.SetValue(baseEditor.ColumnName, contact.Name);
+        //     }
+        //     //SetEditorValue(item, "Contact.Name", contact.Name);
+        //     //SetEditorValue(item,"Address.Street",contact.Address.Street);
+        //     //SetEditorValue(item, "Address.City",contact.Address.City);
+        //     //SetEditorValue(item, "Address.State",contact.Address.State);
+        //     //SetEditorValue(item, "Address.PostCode",contact.Address.PostCode);
+        // }
+
+        // protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, Delivery[] items, string name, object value)
+        // {
+        //     var result = base.EditorValueChanged(editor, items, name, value);
+        //     if (name.Equals("Job.ID"))
+        //     {
+        //         items.ForEach(item => { item.Contact.ID = Guid.Empty; });
+        //         editor.SetEditorValue("Contact.Name", "");
+        //     }
+        //     else if (name.Equals("Contact.Name"))
+        //     {
+        //         var street = "";
+        //         var city = "";
+        //         var state = "";
+        //         var postcode = "";
+        //         if (items.First().Contact.IsValid())
+        //         {
+        //             street = items.First().Address.Street;
+        //             city = items.First().Address.City;
+        //             state = items.First().Address.State;
+        //             postcode = items.First().Address.PostCode;
+        //         }
+        //         else
+        //         {
+        //             CoreRow row = null;
+        //             if (items.First().ID != Guid.Empty)
+        //             {
+        //                 row = new Client<Job>().Query(
+        //                     new Filter<Job>(x => x.ID).IsEqualTo(items.First().Job.ID),
+        //                     new Columns<Job>(x => x.ID, x => x.SiteAddress.Street, x => x.SiteAddress.City, x => x.SiteAddress.State,
+        //                         x => x.SiteAddress.PostCode)
+        //                 ).Rows.FirstOrDefault();
+        //                 street = row != null ? row.Get<Job, string>(x => x.SiteAddress.Street) : "";
+        //                 city = row != null ? row.Get<Job, string>(x => x.SiteAddress.City) : "";
+        //                 state = row != null ? row.Get<Job, string>(x => x.SiteAddress.State) : "";
+        //                 postcode = row != null ? row.Get<Job, string>(x => x.SiteAddress.PostCode) : "";
+        //             }
+        //         }
+        //
+        //         editor.SetEditorValue("Address.Street", street);
+        //         editor.SetEditorValue("Address.City", city);
+        //         editor.SetEditorValue("Address.State", state);
+        //         editor.SetEditorValue("Address.PostCode", postcode);
+        //     }
+        //
+        //     return result;
+        // }
 
         private bool DocumentsClick(CoreRow? arg)
         {

+ 16 - 0
prs.desktop/Panels/Jobs/JobGrid.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using Comal.Classes;
 using InABox.Clients;
@@ -83,5 +84,20 @@ namespace PRSDesktop
                 result.JobStatus.ID = defstatus.Rows.First().Get<JobStatus, Guid>(x => x.ID);
             return result;
         }
+
+        protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, Job[] items, string name, object value)
+        {
+            var result = base.EditorValueChanged(editor, items, name, value);
+            if (name.Equals("Customer.ID"))
+            {
+                // false here because a customer has a defaultcontact
+                // and we need to load the lookups before we set the default value
+                var contact = editor.FindEditor("Contact.ID") as ILookupEditorControl;
+                if (contact != null)
+                    DefineLookups(contact,items,false); 
+            }
+
+            return result;
+        }
     }
 }

+ 8 - 3
prs.desktop/Panels/Jobs/JobScopes/JobScopeGrid.cs

@@ -14,15 +14,20 @@ namespace PRSDesktop
     internal class JobScopeGrid : DynamicDataGrid<JobScope>
     {
         private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
+
+        public JobScopeGrid()
+        {
+            HiddenColumns.Add(x=>x.Job.DefaultScope.ID);
+            HiddenColumns.Add(x=>x.Job.ID);
+            ActionColumns.Add(new DynamicImageColumn(IsDefaultImage, SelectDefaultAction) { Position = DynamicActionColumnPosition.Start });
+        }
         
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
             base.DoReconfigure(options);
             options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns, DynamicGridOption.FilterRows);
             
-            HiddenColumns.Add(x=>x.Job.DefaultScope.ID);
-            HiddenColumns.Add(x=>x.Job.ID);
-            ActionColumns.Add(new DynamicImageColumn(IsDefaultImage, SelectDefaultAction) { Position = DynamicActionColumnPosition.Start });
+            
         }
 
         private BitmapImage? IsDefaultImage(CoreRow? row)