浏览代码

Fixed Refresh Issues in Quote Proposal Screen
Added ability to add new customers direct from quote screen

frogsoftware 1 年之前
父节点
当前提交
deaf9b1d1f

+ 10 - 2
prs.desktop/Panels/Quotes/QuoteProposalCostSheetGrid.cs

@@ -8,7 +8,7 @@ namespace PRSDesktop
     public class QuoteProposalCostSheetGrid : DynamicDataGrid<QuoteProposalCostSheet>
     {
         
-        public QuoteProposal Proposal { get; set; }
+        public QuoteProposal? Proposal { get; set; }
         
         public QuoteProposalCostSheetGrid()
         {
@@ -24,10 +24,18 @@ namespace PRSDesktop
         protected override void Reload(Filters<QuoteProposalCostSheet> criteria, Columns<QuoteProposalCostSheet> columns,
             ref SortOrder<QuoteProposalCostSheet>? sort, Action<CoreTable?, Exception?> action)
         {
-            criteria.Add(new Filter<QuoteProposalCostSheet>(x => x.Proposal.ID).IsEqualTo(Proposal.ID));
+            if (Proposal != null)
+                criteria.Add(new Filter<QuoteProposalCostSheet>(x => x.Proposal.ID).IsEqualTo(Proposal.ID));
+            else
+                criteria.Add(new Filter<QuoteProposalCostSheet>().None());
             base.Reload(criteria, columns, ref sort, action);
         }
 
+        protected override bool CanCreateItems()
+        {
+            return Proposal != null;
+        }
+
         protected override QuoteProposalCostSheet CreateItem()
         {
             var result = base.CreateItem();

+ 20 - 10
prs.desktop/Panels/Quotes/QuoteProposalDetails.xaml

@@ -25,20 +25,30 @@
         </Border>
 
         <local:QuoteProposalCostSheetGrid Grid.Row="1" Grid.Column="0" Margin="0,2,0,0" x:Name="CostSheets"
-                                          MinHeight="150" />
+                                          MinHeight="200" />
 
-        <DockPanel Grid.Row="2" Grid.Column="0">
-            <dynamicgrid:DoubleEditorControl x:Name="IncTax" DockPanel.Dock="Right" Width="100" Margin="2,2,0,0" />
-            <Label Content="Inc Tax $" DockPanel.Dock="Right" Margin="2,2,0,0" />
+        <Grid Grid.Row="2" Grid.Column="0">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*" />
+                <ColumnDefinition Width="Auto" />
+                <ColumnDefinition Width="100" />
+                <ColumnDefinition Width="Auto" />
+                <ColumnDefinition Width="100" />
+                <ColumnDefinition Width="Auto" />
+                <ColumnDefinition Width="100" />
+            </Grid.ColumnDefinitions>
+            <Label Content="Manual Proposal Total (If Required)" Grid.Column="0" Margin="5,2,0,0" />         
+            
+            <Label Content="Ex Tax $" Grid.Column="1" Margin="2,2,0,0" />
+            <dynamicgrid:DoubleEditorControl x:Name="ExTax" Grid.Column="2" Margin="2,2,0,0" />
 
-            <dynamicgrid:LookupEditorControl x:Name="TaxCode" DockPanel.Dock="Right" Width="100" />
-            <Label Content="Tax Code" DockPanel.Dock="Right" Margin="2,2,0,0" />
+            <Label Content="Tax Code" Grid.Column="3" Margin="2,2,0,0" />
+            <dynamicgrid:LookupEditorControl x:Name="TaxCode" Grid.Column="4" />
 
-            <dynamicgrid:DoubleEditorControl x:Name="ExTax" DockPanel.Dock="Right" Width="100" Margin="2,2,0,0" />
-            <Label Content="Ex Tax $" DockPanel.Dock="Right" Margin="2,2,0,0" />
+            <Label Content="Inc Tax $" Grid.Column="5" Margin="2,2,0,0" />
+            <dynamicgrid:DoubleEditorControl x:Name="IncTax" Grid.Column="6" Margin="2,2,0,0" />
 
-            <Label Content="Manual Proposal Total (If Required)" DockPanel.Dock="Left" Margin="5,2,0,0" />
-        </DockPanel>
+        </Grid>
 
         <Border Grid.Row="3" Grid.Column="0" Margin="0,2,0,0" BorderBrush="Gray" BorderThickness="0.75"
                 Background="WhiteSmoke" CornerRadius="0">

+ 12 - 5
prs.desktop/Panels/Quotes/QuoteProposalDetails.xaml.cs

@@ -17,8 +17,8 @@ namespace PRSDesktop
     {
         public QuoteProposalDetails()
         {
-            Proposal = new QuoteProposal();
             InitializeComponent();
+
             Preamble.EditorDefinition = new RichTextEditor();
             Preamble.ColumnName = "Preamble";
             Preamble.Configure();
@@ -47,12 +47,19 @@ namespace PRSDesktop
             IncTax.Configure();
             IncTax.OnEditorValueChanged += IncTax_OnEditorValueChanged;
             IncTax.Loaded = true;
+
+            Proposal = null;
+
         }
 
-        public QuoteProposal Proposal
+        public QuoteProposal? Proposal
         {
             get => CostSheets.Proposal;
-            set => CostSheets.Proposal = value;
+            set
+            {
+                CostSheets.Proposal = value; 
+                Refresh(false,true);
+            }
         }
         
         public void Refresh(bool columns, bool data)
@@ -73,7 +80,7 @@ namespace PRSDesktop
 
         private void Preamble_OnEditorValueChanged(IDynamicEditorControl sender, Dictionary<string, object> values)
         {
-            if (Proposal != null && Proposal.Preamble != Preamble.Value)
+            if (Proposal != null && !String.Equals(Proposal.Preamble,Preamble.Value))
             {
                 Proposal.Preamble = Preamble.Value;
                 new Client<QuoteProposal>().Save(Proposal, "", (p, e) => { });
@@ -90,7 +97,7 @@ namespace PRSDesktop
 
         private void Summary_OnEditorValueChanged(IDynamicEditorControl sender, Dictionary<string, object> values)
         {
-            if (Proposal != null && Proposal.Summary != Summary.Value)
+            if (Proposal != null && !String.Equals(Proposal.Summary,Summary.Value))
             {
                 Proposal.Summary = Summary.Value;
                 new Client<QuoteProposal>().Save(Proposal, "", (p, e) => { });

+ 5 - 1
prs.desktop/Panels/Quotes/QuoteProposals.xaml.cs

@@ -64,7 +64,11 @@ namespace PRSDesktop
         public Quote Quote
         {
             get => Proposals.Quote;
-            set => Proposals.Quote = value;
+            set
+            {
+                Details.Proposal = null;
+                Proposals.Quote = value;
+            }
         }
 
         private void Proposals_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)

+ 11 - 0
prs.desktop/Panels/Quotes/Quotes.cs

@@ -65,6 +65,17 @@ namespace PRSDesktop
             options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns, DynamicGridOption.AddRows, DynamicGridOption.EditRows,
                 DynamicGridOption.FilterRows);
         }
+        
+        
+        protected override void CustomiseEditor(Quote[] items, DynamicGridColumn column, BaseEditor editor)
+        {
+            base.CustomiseEditor(items, column, editor);
+
+            if(new Column<Quote>(x => x.Customer.ID).IsEqualTo(column.ColumnName) && editor is CodePopupEditor popup)
+            {
+                popup.CanAdd = Security.CanEdit<Customer>();
+            }
+        }
 
         public Guid StatusID
         {