123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Configuration;
- using InABox.Core;
- using InABox.Wpf;
- namespace PRSDesktop
- {
- /// <summary>
- /// Interaction logic for WindowTrackerSummary.xaml
- /// </summary>
- public partial class WindowTrackerSummary : ThemableWindow
- {
- private readonly DailyActivityHistory ActivityHistory;
- private readonly WindowTrackerHistoryGrid history = new();
- private readonly Dictionary<WindowTrackerHistory, List<DateTime>> settingsmap = new();
- private readonly WindowTracker[] trackers;
- public WindowTrackerSummary(Guid employeeid, DateTime date)
- {
- EmployeeID = employeeid;
- Date = date;
- InitializeComponent();
- grid.Children.Add(history);
- trackers = ClientFactory.IsSupported<WindowTracker>()
- ? new Client<WindowTracker>().Load(new Filter<WindowTracker>(x => x.Employee.ID).IsEqualTo(employeeid))
- : new WindowTracker[] { };
- var timestamps = new List<DateTime>();
- ActivityHistory = new LocalConfiguration<DailyActivityHistory>().Load();
- var consolidated = new Dictionary<DateTime, string>();
- var curact = "";
- var curstart = DateTime.MinValue;
- var curend = DateTime.MinValue;
- foreach (var activity in ActivityHistory.Activities.Where(x => x.Key.Date.Equals(date)).OrderBy(x => x.Key))
- {
- var act = string.IsNullOrWhiteSpace(activity.Value) ? "" : activity.Value;
- if (!act.Equals(curact))
- {
- if (curstart != DateTime.MinValue && curend.Subtract(curstart) > new TimeSpan(0, 1, 0))
- {
- CreateSummary(curstart, curend, curact, timestamps);
- timestamps = new List<DateTime>();
- }
- curstart = curend != DateTime.MinValue ? curend : activity.Key;
- curact = act;
- }
- curend = activity.Key;
- timestamps.Add(activity.Key);
- }
- if (curstart != DateTime.MinValue && curend.Subtract(curstart) > new TimeSpan(0, 1, 0))
- CreateSummary(curstart, curend, curact, timestamps);
- history.Refresh(true, true);
- }
- public DateTime Date { get; }
- public Guid EmployeeID { get; }
- private void CreateSummary(DateTime start, DateTime finish, string title, List<DateTime> timestamps)
- {
- var tracker = trackers.FirstOrDefault(x => x.Window.Equals(title));
- var item = new WindowTrackerHistory
- {
- Start = start.TimeOfDay,
- Finish = finish.TimeOfDay,
- Window = title,
- Tracker = tracker != null ? tracker.ID : Guid.Empty
- };
- item.Employee.ID = EmployeeID;
- item.Job.ID = tracker != null ? tracker.Job.ID : Guid.Empty;
- item.ITP.ID = tracker != null ? tracker.ITP.ID : Guid.Empty;
- item.Activity.ID = tracker != null ? tracker.Activity.ID : Guid.Empty;
- history.History.Add(item);
- settingsmap[item] = timestamps;
- }
- private void Cancel_Click(object sender, RoutedEventArgs e)
- {
- DialogResult = false;
- }
- private void OK_Click(object sender, RoutedEventArgs e)
- {
- var updates = new List<Assignment>();
- var bFirst = true;
- var start = new TimeSpan(0);
- var finish = new TimeSpan(0);
- var activities = new List<string>();
- var jobid = CoreUtils.FullGuid;
- var itpid = CoreUtils.FullGuid;
- var actid = CoreUtils.FullGuid;
- foreach (var item in history.History)
- {
- if (item.Job.ID != jobid || item.Activity.ID != actid)
- {
- if (!bFirst)
- {
- var update = CreateAssignment(start, finish, activities, jobid, itpid, actid);
- updates.Add(update);
- }
- bFirst = false;
- start = item.Start;
- jobid = item.Job.ID;
- itpid = item.ITP.ID;
- actid = item.Activity.ID;
- }
- if (!activities.Contains(item.Window))
- activities.Add(item.Window);
- finish = item.Finish;
- foreach (var timestamp in settingsmap[item])
- if (ActivityHistory.Activities.ContainsKey(timestamp))
- ActivityHistory.Activities.Remove(timestamp);
- }
- if (jobid != Guid.Empty || actid != Guid.Empty)
- {
- var update = CreateAssignment(start, finish, activities, jobid, itpid, actid);
- updates.Add(update);
- }
- if (updates.Any())
- {
- new LocalConfiguration<DailyActivityHistory>().Save(ActivityHistory);
- new Client<Assignment>().Save(updates, "Added by Daily Report Window Tracker");
- DialogResult = true;
- Close();
- }
- else
- {
- MessageBox.Show("Nothing to Update!");
- }
- }
- private Assignment CreateAssignment(TimeSpan start, TimeSpan finish, List<string> activities, Guid jobid, Guid itpid, Guid actid)
- {
- var update = new Assignment();
- update.JobLink.ID = jobid;
- update.ITP.ID = itpid;
- update.ActivityLink.ID = actid;
- update.EmployeeLink.ID = EmployeeID;
- update.Date = Date;
- update.Actual.Start = start;
- update.Actual.Finish = finish;
- update.Actual.Duration = finish.Subtract(start);
- update.Title = activities.First();
- update.Description = string.Join("\n", activities.Skip(1));
- activities.Clear();
- return update;
- }
- }
- }
|