aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-18 11:19:40 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-18 11:19:40 +0200
commit23e661dfbb74dc67ea097ae331cadd2446997b31 (patch)
treecaee4e02d4c01fc3072e9d5030c2c5743cf86dbf /Software/Visual_Studio/MachineStudio/Modules
parent8d6007cb5c17c76179f9e83adadc729bf77f952e (diff)
downloadTango-23e661dfbb74dc67ea097ae331cadd2446997b31.tar.gz
Tango-23e661dfbb74dc67ea097ae331cadd2446997b31.zip
Machine Studio. Changes in Statistics Job Runs and Action log. Improving data creation performance.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs123
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs15
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs19
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs15
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs138
8 files changed, 276 insertions, 47 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj
index 280356aa8..de4783237 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj
@@ -156,5 +156,8 @@
<ItemGroup>
<Resource Include="Images\action_logs.jpg" />
</ItemGroup>
+ <ItemGroup>
+ <Folder Include="Models\" />
+ </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs
index df2643d88..c1bf63ce4 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs
@@ -24,6 +24,7 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
public class MainViewVM : StudioViewModel
{
private INotificationProvider _notification;
+ private List<User> _allUsers;
#region Properties
@@ -86,6 +87,17 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
set { _differenceObject = value; RaisePropertyChangedAuto(); }
}
+ private bool _isLoading;
+
+ public bool IsLoading
+ {
+ get { return _isLoading; }
+ set { _isLoading = value; RaisePropertyChangedAuto(); }
+ }
+
+
+
+
#endregion
public RelayCommand SearchCommand { get; set; }
@@ -96,6 +108,7 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
{
_notification = notification;
+ IsLoading = false;
ActionLogs = new ObservableCollection<ActionLog>();
SearchCommand = new RelayCommand(GetActionLogs, () => IsFree);
CopyRelateObjectIDCommand = new RelayCommand(CopyRelateObjectID);
@@ -111,7 +124,28 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
public override void OnApplicationReady()
{
+ InitUsers();
+ }
+ public async void InitUsers()
+ {
+ try
+ {
+ IsFree = false;
+
+ using (var db = ObservablesContext.CreateDefault())
+ {
+ _allUsers = await db.Users.Include(x => x.Contact).ToListAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error loading users.");
+ }
+ finally
+ {
+ IsFree = true;
+ }
}
private void CopyToClipBoard()
@@ -129,8 +163,9 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
/// <summary>
/// New Database Query with search parameters. Initialization ActionLogs property.
/// </summary>
- private async void GetActionLogs()
+ private void GetActionLogs()
{
+ IsLoading = true;
string filter = SearchFilter?.ToLower();
if (String.IsNullOrWhiteSpace(filter)) filter = null;
@@ -147,17 +182,48 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
DateTime endUtc = new DateTime(EndSelectedDate.Date.Ticks + offsetTime.Ticks, DateTimeKind.Utc);
Debug.Write($"TEST TIME {startUtc} from {endUtc} " + System.Environment.NewLine);
+
+ var db_ActionLogs = db.ActionLogs.Where(x => x.LastUpdated <= DbFunctions.TruncateTime(endUtc) && x.LastUpdated >= DbFunctions.TruncateTime(startUtc))
+ .Select(x => new
+ {
+ x.ID,x.Guid,x.UserGuid, x.LastUpdated,x.Type,x.RelatedObjectName, x.RelatedObjectGuid,x.Message
+ });
+ int[] actionTypes = SelectedActionLogTypes.SynchedSource.ToArray().Select(x => (int)x).ToArray();
+ if(actionTypes.Length > 0)
+ {
+ db_ActionLogs = db_ActionLogs.Where(x => actionTypes.Contains(x.Type));
+ }
- ActionLogs = await new ActionLogsCollectionBuilder(db).Set(x => x.LastUpdated <= DbFunctions.TruncateTime(endUtc) && x.LastUpdated >= DbFunctions.TruncateTime(startUtc))
- .WithUsers()
- .WithActionType(SelectedActionLogTypes.SynchedSource.ToArray())
- .Query(y => y.Where
- (x => filter == null ||
- (x.ID.ToString().ToLower().StartsWith(filter)
- || (x.RelatedObjectName != null && x.RelatedObjectName.ToLower().StartsWith(filter))
+ var runs = db_ActionLogs.ToList()
+ .Select(x => new ActionLog()
+ {
+ ID = x.ID,Guid = x.Guid,
+ UserGuid = x.UserGuid,
+ LastUpdated = x.LastUpdated,
+ Type = x.Type,
+ RelatedObjectName = x.RelatedObjectName,
+ RelatedObjectGuid = x.RelatedObjectGuid,
+ Message = x.Message,
+ User = _allUsers.SingleOrDefault(y => y.Guid == x.UserGuid)
+ });
+ if (!String.IsNullOrEmpty(filter))
+ {
+ runs = runs.Where(x => x.ID.ToString().ToLower().StartsWith(filter) || (x.RelatedObjectName != null && x.RelatedObjectName.ToLower().StartsWith(filter))
|| (x.RelatedObjectGuid != null && x.RelatedObjectGuid.ToLower().StartsWith(filter))
- || (x.User != null && x.User.Contact != null && x.User.Contact.FullName.ToLower().StartsWith(filter)))))
- .BuildAsync();
+ || (x.User != null && x.User.Contact != null && x.User.Contact.FullName.ToLower().StartsWith(filter)));
+ }
+ ActionLogs = runs.ToObservableCollection();
+
+ //ActionLogs = await new ActionLogsCollectionBuilder(db).Set(x => x.LastUpdated <= DbFunctions.TruncateTime(endUtc) && x.LastUpdated >= DbFunctions.TruncateTime(startUtc))
+ // .WithUsers()
+ // .WithActionType(SelectedActionLogTypes.SynchedSource.ToArray())
+ // .Query(y => y.Where
+ // (x => filter == null ||
+ // (x.ID.ToString().ToLower().StartsWith(filter)
+ // || (x.RelatedObjectName != null && x.RelatedObjectName.ToLower().StartsWith(filter))
+ // || (x.RelatedObjectGuid != null && x.RelatedObjectGuid.ToLower().StartsWith(filter))
+ // || (x.User != null && x.User.Contact != null && x.User.Contact.FullName.ToLower().StartsWith(filter)))))
+ // .BuildAsync();
}
}
catch (Exception ex)
@@ -169,14 +235,49 @@ namespace Tango.MachineStudio.ActionLogs.ViewModels
finally
{
IsFree = true;
+ IsLoading = false;
}
}
+ /// <summary>
+ /// Update DifferenceObject on Selected item changed
+ /// </summary>
private void SelectedItemChanged()
{
- if (SelectedActionLog == null || SelectedActionLog.DifferenceObject == null)
+ if (SelectedActionLog == null)
return;
+ if(SelectedActionLog.Difference==null)
+ {
+ InitSelectedActionLogDifference();
+ }
DifferenceObject = SelectedActionLog.DifferenceObject;
}
+
+ /// <summary>
+ /// Initializes the selected action log difference.
+ /// </summary>
+ public void InitSelectedActionLogDifference()
+ {
+ IsLoading = true;
+ try
+ {
+ using (var db = ObservablesContext.CreateDefault())
+ {
+ var difference = db.ActionLogs.SingleOrDefault(x => x.Guid.Equals(SelectedActionLog.Guid));
+ if (difference != null)
+ {
+ SelectedActionLog.DifferenceObject = difference.DifferenceObject;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error loading difference of the selected action log.");
+ }
+ finally
+ {
+ IsLoading = false;
+ }
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml
index fd640bae5..05aad0574 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml
@@ -149,13 +149,13 @@
<DataGridTextColumn Header="ACTION" Binding="{Binding ActionType, Converter={StaticResource EnumToDescriptionConverter}}" Width="Auto"/>
<DataGridTextColumn Header="USER" Binding="{Binding User.Contact.FullName}" Width="Auto"/>
<DataGridTextColumn Header="RELATED OBJECT NAME" Binding="{Binding RelatedObjectName}" Width="Auto" />
- <DataGridTextColumn Header="RELATED OBJECT ID" Binding="{Binding RelatedObjectGuid}" Width="Auto" >
+ <DataGridTextColumn Header="RELATED OBJECT ID" Binding="{Binding RelatedObjectGuid}" Width="Auto" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}" >
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="VerticalContentAlignment" Value="Center"></Setter>
- <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext}"/>
+ <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext}"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Padding="0" Margin="0" >
@@ -207,9 +207,9 @@
</DataGrid.Columns>
</DataGrid>
</Grid>
- <Grid Grid.Row="1" Grid.Column="0" Visibility="{Binding IsBusy,Converter={StaticResource BooleanToVisibilityConverter}}">
+ <Grid Grid.Row="1" Grid.Column="0" Visibility="{Binding IsLoading,Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
- <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80" IsActive="{Binding IsRunning}"></mahapps:ProgressRing>
+ <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80" IsActive="{Binding IsLoading}"></mahapps:ProgressRing>
<TextBlock Text="Loading..." HorizontalAlignment="Center" FontSize="20" FontStyle="Italic" VerticalAlignment="Center" Margin="0 20 0 0"></TextBlock>
</StackPanel>
</Grid>
@@ -314,6 +314,7 @@
</DockPanel>
</Border>
+ <mahapps:ProgressRing Grid.Row="1" Grid.Column="1" Margin="20 0 20 40" Width="80" Height="80" IsActive="{Binding IsLoading}"></mahapps:ProgressRing>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
index 23d7564e8..32050cdb1 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
@@ -12,13 +12,14 @@ namespace Tango.MachineStudio.Statistics.Converters
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- try
- {
- double val =(double) ((int)value) / 1000000000;
- return val.ToString("N2", CultureInfo.InvariantCulture);
- }
- catch{ }
-
+ try
+ {
+ var longValue = System.Convert.ToUInt64(value.ToString());
+ double val = (longValue / 1000000000d);
+ return val.ToString("0.0");
+ }
+ catch { }
+
return "";
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
index ef5527406..acbbde3f2 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
@@ -96,18 +96,18 @@ namespace Tango.MachineStudio.Statistics.Models
set { _pieGradientSolid = value; RaisePropertyChangedAuto(); }
}
- private List<JobRunLiquidQuantity> _liquidQuantities;
+ private List<TotalLiquidQuantityModel> _liquidQuantities;
/// <summary>
/// Gets or sets the liquid quantities.
/// </summary>
- public List<JobRunLiquidQuantity> LiquidQuantities
+ public List<TotalLiquidQuantityModel> LiquidQuantities
{
get
{
if (_liquidQuantities == null)
{
- _liquidQuantities = new List<JobRunLiquidQuantity>();
+ _liquidQuantities = new List<TotalLiquidQuantityModel>();
}
return _liquidQuantities;
}
@@ -115,12 +115,12 @@ namespace Tango.MachineStudio.Statistics.Models
{ _liquidQuantities = value; RaisePropertyChangedAuto(); }
}
- private int _totalLiquidQuantities;
+ private ulong _totalLiquidQuantities;
/// <summary>
/// Gets or sets the total liquid quantities.
/// </summary>
- public int TotalLiquidQuantities
+ public ulong TotalLiquidQuantities
{
get { return _totalLiquidQuantities; }
set { _totalLiquidQuantities = value; RaisePropertyChangedAuto(); }
@@ -302,10 +302,15 @@ namespace Tango.MachineStudio.Statistics.Models
/// <summary>
/// Generates the statistics liquid quantity and TotalLiquidQuantities.
/// </summary>
- public void GenerateStatisticsLiquidQuantity(List<JobRunLiquidQuantity> liquidQuantities)
+ public void GenerateStatisticsLiquidQuantity(List<TotalLiquidQuantityModel> liquidQuantities)
{
LiquidQuantities = liquidQuantities;
- TotalLiquidQuantities = liquidQuantities.Sum(x => x.Quantity);
+ TotalLiquidQuantities = 0;
+
+ foreach (var item in liquidQuantities)
+ {
+ TotalLiquidQuantities += (ulong)item.Quantity;
+ }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs
new file mode 100644
index 000000000..b5e2e9fb7
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Enumerations;
+
+namespace Tango.MachineStudio.Statistics.Models
+{
+ public class TotalLiquidQuantityModel
+ {
+ public LiquidTypes LiquidType { get; set; }
+ public ulong Quantity { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
index adac4bb9f..f77dbd482 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
@@ -84,6 +84,7 @@
<Compile Include="Converters\NanoLiterToLiterFormatConverter.cs" />
<Compile Include="Converters\StringToBoolYesNoNullConverter.cs" />
<Compile Include="Converters\StringToFirstLetterConverter.cs" />
+ <Compile Include="Models\TotalLiquidQuantityModel.cs" />
<Compile Include="Models\JobRunModel.cs" />
<Compile Include="Models\JobRunStatisticsModel.cs" />
<Compile Include="Models\LabeledSeriesCollection.cs" />
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
index 94d06a178..b0c4975ee 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
@@ -20,6 +20,7 @@ using System.Windows.Media;
using LiveCharts.Wpf;
using LiveCharts;
using Tango.BL.ValueObjects;
+using System.Diagnostics;
namespace Tango.MachineStudio.Statistics.ViewModels
{
@@ -322,16 +323,86 @@ namespace Tango.MachineStudio.Statistics.ViewModels
TimeSpan offsetTime = (EndSelectedDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59);
DateTime endUtc = EndSelectedDate.ToUniversalTime() + offsetTime;
string jobName = SelectedJob == null ? "" : SelectedJob.Name;
+
+
- var runs = await new JobRunsCollectionBuilder(db).Set(x => x.StartDate <= DbFunctions.TruncateTime(endUtc) && x.StartDate >= DbFunctions.TruncateTime(startUtc.Date))
- .WithMachines(SelectedMachines.SynchedSource.ToList())
- .WithJobSource(JobRunSelectedSources.SynchedSource)
- .WithJobStatus(JobRunSelectedStatuses.SynchedSource)
- .WithGradient(IsGradientSelection.SynchedSource)
- .WithRmls(SelectedThreads.SynchedSource.Select(x => x.Guid).ToList())
- .Query(y => y.Where(x => (String.IsNullOrEmpty(jobName) || x.JobName.ToLower().StartsWith(jobName.ToLower()))
- && (x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue)))
- .BuildListAsync();
+ var db_JobRuns = db.JobRuns.Where(x=> x.StartDate <= DbFunctions.TruncateTime(endUtc) && x.StartDate >= DbFunctions.TruncateTime(startUtc.Date))
+ .Select(x => new
+ {
+ x.ID,
+ x.ActualStartDate,
+ x.EndDate,
+ x.EndPosition,
+ x.GradientResolutionCm,
+ x.Guid,
+ x.HeatingStartDate,
+ x.IsGradient,
+ x.JobGuid,
+ x.JobLength,
+ x.JobName,
+ x.JobSource,
+ x.MachineGuid,
+ x.RmlGuid,
+ x.StartDate,
+ x.Status,
+ x.UploadingStartDate,
+ x.UserGuid,
+ x.LiquidQuantityString,
+ });
+ var machineIDs = new HashSet<string>(SelectedMachines.SynchedSource.ToList().Select(p => p.Guid));
+ if(machineIDs.Count > 0)
+ {
+ db_JobRuns = db_JobRuns.Where(x => machineIDs.Contains(x.MachineGuid));
+ }
+ int[] jobRunSourceArr = JobRunSelectedSources.SynchedSource.Select(x => (int)x).ToArray();
+ if(jobRunSourceArr.Length > 0)
+ {
+ db_JobRuns = db_JobRuns.Where(x => jobRunSourceArr.Contains(x.JobSource));
+ }
+ int[] jobRunStatusArr = JobRunSelectedStatuses.SynchedSource.Select(x => (int)x).ToArray();
+ if(jobRunStatusArr.Length > 0)
+ {
+ db_JobRuns = db_JobRuns.Where(x => jobRunStatusArr.Contains(x.Status));
+ }
+ bool[] isGradientArr = IsGradientSelection.SynchedSource.Select(x => (bool)x).ToArray();
+ if(isGradientArr.Length > 0)
+ {
+ db_JobRuns = db_JobRuns.Where(x => isGradientArr.Contains(x.IsGradient));
+ }
+ List<String> rmlGuids = SelectedThreads.SynchedSource.Select(y => y.Guid).ToList();
+ if (rmlGuids != null && rmlGuids.Count > 0)
+ {
+ db_JobRuns = db_JobRuns.Where(x => rmlGuids.Contains(x.RmlGuid));
+ }
+ if(!String.IsNullOrEmpty(jobName))
+ {
+ db_JobRuns = db_JobRuns.Where(x => x.JobName.ToLower().StartsWith(jobName.ToLower()));
+ }
+
+ List<JobRun> runs = db_JobRuns.ToList()
+ .Where(x => (x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue))
+ .Select(x => new JobRun()
+ {
+ ID = x.ID,
+ ActualStartDate = x.ActualStartDate,
+ EndDate = x.EndDate,
+ EndPosition = x.EndPosition,
+ GradientResolutionCm = x.GradientResolutionCm,
+ Guid = x.Guid,
+ HeatingStartDate = x.HeatingStartDate,
+ IsGradient = x.IsGradient,
+ JobGuid = x.JobGuid,
+ JobLength = x.JobLength,
+ JobName = x.JobName,
+ JobSource = x.JobSource,
+ MachineGuid = x.MachineGuid,
+ RmlGuid = x.RmlGuid,
+ StartDate = x.StartDate,
+ Status = x.Status,
+ UploadingStartDate = x.UploadingStartDate,
+ UserGuid = x.UserGuid,
+ LiquidQuantityString = x.LiquidQuantityString,
+ }).ToList();
var modelList = runs.Select(x => new JobRunModel()
{
@@ -381,7 +452,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
protected void GenerateTotalRunsCount()
{//Total Runs:
- int val =JobRuns.Where(z => z.JobRun.EndPosition > 0).Count();
+ int val = JobRuns.Count();
StatisticsValueCollection.AddStatisticsValue("Total Runs ", val, " ");
}
@@ -400,9 +471,14 @@ namespace Tango.MachineStudio.Statistics.ViewModels
protected void GenerateRunsDuration()
{
var selection = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.EndDate != null && z.JobRun.ActualStartDate != null);
- double val = selection.Sum(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalHours);
+ double val = 0d;
+ double average = 0d;
+ if (selection != null && selection.Count<JobRunModel>() > 0)
+ {
+ val = selection.Sum(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalHours);
+ average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalMilliseconds);
+ }
StatisticsValueCollection.AddStatisticsValue("Total Runs Duration", val, " hours");
- double average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalMilliseconds);
StatisticsValueCollection.AddStatisticsValue("Average Runs Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalHours, 0), " hours");
}
@@ -468,16 +544,42 @@ namespace Tango.MachineStudio.Statistics.ViewModels
/// </summary>
protected void GenerateAllLiquidQuantities()
{
- var db_liquidQuantities = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.LiquidQuantities.Count > 0).Select(y => y.JobRun.LiquidQuantities).ToList();
- List<JobRunLiquidQuantity> allLiquidQuantities = new List<JobRunLiquidQuantity>();
+ var runs = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.LiquidQuantities.Count > 0).ToList();
+
+ Dictionary<LiquidTypes, ulong> total_quantities = new Dictionary<LiquidTypes, ulong>();
foreach (LiquidTypes ltype in (LiquidTypes[])Enum.GetValues(typeof(LiquidTypes)))
{
- var liquidQuantityByTypeList = db_liquidQuantities.Select(x => x.FirstOrDefault(y => y.LiquidType == ltype)).Where(x => x != null);
- var count = liquidQuantityByTypeList != null ? liquidQuantityByTypeList.Sum(x => x.Quantity) : 0;
- JobRunLiquidQuantity lq = new JobRunLiquidQuantity() { LiquidType = ltype, Quantity = count };
- allLiquidQuantities.Add(lq);
+ total_quantities[ltype] = 0;
+ }
+
+ foreach (var run in runs)
+ {
+ foreach (var lq in run.JobRun.LiquidQuantities)
+ {
+ if (lq.Quantity < 0)
+ {
+ Debug.WriteLine($"Warning: JobRun '{run.JobRun.ID}' contains an invalid value '{lq.Quantity}' for {lq.LiquidType} quantity.");
+ }
+
+ total_quantities[lq.LiquidType] += Convert.ToUInt64(Math.Max(lq.Quantity, 0));
+ }
}
+
+ List<TotalLiquidQuantityModel> allLiquidQuantities = total_quantities.Select(x => new TotalLiquidQuantityModel()
+ {
+ LiquidType = x.Key,
+ Quantity = x.Value
+ }).ToList();
+
+
+ //foreach (LiquidTypes ltype in (LiquidTypes[])Enum.GetValues(typeof(LiquidTypes)))
+ //{
+ // var liquidQuantityByTypeList = db_liquidQuantities.Select(x => x.FirstOrDefault(y => y.LiquidType == ltype)).Where(x => x != null);
+ // var count = liquidQuantityByTypeList != null ? liquidQuantityByTypeList.Sum(x => x.Quantity) : 0;
+ // JobRunLiquidQuantity lq = new JobRunLiquidQuantity() { LiquidType = ltype, Quantity = count };
+ // allLiquidQuantities.Add(lq);
+ //}
StatisticsValueCollection.GenerateStatisticsLiquidQuantity(allLiquidQuantities);
}
#endregion