Explorar el Código

Added Equipment "Private" flag and incorporated into Live Maps
Added Employee Job Panel
Updated DynamicCrossJoinGrid properties

Frank van den Bos hace 2 años
padre
commit
e3769eeb53

+ 5 - 0
prs.classes/Entities/Equipment/Equipment.cs

@@ -84,7 +84,12 @@ namespace Comal.Classes
         [EditorSequence(13)]
         public DateTime ManufacturedDate { get; set; }
 
+        [EditorSequence(14)]
         public CustomerLink Customer { get; set; }
+        
+        [CheckBoxEditor]
+        [EditorSequence(15)]
+        public bool Private { get; set; }
 
         [EntityRelationship(DeleteAction.SetNull)]
         [EditorSequence("Counters", 1)]

+ 8 - 0
prs.classes/SecurityDescriptors/Equipment_Descriptors.cs

@@ -0,0 +1,8 @@
+using InABox.Core;
+
+namespace Comal.Classes
+{
+    public class CanViewPrivateEquipment : DisabledSecurityDescriptor<EquipmentLicense, Equipment>
+    {
+    }
+}

+ 6 - 6
prs.desktop/Grids/ActivityEmployeeGrid.cs

@@ -1,14 +1,14 @@
-using Comal.Classes;
+using System;
+using System.Linq.Expressions;
+using Comal.Classes;
 using InABox.DynamicGrid;
 
 namespace PRSDesktop
 {
-    public class ActivityEmployeeGrid : DynamicManyToManyGrid<EmployeeActivity, Activity>
+    public class ActivityEmployeeGrid : DynamicCrossJoinGrid<EmployeeActivity, Activity>
     {
-        public ActivityEmployeeGrid()
-        {
-            Options.BeginUpdate().Clear().Add(DynamicGridOption.FilterRows).Add(DynamicGridOption.SelectColumns).EndUpdate();
-        }
+        public override Expression<Func<EmployeeActivity, Guid>> LeftMapping => x => x.Activity.ID;
+        public override Expression<Func<Activity, Guid>> LeftProperty => x => x.ID;
     }
     
 }

+ 3 - 2
prs.desktop/Grids/ActivityGrid.cs

@@ -7,6 +7,7 @@ using System.Windows.Controls;
 
 namespace PRSDesktop
 {
+
     public class ActivityGrid : DynamicDataGrid<Activity>
     {
 
@@ -28,8 +29,8 @@ namespace PRSDesktop
                 return false;
             }
 
-            DynamicGridUtils.CreateGridWindow("Employees",
-                new DynamicCrossJoinGrid<EmployeeActivity, Activity>(rows[0].ToObject<Activity>(), x => x.Activity.ID, x => x.ID)).ShowDialog();
+            var ag = new ActivityEmployeeGrid() { Left = rows[0].ToObject<Activity>() };
+            DynamicGridUtils.CreateGridWindow("Employees", ag).ShowDialog();
 
             return false;
         }

+ 6 - 6
prs.desktop/Grids/EmployeeRosterGrid.cs

@@ -57,7 +57,7 @@ namespace PRSDesktop
             UpdateButtons();
             CoreTable result = new CoreTable();
             result.LoadColumns(typeof(EmployeeRosterItem));
-            var rosteritems = String.IsNullOrWhiteSpace(Employee.Roster)
+            var rosteritems = String.IsNullOrWhiteSpace(Employee?.Roster)
                 ? new List<EmployeeRosterItem>()
                 : Serialization.Deserialize<List<EmployeeRosterItem>>(Employee.Roster);
             result.LoadRows(rosteritems);
