Procházet zdrojové kódy

Added Parent property to ProductGroup
Cleaned up Up Main Window DockPanels
Simplified RequisitionsDock

frogsoftware před 1 rokem
rodič
revize
a53bd31748

+ 36 - 1
prs.classes/Entities/Product/ProductGroup/ProductGroup.cs

@@ -1,10 +1,15 @@
-using InABox.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using InABox.Clients;
+using InABox.Core;
 
 namespace Comal.Classes
 {
     [UserTracking(typeof(Product))]
     public class ProductGroup : Entity, IRemotable, IPersistent, ILicense<ProductManagementLicense>, IExportable, IImportable, IMergeable
     {
+        
         [EditorSequence(1)]
         [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)]
         public string Code { get; set; }
@@ -13,6 +18,36 @@ namespace Comal.Classes
         [TextBoxEditor]
         public string Description { get; set; }
 
+        
+        private class ProductGroupLookup : LookupDefinitionGenerator<ProductGroup, ProductGroup>
+        {
+            
+            
+            public override Filter<ProductGroup> DefineFilter(ProductGroup[] items)
+            {
+                if (items?.Any() != true || items.All(x=>x.ID == Guid.Empty))
+                    return LookupFactory.DefineFilter<ProductGroup>();
+
+                var exclusions = new List<Guid>();
+                var data = new Client<ProductGroup>().Query(
+                    null,
+                    new Columns<ProductGroup>(x => x.ID).Add(x => x.Parent.ID).Add(x => x.Description)
+                );
+                var nodes = new CoreTreeNodes();
+                nodes.Load<ProductGroup>(data,x=>x.ID,x=>x.Parent.ID,x=>x.Description);
+                foreach (var item in items)
+                    nodes.GetChildren(exclusions,item.ID);
+                return new Filter<ProductGroup>(x => x.ID).NotInList(exclusions.ToArray());
+            }
+
+            public override Columns<ProductGroup> DefineFilterColumns()
+                => new Columns<ProductGroup>(x => x.ID).Add(x => x.Parent.ID).Add(x => x.Code).Add(x => x.Description);
+        }
+        
+        [LookupDefinition(typeof(ProductGroupLookup))]
+        [EditorSequence(3)]
+        public ProductGroupLink Parent { get; set; }
+        
         public override string ToString()
         {
             return string.Format("{0}: {1}", Code, Description);

+ 6 - 6
prs.classes/Entities/Requisition/Requisition.cs

@@ -86,18 +86,18 @@ namespace Comal.Classes
         [EditorSequence(7)]
         [MemoEditor]
         public string Request { get; set; }
-
+        
         [EditorSequence(8)]
-        [NotesEditor]
-        public string[] Notes { get; set; } = Array.Empty<string>();
-
-        [EditorSequence(9)]
         [DateTimeEditor]
         public DateTime Due { get; set; }
         
-        [EditorSequence(10)]
+        [EditorSequence(9)]
         public RequisitionDestinationLink Destination { get; set; }
         
+        [EditorSequence("Notes",1)]
+        [NotesEditor]
+        public string[] Notes { get; set; } = Array.Empty<string>();
+        
         [EditorSequence("Fulfilment", 1)]
         [Caption("Assigned To")]
         public EmployeeLink Employee { get; set; }

+ 2 - 2
prs.desktop/DockPanels/DeliveryDock.xaml

@@ -84,10 +84,10 @@
             <RowDefinition Height="Auto" />
         </Grid.RowDefinitions>
 
-        <ListBox Grid.Row="0" x:Name="Deliveries" HorizontalContentAlignment="Stretch">
+        <ListBox Grid.Row="0" x:Name="Deliveries" HorizontalContentAlignment="Stretch" BorderBrush="Transparent" BorderThickness="0">
             <ListBox.ItemTemplate>
                 <DataTemplate>
-                    <Border CornerRadius="5" BorderBrush="Black" BorderThickness="0.75" Margin="2"
+                    <Border CornerRadius="5" BorderBrush="Black" BorderThickness="0.75" Margin="2,2,2,0"
                             Style="{StaticResource backgroundStyle}">
                         <Grid>
                             <Grid.ColumnDefinitions>

+ 1 - 1
prs.desktop/DockPanels/JobDock.xaml

@@ -11,7 +11,7 @@
             <RowDefinition Height="*" />
         </Grid.RowDefinitions>
 
-        <DockPanel Grid.Row="0" Margin="2,2,2,0">
+        <DockPanel Grid.Row="0" Margin="0,0,0,4">
             <Label 
                 DockPanel.Dock="Left" 
                 Content="Job Status:" />

+ 0 - 1
prs.desktop/DockPanels/JobDock.xaml.cs

@@ -25,7 +25,6 @@ namespace PRSDesktop
         {
             _projects = new ProjectsGrid();
             _projects.SetValue(Grid.RowProperty, 1);
-            _projects.Margin = new Thickness(2);
             _projects.ColumnsTag = "JobDock";
             _projects.Refresh(true, false);
             grid.Children.Add(_projects);  

+ 2 - 2
prs.desktop/DockPanels/ProductLookupDock.xaml

@@ -7,8 +7,8 @@
              xmlns:classes="clr-namespace:Comal.Classes;assembly=PRSClasses"
              xmlns:local="clr-namespace:PRSDesktop"
              mc:Ignorable="d"
-             d:DesignHeight="800" d:DesignWidth="500" Background="WhiteSmoke">
-    <Grid Margin="5">
+             d:DesignHeight="800" d:DesignWidth="500">
+    <Grid>
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto" />
             <RowDefinition Height="0.35*" />

+ 21 - 0
prs.desktop/DockPanels/Requisitions/MyRequisitionItems.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 using Comal.Classes;
 using InABox.Core;
 using InABox.DynamicGrid;
@@ -49,6 +50,26 @@ public class MyRequisitionItems : DynamicDataGrid<RequisitionItem>
     {
         var result = base.CreateItem();
         result.RequisitionLink.ID = RequisitionID;
+        result.Quantity = 1;
         return result;
     }
+
+    protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
+    {
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, double>(x => x.ActualQuantity, "."))
+            return new NullEditor();
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, Guid>(x => x.Location.ID, "."))
+            return new NullEditor();
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, DateTime>(x => x.Picked, "."))
+            return new NullEditor();
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, Guid>(x => x.JobRequisitionItem.ID, "."))
+            return new NullEditor();
+        if (column.ColumnName.StartsWith($"{CoreUtils.GetFullPropertyName<RequisitionItem, ActualCharge>(x => x.Charge, ".")}."))
+            return new NullEditor();
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, Guid>(x => x.JobScope.ID, "."))
+            return new NullEditor();
+        if (column.ColumnName == CoreUtils.GetFullPropertyName<RequisitionItem, Guid>(x => x.Image.ID, "."))
+            return new NullEditor();
+        return base.GetEditor(item, column);
+    }
 }

