فهرست منبع

Added Requisitions Dock to Main Window

frogsoftware 1 سال پیش
والد
کامیت
7c85fd47f3

+ 6 - 1
prs.classes/SecurityDescriptors/Common_Descriptors.cs

@@ -51,7 +51,12 @@ namespace Comal.Classes
     public class CanViewDigitalFormsDock : EnabledSecurityDescriptor<DigitalFormsLicense, DigitalForm>
     {
     }
-
+    
+    [Caption("View Requisitions Dock")]
+    public class CanViewRequisitionsDock : EnabledSecurityDescriptor<LogisticsLicense, Requisition>
+    {
+    }
+    
     [Caption("View Data Entry Panel")]
     public class CanViewDataEntryPanel : EnabledSecurityDescriptor<CoreLicense>
     {

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

@@ -0,0 +1,54 @@
+using System;
+using Comal.Classes;
+using InABox.Core;
+using InABox.DynamicGrid;
+
+namespace PRSDesktop;
+
+public class MyRequisitionItems : DynamicDataGrid<RequisitionItem>
+{
+    public Guid RequisitionID { get; set; }
+    
+    public MyRequisitionItems() : base()
+    {
+        ColumnsTag = nameof(MyRequisitionItems);
+    }
+    
+    public override DynamicGridColumns GenerateColumns()
+    {
+        var columns = new DynamicGridColumns();
+        columns.Add<RequisitionItem, Guid>(x => x.Product.ID,80,"Product","",Alignment.MiddleLeft);
+        columns.Add<RequisitionItem, string>(x => x.Description,0,"Items Required","",Alignment.MiddleLeft);
+        columns.Add<RequisitionItem, String>(x => x.Dimensions.UnitSize,80,"Size","",Alignment.MiddleLeft);
+        columns.Add<RequisitionItem, Guid>(x => x.Style.ID,80,"Style","",Alignment.MiddleLeft);
+        columns.Add<RequisitionItem, double>(x => x.Quantity,50,"Qty","F2",Alignment.MiddleCenter);
+        return columns;
+    }
+    
+    protected override void DoReconfigure(FluentList<DynamicGridOption> options)
+    {
+        base.DoReconfigure(options);
+        options.BeginUpdate()
+            .Clear()
+            .Add(DynamicGridOption.AddRows)
+            .Add(DynamicGridOption.EditRows)
+            .Add(DynamicGridOption.DeleteRows)
+            .EndUpdate();
+    }
+
+    
+    protected override void Reload(Filters<RequisitionItem> criteria, Columns<RequisitionItem> columns, ref SortOrder<RequisitionItem>? sort, Action<CoreTable?, Exception?> action)
+    {
+        criteria.Add(
+            new Filter<RequisitionItem>(x => x.RequisitionLink.ID).IsEqualTo(RequisitionID)
+        );
+        base.Reload(criteria, columns, ref sort, action);
+    }
+
+    protected override RequisitionItem CreateItem()
+    {
+        var result = base.CreateItem();
+        result.RequisitionLink.ID = RequisitionID;
+        return result;
+    }
+}

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

@@ -0,0 +1,39 @@
+using System;
+using Comal.Classes;
+using InABox.Core;
+using InABox.DynamicGrid;
+
+namespace PRSDesktop;
+
+public class MyRequisitionsList : DynamicDataGrid<Requisition>
+{
+    public MyRequisitionsList() : base()
+    {
+        ColumnsTag = nameof(MyRequisitionsList);
+    }
+
+    public override DynamicGridColumns GenerateColumns()
+    {
+        var columns = new DynamicGridColumns();
+        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);
+        return columns;
+    }
+    
+    protected override void DoReconfigure(FluentList<DynamicGridOption> options)
+    {
+        base.DoReconfigure(options);
+        options.Clear();
+    }
+
+    protected override void Reload(Filters<Requisition> criteria, Columns<Requisition> columns, ref SortOrder<Requisition>? sort, Action<CoreTable?, Exception?> action)
+    {
+        criteria.Add(
+            new Filter<Requisition>(x => x.RequestedBy.ID).IsEqualTo(App.EmployeeID)
+                .And(x => x.Archived).IsEqualTo(DateTime.MinValue)
+        );
+        
+        base.Reload(criteria, columns, ref sort, action);
+    }
+}

+ 95 - 0
prs.desktop/DockPanels/Requisitions/RequisitionsDock.xaml

