Forráskód Böngészése

Fixed Calendar Date Navigation
Added ability to hide unused Quote Pages

frogsoftware 1 éve
szülő
commit
b1eafe5425

+ 5 - 0
prs.classes/SecurityDescriptors/Quote_Descriptors.cs

@@ -6,4 +6,9 @@ namespace Comal.Classes
     public class CanModifyQuoteStatuses : EnabledSecurityDescriptor<QuotesManagementLicense, Quote>
     {
     }
+    
+    [Caption("Can View Quote Diagrams")]
+    public class CanViewQuoteDiagrams : EnabledSecurityDescriptor<QuotesManagementLicense, Quote>
+    {
+    }
 }

+ 1 - 0
prs.desktop/Components/Calendar/Calendar.xaml

@@ -41,6 +41,7 @@
                 AppointmentEditorOpening="Schedule_AppointmentEditorOpening"
                 SchedulerContextMenuOpening="Bookings_OnSchedulerContextMenuOpening"
                 AppointmentTapped="Bookings_OnAppointmentTapped"
+                QueryAppointments="Bookings_OnQueryAppointments"
                 ViewType="Day"
                 BorderThickness="1"
                 BorderBrush="Silver"

+ 20 - 4
prs.desktop/Components/Calendar/Calendar.xaml.cs

@@ -770,7 +770,14 @@ namespace PRSDesktop
         {
         }
         
+        private bool bFirst = true;
+        
         public virtual void Refresh()
+        {
+            RefreshData(StartDate, EndDate);
+        }
+
+        private void RefreshData(DateTime startDate, DateTime endDate)
         {
             if (EventSuppressor.IsSet(Suppress.Refresh))
                 return;
@@ -788,8 +795,8 @@ namespace PRSDesktop
                 {
                     query.Add<TimeSheet>(
                         new Filter<TimeSheet>(x => x.EmployeeLink.ID).InList(empids)
-                            .And(x => x.Date).IsGreaterThanOrEqualTo(StartDate)
-                            .And(x => x.Date).IsLessThanOrEqualTo(EndDate)
+                            .And(x => x.Date).IsGreaterThanOrEqualTo(startDate)
+                            .And(x => x.Date).IsLessThanOrEqualTo(endDate)
                             .And(x=>x.LeaveRequestLink.ID).IsEqualTo(Guid.Empty)
                             .And(x=>x.StandardLeaveLink.ID).IsEqualTo(Guid.Empty),
                         TimeSheetModel.Columns
@@ -798,8 +805,8 @@ namespace PRSDesktop
                 
                 query.Add<Assignment>(
                     new Filter<Assignment>(x => x.EmployeeLink.ID).InList(empids)
-                        .And(x => x.Date).IsGreaterThanOrEqualTo(StartDate)
-                        .And(x => x.Date).IsLessThanOrEqualTo(EndDate),
+                        .And(x => x.Date).IsGreaterThanOrEqualTo(startDate)
+                        .And(x => x.Date).IsLessThanOrEqualTo(endDate),
                     AssignmentModel.Columns,
                     new SortOrder<Assignment>(x => x.EmployeeLink.ID).ThenBy(x => x.Date).ThenBy(x => x.Booked.Duration, SortDirection.Descending)
                 );
@@ -828,6 +835,8 @@ namespace PRSDesktop
                 {
                     Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
                 }
+
+                bFirst = false;
             }
         }
 
@@ -1626,5 +1635,12 @@ namespace PRSDesktop
             else if (e.View == DynamicSplitPanelView.Master && SettingsVisible == CalendarSettingsVisibility.Visible)
                 SetSettingsVisibility(CalendarSettingsVisibility.Hidden);
         }
+        
+        private void Bookings_OnQueryAppointments(object? sender, QueryAppointmentsEventArgs e)
+        {
+            if (bFirst)
+                return;
+            SelectedDate = e.VisibleDateRange.StartDate.Date;
+        }
     }
 }

+ 9 - 9
prs.desktop/Panels/Quotes/QuotePanel.xaml

@@ -30,15 +30,15 @@
                 SelectionChanged="QuotePages_SelectionChanged" 
                 >
                 
-                <dynamicgrid:DynamicTabItem Header="Details" Name="Details" />
-                <dynamicgrid:DynamicTabItem Header="Documents" Name="Documents" />
-                <dynamicgrid:DynamicTabItem Header="Spreadsheets" Name="Spreadsheets" />
-                <dynamicgrid:DynamicTabItem Header="Diagrams" Name="Diagrams" />
-                <dynamicgrid:DynamicTabItem Header="Takeoffs" Name="Takeoffs" />
-                <dynamicgrid:DynamicTabItem Header="Designs" Name="Designs" />
-                <dynamicgrid:DynamicTabItem Header="Cost Sheets" Name="CostSheets" />
-                <dynamicgrid:DynamicTabItem Header="Proposals" Name="Proposals" />
-                <dynamicgrid:DynamicTabItem Header="Contract" Name="Contract" />
+                <dynamicgrid:DynamicTabItem Header="Details" x:Name="Details" />
+                <dynamicgrid:DynamicTabItem Header="Documents" x:Name="Documents" />
+                <dynamicgrid:DynamicTabItem Header="Spreadsheets" x:Name="Spreadsheets" />
+                <dynamicgrid:DynamicTabItem Header="Diagrams" x:Name="Diagrams" Visibility="Collapsed" />
+                <dynamicgrid:DynamicTabItem Header="Takeoffs" x:Name="Takeoffs" Visibility="Collapsed" />
+                <dynamicgrid:DynamicTabItem Header="Designs" x:Name="Designs" Visibility="Collapsed" />
+                <dynamicgrid:DynamicTabItem Header="Cost Sheets" x:Name="CostSheets" />
+                <dynamicgrid:DynamicTabItem Header="Proposals" x:Name="Proposals" />
+                <dynamicgrid:DynamicTabItem Header="Contract" x:Name="Contract" />
 
             </dynamicgrid:DynamicTabControl>
         </dynamicgrid:DynamicSplitPanel.Detail>

