aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-06-01 16:51:14 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-06-01 16:51:14 +0300
commiteb526a2dbcf4dd6c1fb946c4157e672d629302fb (patch)
tree93a44df68f641ca5af8f80d862006d0ea9a6893f /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics
parentb85587ebe9096ea4905cc5305cfa5f7ebaa6d039 (diff)
parentda153304bc308e9f6a101384bd55d2e85d172618 (diff)
downloadTango-eb526a2dbcf4dd6c1fb946c4157e672d629302fb.tar.gz
Tango-eb526a2dbcf4dd6c1fb946c4157e672d629302fb.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs75
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml38
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs39
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml2
4 files changed, 88 insertions, 66 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs
index 38c1cc24a..a98257086 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs
@@ -49,30 +49,16 @@ namespace Tango.MachineStudio.Statistics.ViewModels
public DateTime StartDate
{
get { return _startDate; }
- set { _startDate = value; RaisePropertyChangedAuto();}
+ set { _startDate = value; RaisePropertyChangedAuto(); RaisePropertyChanged("EndDate"); }
}
private DateTime _endDate;
public DateTime EndDate
{
get { return _endDate; }
- set { _endDate = value; RaisePropertyChangedAuto();}
+ set { _endDate = value; RaisePropertyChangedAuto(); RaisePropertyChanged("StartDate"); }
}
-
- private DateTime _minDate;
- public DateTime MinDate
- {
- get { return _minDate; }
- set { _minDate = value; RaisePropertyChangedAuto(); }
- }
-
- private DateTime _maxDate;
- public DateTime MaxDate
- {
- get { return _maxDate; }
- set { _maxDate = value; RaisePropertyChangedAuto(); }
- }
-
+
public RelayCommand LoadJobRunsCommand { get; set; }
#endregion
@@ -85,41 +71,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
#region Generate Charts
-
- //public async void Init()
- //{
- //using (_notification.PushTaskItem("Loading statistics..."))
- //{
- // IsFree = false;
-
- // await Task.Factory.StartNew(() =>
- // {
- // _context = ObservablesContext.CreateDefault();
- // //_job_runs = _context.JobRuns.OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList();
- // //foreach (var run in _job_runs)
- // //{
- // // run.LoadMachine(_context).GetAwaiter().GetResult();
- // //}
- // });
-
- // if (_job_runs.Count > 0)
- // {
- // MinDate = _job_runs.Min(x => x.StartDate);
- // MaxDate = _job_runs.Max(x => x.StartDate);
- // }
-
- // InvokeUIOnIdle(() =>
- // {
- // if (_loaded)
- // {
- // OnDateRangeChanged();
- // }
- // });
-
- // _loaded = true;
- // IsFree = true;
- //}
- //}
+
private async Task LoadJobRuns()
{
using (_notification.PushTaskItem("Loading statistics..."))
@@ -127,25 +79,24 @@ namespace Tango.MachineStudio.Statistics.ViewModels
try
{
IsFree = false;
-
+
await Task.Factory.StartNew(() =>
{
using (var db = ObservablesContext.CreateDefault())
{
- _job_runs = db.JobRuns.OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList();
+ DateTime startUtc = new DateTime(StartDate.Year, StartDate.Month, StartDate.Day, 0, 0, 0).ToUniversalTime();
+ TimeSpan offsetTime = (EndDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59);
+ DateTime endUtc = EndDate.ToUniversalTime() + offsetTime;
+
+ _job_runs = db.JobRuns.Where(x => (x.StartDate <= endUtc && x.StartDate >= startUtc)).OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList();
+
foreach (var run in _job_runs)
{
run.LoadMachine(db).GetAwaiter().GetResult();
}
-
}
});
- if (_job_runs.Count > 0)
- {
- MinDate = _job_runs.Min(x => x.StartDate);
- MaxDate = _job_runs.Max(x => x.StartDate);
- }
-
+
InvokeUIOnIdle(() =>
{
if (_loaded)
@@ -400,7 +351,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
#region Filter by Date
public void OnDateRangeChanged()
{
- if (_job_runs != null && _job_runs.Count > 0)// && _loaded)
+ if (_job_runs != null)// && _job_runs.Count > 0)// && _loaded)
{
GenerateTimelineJobStatusChart();
GeneratePieFailedReasonsChart();
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml
index ae4bf1d46..b76154941 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml
@@ -6,6 +6,7 @@
xmlns:vm="clr-namespace:Tango.MachineStudio.Statistics.ViewModels"
xmlns:global="clr-namespace:Tango.MachineStudio.Statistics"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:localrule="clr-namespace:Tango.MachineStudio.Statistics.ValidationRules"
xmlns:local="clr-namespace:Tango.MachineStudio.Statistics.Views"
xmlns:tooltips="clr-namespace:Tango.MachineStudio.Statistics.Tooltips"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
@@ -21,14 +22,45 @@
<StackPanel Margin="60 20 0 0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal" DockPanel.Dock="Left">
<StackPanel>
<TextBlock FontSize="10">Start Date:</TextBlock>
- <DatePicker DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" SelectedDate="{Binding StartDate}" materialDesign:HintAssist.Hint="Pick start date" Width="200" VerticalAlignment="Bottom" FontSize="16"></DatePicker>
+ <DatePicker x:Name="startdatePicker" SelectedDateChanged="StartDatePicker_SelectedDateChanged" materialDesign:HintAssist.Hint="Pick start date" Width="200" VerticalAlignment="Bottom" FontSize="16">
+ <DatePicker.SelectedDate>
+ <Binding Path="StartDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
+ <Binding.ValidationRules>
+ <localrule:DateExpiredRule x:Name="StartDateExpiredRule"/>
+ </Binding.ValidationRules>
+ </Binding>
+ </DatePicker.SelectedDate>
+ </DatePicker>
</StackPanel>
<StackPanel Margin="40 0 0 0">
<TextBlock FontSize="10">End Date:</TextBlock>
- <DatePicker DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" SelectedDate="{Binding EndDate}" materialDesign:HintAssist.Hint="Pick end date" Width="200" VerticalAlignment="Bottom" FontSize="16"></DatePicker>
+ <DatePicker x:Name="endDatePicker" materialDesign:HintAssist.Hint="Pick end date" Width="200" VerticalAlignment="Bottom" FontSize="16" SelectedDateChanged="EndDatePicker_SelectedDateChanged">
+ <DatePicker.SelectedDate>
+ <Binding Path="EndDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
+ <Binding.ValidationRules>
+ <localrule:DateExpiredRule x:Name="EndDateExpiredRule"/>
+ </Binding.ValidationRules>
+ </Binding>
+ </DatePicker.SelectedDate>
+ </DatePicker>
</StackPanel>
- <Button Width="100" Margin="60 0 0 0" Command="{Binding LoadJobRunsCommand}" VerticalAlignment="Bottom" HorizontalAlignment="Right">LOAD</Button>
+ <Button Width="100" Margin="60 0 0 0" Command="{Binding LoadJobRunsCommand}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Content="LOAD">
+ <Button.Style>
+ <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
+ <Setter Property="IsEnabled" Value="False"/>
+ <Style.Triggers>
+ <MultiDataTrigger>
+ <MultiDataTrigger.Conditions>
+ <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference startdatePicker}}" Value="False"/>
+ <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference endDatePicker}}" Value="False"/>
+ </MultiDataTrigger.Conditions>
+ <Setter Property="IsEnabled" Value="True"/>
+ </MultiDataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Button.Style>
+ </Button>
</StackPanel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs
index d79d88281..bd97ed2bc 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs
@@ -31,5 +31,44 @@ namespace Tango.MachineStudio.Statistics.Views
var tooltip = ((chartPoint.ChartView as PieChart).DataTooltip as Tooltips.PieChartTooltipControl).Title;
txtPieTitle.Text = tooltip;
}
+ private void StartDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
+ {
+ DatePicker datePickerObj = sender as DatePicker;
+ if (datePickerObj != null && datePickerObj.SelectedDate != null && endDatePicker.SelectedDate != null)
+ {
+ if (datePickerObj.SelectedDate > endDatePicker.SelectedDate)
+ {
+ BindingExpression start_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty);
+ ValidationError validationError = new ValidationError(StartDateExpiredRule, start_be);
+ validationError.ErrorContent = "The start time must be less than or equal to end time.";
+ Validation.MarkInvalid(start_be, validationError);
+ }
+ else if (Validation.GetHasError(endDatePicker))
+ {
+ BindingExpression end_be = endDatePicker.GetBindingExpression(DatePicker.SelectedDateProperty);
+ Validation.ClearInvalid(end_be);
+ }
+ }
+ }
+
+ private void EndDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
+ {
+ DatePicker datePickerObj = sender as DatePicker;
+ if (datePickerObj.SelectedDate != null && startdatePicker.SelectedDate != null)
+ {
+ if (datePickerObj != null && datePickerObj.SelectedDate < startdatePicker.SelectedDate)
+ {
+ BindingExpression end_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty);
+ ValidationError validationError = new ValidationError(EndDateExpiredRule, end_be);
+ validationError.ErrorContent = "The end time must be greater than or equal to the start time.";
+ Validation.MarkInvalid(end_be, validationError);
+ }
+ else if (Validation.GetHasError(startdatePicker))
+ {
+ BindingExpression start_be = startdatePicker.GetBindingExpression(DatePicker.SelectedDateProperty);
+ Validation.ClearInvalid(start_be);
+ }
+ }
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
index 9617361f7..4ce6030d9 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
@@ -346,7 +346,7 @@
</Grid>
<Button Grid.Column="1" HorizontalAlignment="Right" Command="{Binding LoadJobRunsCommand}" Margin="0 0 10 0" Padding="70 15" Height="Auto" VerticalAlignment="Center" Content="ANALYZE">
<Button.Style>
- <Style TargetType="Button">
+ <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>