@@ -0,0 +1,95 @@
+<UserControl x:Class="PRSDesktop.RequisitionsDock"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+             xmlns:local="clr-namespace:PRSDesktop"
+             mc:Ignorable="d"
+             d:DesignHeight="800" d:DesignWidth="300">
+    <Grid
+        x:Name="_grid">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="150"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="200"/>
+            <RowDefinition Height="*"/>
+        </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"
+            Margin="0,2,0,0"
+            BorderBrush="Gray"
+            BorderThickness="0.75,0.75,0.75,0"
+            Background="WhiteSmoke">
+            <Label
+                Content="Requisition Description"
+                HorizontalContentAlignment="Center"/>
+        </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>

+ 90 - 0
prs.desktop/DockPanels/Requisitions/RequisitionsDock.xaml.cs

@@ -0,0 +1,90 @@
+using System;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using Comal.Classes;
+using InABox.Clients;
+using InABox.DynamicGrid;
+
+namespace PRSDesktop;
+
+public partial class RequisitionsDock : UserControl, IDockPanel
+{
+    public RequisitionsDock()
+    {
+        InitializeComponent();
+    }
+
+    private MyRequisitionsList? _requisitionList;
+    private MyRequisitionItems? _requisitionItems;
+
+    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);
+        _grid.Children.Add(_requisitionItems);
+        _requisitionItems.Refresh(true,false);
+    }
+    
+
+    public void Refresh()
+    {
+        _requisitionList?.Refresh(false,true);
+    }
+
+    private Requisition? _requisition = null;
+
+    private void Requisitions_OnOnSelectItem(object sender, DynamicGridSelectionEventArgs e)
+    {
+        if (_requisitionList == null || _requisitionItems == null)
+            return;
+        
+        _requisition = e.Rows?.FirstOrDefault()?.ToObject<Requisition>();
+        
+        _requisitionItems.RequisitionID = _requisition?.ID ?? Guid.Empty;
+        _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);
+            }
+        }       
+    }
+}

+ 19 - 0
prs.desktop/MainWindow.xaml

@@ -1090,6 +1090,25 @@
                                 </Border>
                             </LayoutAnchorable>
                             
+                            <LayoutAnchorable
+                                x:Name="RequisitionsDock"
+                                Title="Requisitions"
+                                ContentId="requisitions"
+                                CanClose="False"
+                                CanFloat="False"
+                                CanHide="False"
+                                CanAutoHide="True"
+                                CanDockAsTabbedDocument="False"
+                                AutoHideWidth="500"
+                                FloatingWidth="500"
+                                AutoHideMinWidth="400"
+                                IsActiveChanged="DockPanel_OnIsActiveChanged">
+                                <Border BorderThickness="0.75" BorderBrush="Gray"
+                                        IsVisibleChanged="DockPanelBorder_IsVisibleChanged">
+                                    <local:RequisitionsDock x:Name="Requisitions" />
+                                </Border>
+                            </LayoutAnchorable>
+                            
                         </LayoutAnchorGroup>
                     </LayoutAnchorSide>
                 </LayoutRoot.LeftSide>

+ 1 - 0
prs.desktop/MainWindow.xaml.cs

@@ -708,6 +708,7 @@ public partial class MainWindow : IPanelHostControl
         SetupDock<CanViewDeliveryDock>(DeliveryDock, Deliveries);
         SetupDock<CanViewProductDock>(ProductLookupDock, ProductLookup);
         SetupDock<CanViewDigitalFormsDock>(DigitalFormsDock, DigitalForms);
+        SetupDock<CanViewRequisitionsDock>(RequisitionsDock, Requisitions);
 
         _ribbon.InvalidateArrange();
     }

+ 5 - 0
prs.desktop/PRSDesktop.csproj

@@ -1006,6 +1006,11 @@
       <Page Update="Panels\PurchaseOrders\SupplierPurchaseOrderPanel.xaml">
         <Generator>MSBuild:Compile</Generator>
       </Page>
+      <Page Update="DockPanels\Requisitions\RequisitionsDock.xaml">
+        <Generator>MSBuild:Compile</Generator>
+        <XamlRuntime>Wpf</XamlRuntime>
+        <SubType>Designer</SubType>
+      </Page>
     </ItemGroup>
 
     <Import Project="..\PRS.Stores\PRSStores.projitems" Label="Shared" />