@@ -66,7 +66,7 @@ namespace PRSDesktop
         
         private bool EditRoster(Button arg1, CoreRow[] arg2)
         {
-            var rosteritems = String.IsNullOrWhiteSpace(Employee.Roster)
+            var rosteritems = String.IsNullOrWhiteSpace(Employee?.Roster)
                 ? new List<EmployeeRosterItem>()
                 : Serialization.Deserialize<List<EmployeeRosterItem>>(Employee.Roster);
             var rostergrid = new DynamicItemsListGrid<EmployeeRosterItem>() { Items = rosteritems };
@@ -114,10 +114,10 @@ namespace PRSDesktop
                 ? "Select Start Date"
                 : $"Start: {Employee.RosterStart:dd MMM yy}";
             UpdateButton(_start, null, text);
-            _edit.IsEnabled = Employee.ID != Guid.Empty;
-            _select.IsEnabled = Employee.ID != Guid.Empty;
-            _start.IsEnabled = Employee.ID != Guid.Empty;
-            _delete.IsEnabled = Employee.ID != Guid.Empty;
+            _edit.IsEnabled = Employee?.ID != Guid.Empty;
+            _select.IsEnabled = Employee?.ID != Guid.Empty;
+            _start.IsEnabled = Employee?.ID != Guid.Empty;
+            _delete.IsEnabled = Employee?.ID != Guid.Empty;
         }
 
         private bool SelectStart(Button arg1, CoreRow[] arg2)

+ 4 - 6
prs.desktop/Panels/Employees/EmployeeActivityGrid.cs

@@ -1,3 +1,5 @@
+using System;
+using System.Linq.Expressions;
 using Comal.Classes;
 using InABox.DynamicGrid;
 
@@ -5,11 +7,7 @@ namespace PRSDesktop
 {
     public class EmployeeActivityGrid : DynamicCrossJoinGrid<EmployeeActivity, Employee>
     {
-        public EmployeeActivityGrid() : base()
-        {
-            LeftMapping = x => x.Employee.ID;
-            LeftProperty = x => x.ID;
-        }
-        
+        public override Expression<Func<EmployeeActivity, Guid>> LeftMapping => x => x.Employee.ID;
+        public override Expression<Func<Employee, Guid>> LeftProperty => x => x.ID;
     }
 }

+ 47 - 0
prs.desktop/Panels/Employees/EmployeeJobGrid.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Linq.Expressions;
+using System.Windows.Controls;
+using Comal.Classes;
+using InABox.Core;
+using InABox.DynamicGrid;
+
+namespace PRSDesktop
+{
+    public class EmployeeJobGrid : DynamicCrossJoinGrid<JobEmployee,Employee>
+    {
+
+        public override Expression<Func<JobEmployee, Guid>> LeftMapping => x => x.EmployeeLink.ID;
+        public override Expression<Func<Employee, Guid>> LeftProperty => x => x.ID;
+        
+        private Button _status;
+        private bool _activeonly = true;
+        
+        public EmployeeJobGrid()
+        {
+            _status = AddButton("Show All", null, ToggleActive);
+            _status.Width = 80;
+        }
+        
+        protected override void GenerateColumns(DynamicGridColumns columns)
+        {
+            columns.Add<JobEmployee, String>(x => x.JobLink.JobNumber, 70, "Job", "", Alignment.MiddleCenter);
+            columns.Add<JobEmployee, String>(x => x.JobLink.Name, 0, "Job Name", "", Alignment.MiddleLeft);
+            columns.Add<JobEmployee, DateTime>(x => x.Inducted, 70, "Inducted", "dd MMM yy", Alignment.MiddleCenter);
+            columns.Add<JobEmployee, bool>(x => x.Active, 25, "Act", "", Alignment.MiddleCenter);
+        }
+
+        private bool ToggleActive(Button arg1, CoreRow[] arg2)
+        {
+            _activeonly = !_activeonly;
+            UpdateButton(_status,null,_activeonly ? "Show All" : "Active Only");
+            return true;
+        }
+
+        protected override void Reload(Filters<JobEmployee> criteria, Columns<JobEmployee> columns, ref SortOrder<JobEmployee>? sort, Action<CoreTable?, Exception?> action)
+        {
+            if (_activeonly)
+                criteria.Add(new Filter<JobEmployee>(x => x.Active).IsEqualTo(true).And(x=>x.JobLink.JobStatus.Active).IsEqualTo(true));
+            base.Reload(criteria, columns, ref sort, action);
+        }
+    }
+}