+ 24 - 20
prs.desktop/Panels/Quotes/QuotePanel.xaml.cs

@@ -56,7 +56,7 @@ namespace PRSDesktop
         public QuotePanel()
         {
             InitializeComponent();
-            Quotes.OnDoubleClick += OpenQuote;
+            //Quotes.OnDoubleClick += OpenQuote;
         }
 
         public bool IsReady { get; set; }
@@ -84,18 +84,22 @@ namespace PRSDesktop
 
         public void Setup()
         {
-            QuoteDiagramSymbolCache.Refresh();
+
             settings = new UserConfiguration<QuoteScreenSettings>().Load();
             SplitPanel.View = settings.ViewType == ScreenViewType.Register
                 ? DynamicSplitPanelView.Master
                 : settings.ViewType == ScreenViewType.Details
                     ? DynamicSplitPanelView.Detail
                     : DynamicSplitPanelView.Combined;
-
             SplitPanel.AnchorWidth = settings.AnchorWidth;
 
-            Diagrams.Visibility = ClientFactory.IsSupported<QuoteDiagram>() ? Visibility.Visible : Visibility.Collapsed;
-
+            if (Security.CanView<QuoteDiagramSymbol>() || Security.CanView<QuoteDiagramConnector>())
+                QuoteDiagramSymbolCache.Refresh();
+            Diagrams.Visibility = Security.CanView<QuoteDiagram>() ? Visibility.Visible : Visibility.Collapsed;
+            Takeoffs.Visibility = Security.CanView<QuoteTakeoff>() ? Visibility.Visible : Visibility.Collapsed;
+            Designs.Visibility = Security.CanView<QuoteDesign>() ? Visibility.Visible : Visibility.Collapsed;
+            Spreadsheets.Visibility = Security.CanView<QuoteSpreadsheet>() ? Visibility.Visible : Visibility.Collapsed;
+        
             var sc = new Dictionary<Guid, string> { { Guid.Empty, "All Quotes" } };
             var statuses = new Client<QuoteStatus>().Query();
             foreach (var row in statuses.Rows)
@@ -153,21 +157,21 @@ namespace PRSDesktop
         {
         }
 
-        private void OpenQuote(object sender, HandledEventArgs args)
-        {
-            if (SplitPanel.View != DynamicSplitPanelView.Detail)
-            {
-                SplitPanel.View = DynamicSplitPanelView.Detail;
-                settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master
-                    ? ScreenViewType.Register
-                    : SplitPanel.View == DynamicSplitPanelView.Combined
-                        ? ScreenViewType.Combined
-                        : ScreenViewType.Details;
-                new UserConfiguration<QuoteScreenSettings>().Save(settings);
-            }
-
-            args.Handled = true;
-        }
+        // private void OpenQuote(object sender, HandledEventArgs args)
+        // {
+        //     if (SplitPanel.View != DynamicSplitPanelView.Detail)
+        //     {
+        //         SplitPanel.View = DynamicSplitPanelView.Detail;
+        //         settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master
+        //             ? ScreenViewType.Register
+        //             : SplitPanel.View == DynamicSplitPanelView.Combined
+        //                 ? ScreenViewType.Combined
+        //                 : ScreenViewType.Details;
+        //         new UserConfiguration<QuoteScreenSettings>().Save(settings);
+        //     }
+        //
+        //     args.Handled = true;
+        // }
 
 
         private void Timer_Tick(object sender, EventArgs e)

+ 31 - 1
prs.desktop/Panels/Quotes/Quotes.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using Comal.Classes;
 using InABox.Core;
 using InABox.DynamicGrid;
@@ -9,7 +10,7 @@ namespace PRSDesktop
     public class Quotes : DynamicDataGrid<Quote>
     {
         private Guid _statusid = Guid.Empty;
-
+        
         public Quotes()
         {
             HiddenColumns.Add(x => x.ID);
@@ -29,6 +30,35 @@ namespace PRSDesktop
             HiddenColumns.Add(x =>x.Status.ID);
             HiddenColumns.Add(x =>x.ExTax);
         }
+
+        public override DynamicEditorPages LoadEditorPages(Quote item)
+        {
+            
+            var result = base.LoadEditorPages(item);
+            
+            void RemovePage<T>() where T : Entity, new()
+            {
+                var page = result.FirstOrDefault(x =>
+                    x is IDynamicGrid
+                    && x.GetType().GetGenericArguments().Length == 2
+                    && x.GetType().GetGenericArguments().Last() == typeof(T));
+                if (page != null)
+                    result.Remove(page);
+            }
+        
+            RemovePage<QuoteDiagram>();
+            RemovePage<QuoteTakeoff>();
+            RemovePage<QuoteDesign>();
+            RemovePage<QuoteSpreadsheet>();
+            RemovePage<QuoteContract>();
+            RemovePage<QuoteProposal>();
+
+            result.RemoveAll(x => x is QuoteDocumentGrid);
+
+            
+            return result;
+        }
+
         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
         {
             base.DoReconfigure(options);

+ 1 - 1
prs.desktop/prsdesktop.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Desktop"
-#define MyAppVersion "7.60a"
+#define MyAppVersion "7.61a"
 #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.60a"
+#define MyAppVersion "7.61a"
 #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.60a"
+#define MyAppVersion "7.61a"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSServer.exe"