aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels')
-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/ViewModels/JobRunsViewVM.cs147
2 files changed, 149 insertions, 73 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/ViewModels/JobRunsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
index 800346ff9..ae1592d8d 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
@@ -21,9 +21,23 @@ using LiveCharts.Wpf;
using LiveCharts;
using Tango.BL.ValueObjects;
using System.Diagnostics;
+using Microsoft.Win32;
+using Tango.CSV;
+using System.ComponentModel;
namespace Tango.MachineStudio.Statistics.ViewModels
{
+ public enum HeadCleaningSelectionEnum
+ {
+ [Description("Exclude")]
+ Exclude = 0,
+ [Description("Include")]
+ Include = 1,
+ [Description("Only")]
+ Only = 2
+ };
+
+
public class JobRunsViewVM : ViewModel
{
private INotificationProvider _notification;
@@ -31,6 +45,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels
private List<User> _allUsers;
private List<RmlModel> _rmlsModels;
+
+
#region Properties
private ObservableCollection<JobRunModel> _jobRuns;
@@ -83,7 +99,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels
{
get { return _startSelectedDate; }
set { _startSelectedDate = value;
- RaisePropertyChangedAuto(); }
+ RaisePropertyChangedAuto();
+ }
}
private DateTime _endSelectedDate;
@@ -172,6 +189,19 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
}
+ private HeadCleaningSelectionEnum _headCleaningSelected;
+
+ public HeadCleaningSelectionEnum HeadCleaningSelected
+ {
+ get { return _headCleaningSelected; }
+ set
+ {
+ _headCleaningSelected = value;
+ RaisePropertyChangedAuto();
+ }
+ }
+
+
/// <summary>
/// Gets or sets the JobRuns providers.
/// </summary>
@@ -200,12 +230,15 @@ namespace Tango.MachineStudio.Statistics.ViewModels
public RelayCommand LoadJobRunsCommand { get; set; }
+ public RelayCommand ExportToExcelCommand { get; set; }
+
public JobRunsViewVM(INotificationProvider notificationProvider)
{
_notification = notificationProvider;
JobRuns = new ObservableCollection<JobRunModel>();
LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), () => IsFree);
- LengthUpperValue = 5000.0;
+ ExportToExcelCommand = new RelayCommand(ExportToExcel, () => IsFree);
+ LengthUpperValue = 10000.0;
LengthLowerValue = 0.0;
DateTime now = DateTime.Now;
StartSelectedDate = now.AddMonths(-1);
@@ -250,6 +283,9 @@ namespace Tango.MachineStudio.Statistics.ViewModels
});
IsGradientSelection.SelectionChanged -= (x, y) => RaisePropertyChanged(nameof(IsGradientSelection));
IsGradientSelection.SelectionChanged += (x, y) => RaisePropertyChanged(nameof(IsGradientSelection));
+
+ HeadCleaningSelected = HeadCleaningSelectionEnum.Exclude;
+
JobsProvider = new SuggestionProvider((filter) =>
{
try
@@ -305,8 +341,9 @@ namespace Tango.MachineStudio.Statistics.ViewModels
IsFree = true;
}
}
+
}
-
+
/// <summary>
/// Loads the job runs by filters.
/// </summary>
@@ -353,7 +390,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels
x.BlackQuantity,
x.TransparentQuantity,
x.LubricantQuantity,
- x.CleanerQuantity
+ x.CleanerQuantity,
+ x.IsHeadCleaning
});
var machineIDs = new HashSet<string>(SelectedMachines.SynchedSource.ToList().Select(p => p.Guid));
if (machineIDs.Count > 0)
@@ -375,6 +413,13 @@ namespace Tango.MachineStudio.Statistics.ViewModels
{
db_JobRuns = db_JobRuns.Where(x => isGradientArr.Contains(x.IsGradient));
}
+
+ if(HeadCleaningSelected != HeadCleaningSelectionEnum.Include)
+ {
+ bool isHeadCleaning = HeadCleaningSelected == HeadCleaningSelectionEnum.Only;
+ db_JobRuns = db_JobRuns.Where(x => isHeadCleaning == x.IsHeadCleaning);
+ }
+
List<String> rmlGuids = SelectedThreads.SynchedSource.Select(y => y.Guid).ToList();
if (rmlGuids != null && rmlGuids.Count > 0)
{
@@ -415,7 +460,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels
BlackQuantity = x.BlackQuantity,
TransparentQuantity = x.TransparentQuantity,
LubricantQuantity = x.LubricantQuantity,
- CleanerQuantity = x.CleanerQuantity
+ CleanerQuantity = x.CleanerQuantity,
+ IsHeadCleaning = x.IsHeadCleaning
}).ToList();
var modelList = runs.Select(x => new JobRunModel()
@@ -444,12 +490,91 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
}
- #region GenerateS_StatisticsValueCollection
+ private void ExportToExcel()
+ {
+ SaveFileDialog dlg = new SaveFileDialog();
+ dlg.Title = "Job Runs Statistic Report";
+ dlg.Filter = "CSV Files|*.csv";
+ dlg.FileName = $"Statistics_Job_runs";
+ dlg.DefaultExt = ".csv";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ CsvFile<ExcelModel> csvFile = new CsvFile<ExcelModel>(new CsvDestination(dlg.FileName), new CsvDefinition()
+ {
+ Columns = new List<String>()
+ {
+ "ID",
+ "Machine",
+ "User",
+ "Job Name",
+ "Thread",
+ "Length",
+ "Source",
+ "Upload Duration",
+ "Heating Duration",
+ "Start Time",
+ "IsGradient",
+ "Gradient Resolution",
+ "Status",
+ "End Date",
+ "End Position",
+ "Cyan",
+ "Magenta",
+ "Yellow",
+ "Black",
+ "Transparent",
+ "Lubricant",
+ "Cleaner"
+ },
+ });
+ var selection = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.EndDate != null && z.JobRun.ActualStartDate != null);
+ foreach (var jobRunModel in selection)
+ {
+ ExcelModel excel_model = new ExcelModel();
+ excel_model.ID = jobRunModel.JobRun.ID.ToString();
+ excel_model.Machine = jobRunModel.Machine != null ? jobRunModel.Machine.SerialNumber : "";
+ excel_model.User = jobRunModel.User != null ? jobRunModel.User.Contact.FullName: "";
+ excel_model.JobName = jobRunModel.JobRun.JobName;
+ excel_model.Thread = jobRunModel.Rml != null ? jobRunModel.Rml.Name : "";
+ excel_model.Length = String.Format("{0:0.##}", jobRunModel.JobRun.JobLength);
+ excel_model.Source = jobRunModel.JobRun.Source.ToString();
+ excel_model.UploadDuration = jobRunModel.UploadDuration != null ? ((TimeSpan)(jobRunModel.UploadDuration)).ToString(@"hh\:mm\:ss") : TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss");
+ excel_model.HeatingDuration = jobRunModel.HeatingDuration != null ? ((TimeSpan)(jobRunModel.HeatingDuration)).ToString(@"hh\:mm\:ss") : TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss");
+ excel_model.StartTime = jobRunModel.JobRun.ActualStartDate != null ? ((DateTime)jobRunModel.JobRun.ActualStartDate).ToLocalTime().ToString("MM/dd/yy HH:mm"): "";
+ excel_model.IsGradient = jobRunModel.JobRun.IsGradient ? "Yes" : "No";
+ excel_model.GR = jobRunModel.JobRun.GradientResolutionCm.ToString();
+ excel_model.Status = jobRunModel.JobRun.JobRunStatus.ToString();
+ excel_model.EndTime = jobRunModel.JobRun.EndDate != null ? ((DateTime)jobRunModel.JobRun.EndDate).ToLocalTime().ToString("MM/dd/yy HH:mm"): "";
+ excel_model.EndPosition = String.Format("{0:0.##}", jobRunModel.JobRun.EndPosition);
+ excel_model.Cyan = jobRunModel.JobRun.CyanQuantity < 0 ? "" :jobRunModel.JobRun.CyanQuantity.ToString();
+ excel_model.Magenta = jobRunModel.JobRun.MagentaQuantity < 0 ? "" : jobRunModel.JobRun.MagentaQuantity.ToString();
+ excel_model.Yellow = jobRunModel.JobRun.YellowQuantity < 0 ? "" : jobRunModel.JobRun.YellowQuantity.ToString();
+ excel_model.Black = jobRunModel.JobRun.BlackQuantity < 0 ? "" : jobRunModel.JobRun.BlackQuantity.ToString();
+ excel_model.Transparent = jobRunModel.JobRun.TransparentQuantity < 0 ? "" : jobRunModel.JobRun.TransparentQuantity.ToString();
+ excel_model.Lubricant = jobRunModel.JobRun.LubricantQuantity < 0 ? "" : jobRunModel.JobRun.LubricantQuantity.ToString();
+ excel_model.Cleaner = jobRunModel.JobRun.CleanerQuantity < 0 ? "" : jobRunModel.JobRun.CleanerQuantity.ToString();
+ csvFile.Append(excel_model);
+
+ }
- /// <summary>
- /// Generates the statistics.
- /// </summary>
- protected void GenerateStatistics()
+ csvFile.Dispose();
+ _notification.ShowInfo("Report generated successfully.");
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error generating Statistics Job Runs report.");
+ _notification.ShowError($"Error generating Statistics Job Runs report..\n{ex.Message}");
+ }
+ }
+ }
+ #region GenerateS_StatisticsValueCollection
+
+ /// <summary>
+ /// Generates the statistics.
+ /// </summary>
+ protected void GenerateStatistics()
{
StatisticsValueCollection.Clean();
if (JobRuns.Count() == 0)
@@ -495,7 +620,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalMilliseconds);
}
StatisticsValueCollection.AddStatisticsValue("Total Dyeing Time", val, " hours");
- StatisticsValueCollection.AddStatisticsValue("Total Dyeing Time", Math.Max(TimeSpan.FromMilliseconds(average).TotalHours, 0), " hours");
+ StatisticsValueCollection.AddStatisticsValue("Average Dyeing Time", Math.Max(TimeSpan.FromMilliseconds(average).TotalHours, 0), " hours");
}
/// <summary>