+ 4 - 0
prs.desktop/Panels/Employees/EmployeePanel.xaml

@@ -129,6 +129,10 @@
                         
                     </dynamicGrid:DynamicTabItem>
                     
+                    <dynamicGrid:DynamicTabItem Header="Jobs">
+                        <local:EmployeeJobGrid x:Name="Jobs" />
+                    </dynamicGrid:DynamicTabItem>
+                    
                     <dynamicGrid:DynamicTabItem x:Name="QualificationsTab" Header="Qualifications">
                         <local:EmployeeQualificationGrid x:Name="Qualifications" />
                     </dynamicGrid:DynamicTabItem>

+ 6 - 2
prs.desktop/Panels/Employees/EmployeePanel.xaml.cs

@@ -98,6 +98,7 @@ namespace PRSDesktop
                 Forms.Refresh(true, false);
                 Qualifications.Refresh(true, false);
                 Spreadsheets.Refresh(true, false);
+                Jobs.Refresh(true, false);
             }
         }
 
@@ -108,8 +109,7 @@ namespace PRSDesktop
         public void CreateToolbarButtons(IPanelHost host)
         {
         }
-
-
+        
         public void Refresh()
         {
             Employees.Refresh(false, true);
@@ -120,6 +120,7 @@ namespace PRSDesktop
             Forms.Refresh(false, true);
             Qualifications.Refresh(false, true);
             Spreadsheets.Refresh(false, true);
+            Jobs.Refresh(false, true);
         }
 
         public string SectionName => "Employees";
@@ -169,6 +170,9 @@ namespace PRSDesktop
 
             Spreadsheets.ParentID = employee.ID;
             Spreadsheets.Refresh(false,true);
+
+            Jobs.Left = employee;
+            Jobs.Refresh(false, true);
         }
 
         // private void LoadEmployeeThumbnail(Guid imageid)

+ 3 - 7
prs.desktop/Panels/Employees/EmployeeRoleFormGrid.cs

@@ -7,12 +7,8 @@ namespace PRSDesktop
 {
     public class EmployeeRoleFormGrid : DynamicCrossJoinGrid<EmployeeDigitalForm, Employee>
     {
-        
-        public EmployeeRoleFormGrid() : base()
-        {
-            LeftMapping = x => x.Employee.ID;
-            LeftProperty = x => x.ID;
-        }
-        
+        public override Expression<Func<EmployeeDigitalForm, Guid>> LeftMapping => x => x.Employee.ID;
+        public override Expression<Func<Employee, Guid>> LeftProperty => x => x.ID;
+
     }
 }

+ 1 - 1
prs.desktop/Panels/Factory/FactoryPanel.xaml.cs

@@ -1233,7 +1233,7 @@ namespace PRSDesktop
 
             Progress.SetMessage("Progressing Items");
             new Client<ManufacturingPacketStage>().Save(stage_updates, "ManufacturingPacket Progressed from Factory Floor");
-            new Client<ManufacturingPacket>().Save(packets, "ManufacturingPacket Progressed From Fatory Floor");
+            new Client<ManufacturingPacket>().Save(packets, "ManufacturingPacket Progressed From Factory Floor");
 
             //UpdateTimeTracking();
 

+ 2 - 0
prs.desktop/Panels/Maps/MapsPanel.xaml.cs

@@ -144,6 +144,8 @@ namespace PRSDesktop
                 if (type.Equals("Equipment"))
                 {
                     var filter = new Filter<Equipment>(x => x.TrackerLink.Location.Timestamp).IsNotEqualTo(DateTime.MinValue);
+                    if (!Security.IsAllowed<CanViewPrivateEquipment>())
+                        filter = filter.And(x => x.Private).IsEqualTo(false);
                     if (grpid != Guid.Empty)
                         filter = filter.And(x => x.GroupLink.ID).IsEqualTo(grpid);