+ 39 - 1
prs.desktop/DockPanels/Requisitions/MyRequisitionsList.cs

@@ -1,4 +1,6 @@
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using Comal.Classes;
 using InABox.Core;
 using InABox.DynamicGrid;
@@ -10,6 +12,8 @@ public class MyRequisitionsList : DynamicDataGrid<Requisition>
     public MyRequisitionsList() : base()
     {
         ColumnsTag = nameof(MyRequisitionsList);
+        HiddenColumns.Add(x=>x.Request);
+        HiddenColumns.Add(x=>x.Destination.Description);
     }
 
     public override DynamicGridColumns GenerateColumns()
@@ -18,13 +22,20 @@ public class MyRequisitionsList : DynamicDataGrid<Requisition>
         columns.Add<Requisition, int>(x => x.Number,50,"Req #","",Alignment.MiddleCenter);
         columns.Add<Requisition, string>(x => x.Title,0,"Subject","",Alignment.MiddleLeft);
         columns.Add<Requisition, DateTime>(x => x.Created,80,"Created","dd MMM yy",Alignment.MiddleCenter);
+        columns.Add<Requisition, string>(x => x.Destination.Description,100,"Detination","",Alignment.MiddleCenter);
         return columns;
     }
     
     protected override void DoReconfigure(FluentList<DynamicGridOption> options)
     {
         base.DoReconfigure(options);
-        options.Clear();
+        options
+            .BeginUpdate()
+            .Clear()
+            .Add(DynamicGridOption.AddRows)
+            .Add(DynamicGridOption.EditRows)
+            .Add(DynamicGridOption.DeleteRows)
+            .EndUpdate();
     }
 
     protected override void Reload(Filters<Requisition> criteria, Columns<Requisition> columns, ref SortOrder<Requisition>? sort, Action<CoreTable?, Exception?> action)
@@ -36,4 +47,31 @@ public class MyRequisitionsList : DynamicDataGrid<Requisition>
         
         base.Reload(criteria, columns, ref sort, action);
     }
+
+    protected override Requisition CreateItem()
+    {
+        var result = base.CreateItem();
+        result.RequestedBy.ID = App.EmployeeID;
+        result.Title = $"Materials for {App.EmployeeName}";
+        return result;
+    }
+
+    protected override void DoValidate(Requisition[] items, List<string> errors)
+    {
+        base.DoValidate(items, errors);
+        if (items.Any(x=>x.Destination.ID == Guid.Empty))
+            errors.Add("Please select a destination");
+    }
+
+    protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
+    {
+        if (column.Editor.Page == "Fulfilment")
+            return new NullEditor();
+        return base.GetEditor(item, column);
+    }
+
+    public override DynamicEditorPages LoadEditorPages(Requisition item)
+    {
+        return new DynamicEditorPages(); //base.LoadEditorPages(item));
+    }
 }

+ 24 - 71
prs.desktop/DockPanels/Requisitions/RequisitionsDock.xaml

@@ -7,89 +7,42 @@
              mc:Ignorable="d"
              d:DesignHeight="800" d:DesignWidth="300">
     <Grid
-        x:Name="_grid">
+        x:Name="_grid"
+        Margin="2">
+        
         <Grid.RowDefinitions>
-            <RowDefinition Height="Auto"/>
-            <RowDefinition Height="150"/>
-            <RowDefinition Height="Auto"/>
-            <RowDefinition Height="Auto"/>
-            <RowDefinition Height="Auto"/>
-            <RowDefinition Height="200"/>
             <RowDefinition Height="*"/>
+            <RowDefinition Height="200"/>
+            <RowDefinition Height="2*"/>
         </Grid.RowDefinitions>
+        
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*"/>
-            <ColumnDefinition Width="Auto"/>
         </Grid.ColumnDefinitions>
         
         <Border
-            Grid.Row="0"
-            Grid.Column="0"
-            BorderBrush="Gray"
-            BorderThickness="0.75"
-            Background="WhiteSmoke">
-            <Label
-                Content="My Requsitions"
-                HorizontalContentAlignment="Center"/>
-        </Border>
-        
-        <Button
-            Grid.Row="0"
-            Grid.Column="1"
-            Content="Add" 
-            Margin="2,0,0,0"
-            Padding="5,0"
-            BorderBrush="Gray"
-            BorderThickness="0.75"/>
-        
-        <Border
-            Grid.Row="2"
-            Grid.Column="0"
-            Grid.ColumnSpan="2"
-            Margin="0,2,0,0"
-            BorderBrush="Gray"
-            BorderThickness="0.75,0.75,0.75,0"
-            Background="WhiteSmoke">
-            <Label
-                Content="Requisition Title"
-                HorizontalContentAlignment="Center"/>
-        </Border>
-        
-        <TextBox
-            x:Name="Title"
-            Grid.Row="3"
-            Grid.Column="0"
-            Grid.ColumnSpan="2"
-            Background="LightYellow"
-            Padding="5"
-            IsEnabled="False"
-            BorderBrush="Gray"
-            LostFocus="Title_OnLostFocus"/>
-        
-        <Border
-            Grid.Row="4"
-            Grid.Column="0"
-            Grid.ColumnSpan="2"
+            Grid.Row="1"
             Margin="0,2,0,0"
             BorderBrush="Gray"
-            BorderThickness="0.75,0.75,0.75,0"
-            Background="WhiteSmoke">
-            <Label
-                Content="Requisition Description"
-                HorizontalContentAlignment="Center"/>
+            BorderThickness="0.75"
+            Background="WhiteSmoke"
+            Padding="4">
+            <DockPanel>
+                <TextBlock
+                    DockPanel.Dock="Top"
+                    Text="Request:"
+                    FontWeight="Bold"/>
+                <TextBlock
+                    x:Name="_request"
+                    DockPanel.Dock="Top"
+                    Background="WhiteSmoke"
+                    Margin="0,4,0,0"
+                    TextWrapping="WrapWithOverflow"/>
+            </DockPanel>
+
         </Border>
         
-        <TextBox
-            x:Name="Notes"
-            Grid.Row="5"
-            Grid.Column="0"
-            Grid.ColumnSpan="2"
-            Padding="5"
-            IsEnabled="False"
-            Background="LightYellow"
-            BorderBrush="Gray"
-            TextWrapping="WrapWithOverflow"
-            LostFocus="Notes_OnLostFocus"/>
+
         
     </Grid>
 </UserControl>

+ 4 - 37
prs.desktop/DockPanels/Requisitions/RequisitionsDock.xaml.cs

@@ -21,17 +21,12 @@ public partial class RequisitionsDock : UserControl, IDockPanel
     public void Setup()
     {
         _requisitionList = new MyRequisitionsList() { Margin = new Thickness(0, 2, 0, 0) };
-        _requisitionList.SetValue(Grid.RowProperty, 1);
-        _requisitionList.SetValue(Grid.ColumnProperty, 0);
-        _requisitionList.SetValue(Grid.ColumnSpanProperty, 2);
         _requisitionList.OnSelectItem += Requisitions_OnOnSelectItem;
         _grid.Children.Add(_requisitionList);
         _requisitionList.Refresh(true,false);
 
         _requisitionItems = new MyRequisitionItems() { Margin = new Thickness(0, 2, 0, 0) }; 
-        _requisitionItems.SetValue(Grid.RowProperty, 7);
-        _requisitionItems.SetValue(Grid.ColumnProperty, 0);
-        _requisitionItems.SetValue(Grid.ColumnSpanProperty, 2);
+        _requisitionItems.SetValue(Grid.RowProperty, 2);
         _grid.Children.Add(_requisitionItems);
         _requisitionItems.Refresh(true,false);
     }
@@ -55,36 +50,8 @@ public partial class RequisitionsDock : UserControl, IDockPanel
         _requisitionItems.Refresh(false,true);
         _requisitionItems.IsEnabled = _requisition != null;
         
-        Title.Text = _requisition?.Title ?? "";
-        Title.IsEnabled = _requisition != null;
-        
-        Notes.Text = _requisition?.Request ?? "";
-        Notes.IsEnabled = _requisition != null;
-    }
-
-    private void Title_OnLostFocus(object sender, RoutedEventArgs e)
-    {
-        if (!string.Equals(Title.Text,_requisition?.Title))
-        {
-            if (_requisition != null && _requisitionList?.SelectedRows.Any() == true)
-            {
-                _requisition.Title = Title.Text;
-                new Client<Requisition>().Save(_requisition, "");
-                _requisitionList.Data.LoadRow(_requisitionList.SelectedRows[0], _requisition);
-            }
-        }
-    }
-
-    private void Notes_OnLostFocus(object sender, RoutedEventArgs e)
-    {
-        if (!string.Equals(Notes.Text,_requisition?.Request))
-        {
-            if (_requisition != null && _requisitionList?.SelectedRows.Any() == true)
-            {
-                _requisition.Request = Notes.Text;
-                new Client<Requisition>().Save(_requisition, "");
-                _requisitionList.Data.LoadRow(_requisitionList.SelectedRows[0], _requisition);
-            }
-        }       
+        _request.Text = _requisition?.Request ?? "";
+        _request.IsEnabled = _requisition != null;
     }
+    
 }

+ 7 - 9
prs.desktop/MainWindow.xaml

@@ -993,7 +993,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:ContactDock x:Name="Contacts" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1012,7 +1012,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:JobDock x:Name="Jobs" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1030,7 +1030,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:ConsignmentDock x:Name="Consignments" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1048,7 +1048,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:DeliveryDock x:Name="Deliveries" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1066,7 +1066,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:ProductLookupDock x:Name="ProductLookup" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1084,8 +1084,7 @@
                                 AutoHideWidth="500"
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400">
-                                <Border BorderThickness="0.75" BorderBrush="Gray"
-                                        IsVisibleChanged="DockPanelBorder_IsVisibleChanged">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:DigitalFormsDock x:Name="DigitalForms" />
                                 </Border>
                             </LayoutAnchorable>
@@ -1103,8 +1102,7 @@
                                 FloatingWidth="500"
                                 AutoHideMinWidth="400"
                                 IsActiveChanged="DockPanel_OnIsActiveChanged">
-                                <Border BorderThickness="0.75" BorderBrush="Gray"
-                                        IsVisibleChanged="DockPanelBorder_IsVisibleChanged">
+                                <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0,4,0,0" Padding="4" Background="WhiteSmoke">
                                     <local:RequisitionsDock x:Name="Requisitions" />
                                 </Border>
                             </LayoutAnchorable>

+ 12 - 1
prs.desktop/Panels/Jobs/Summary/JobSummaryPanel.xaml

@@ -25,7 +25,18 @@
             <RowDefinition Height="Auto"/>
             <RowDefinition Height="*"/>
         </Grid.RowDefinitions>
-        <Border Grid.Row="0" CornerRadius="5,5,0,0" BorderBrush="Gray" BorderThickness="0.75" Padding="5,2" Background="WhiteSmoke" >
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+        </Grid.ColumnDefinitions>
+        
+        <Border 
+            Grid.Row="0" 
+            Grid.Column="0"
+            CornerRadius="5,5,0,0"
+            BorderBrush="Gray" 
+            BorderThickness="0.75" 
+            Padding="5,2" 
+            Background="WhiteSmoke" >
             <DockPanel>
                 <CheckBox 
                     x:Name="ReservedStock" 

+ 1 - 1
prs.desktop/prsdesktop.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Desktop"
-#define MyAppVersion "7.78"
+#define MyAppVersion "7.78a"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSDesktop.exe"

+ 1 - 1
prs.licensing/PRSLicensing.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Licensing"
-#define MyAppVersion "7.78"
+#define MyAppVersion "7.78a"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSLicensing.exe"

+ 1 - 1
prs.server/PRSServer.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Server"
-#define MyAppVersion "7.78"
+#define MyAppVersion "7.78a"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSServer.exe"