EmployeeRosterExtensions.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Comal.Classes
  4. {
  5. public static class EmployeeRosterExtensions
  6. {
  7. private static readonly Dictionary<string, Func<IEmployeeRosterItem, TimeSpan>> times = new Dictionary<string, Func<IEmployeeRosterItem, TimeSpan>>()
  8. {
  9. { "Start", x => x.Start },
  10. { "Finish", x => x.Finish },
  11. { "Break", x => x.Break },
  12. { "Start2", x => x.Start2 },
  13. { "Finish2", x => x.Finish2 },
  14. { "Break2", x => x.Break2 }
  15. };
  16. private static double GetTime(IEmployeeRosterItem item, string column, string name, TimeSpan after)
  17. {
  18. if (string.Equals(column, name))
  19. return after.TotalHours;
  20. return times[column].Invoke(item).TotalHours;
  21. }
  22. private static double RecalculateTimes(IEmployeeRosterItem item, string name, TimeSpan after)
  23. {
  24. double result = 0.0F;
  25. result = GetTime(item, "Finish", name, after) - (GetTime(item, "Start", name, after) + GetTime(item, "Break", name, after));
  26. result = result + GetTime(item, "Finish2", name, after) - (GetTime(item, "Start2", name, after) + GetTime(item, "Break2", name, after));
  27. return result;
  28. }
  29. public static void DoPropertyChanged(this IEmployeeRosterItem item, string name, object? before, object? after)
  30. {
  31. if (times.ContainsKey(name) && after is TimeSpan afterTime)
  32. item.Duration = RecalculateTimes(item, name, afterTime);
  33. }
  34. /*public static EmployeeRosterItem[] FromJSON(String? json)
  35. {
  36. return !String.IsNullOrWhiteSpace(json)
  37. ? Serialization.Deserialize<List<EmployeeRosterItem>>(json)?.OrderBy(x => x.Day).ToArray()
  38. ?? new EmployeeRosterItem[] { }
  39. : new EmployeeRosterItem[] { };
  40. }
  41. public static String ToJSON(EmployeeRosterItem[] items)
  42. {
  43. return Serialization.Serialize(items);
  44. }*/
  45. }
  46. }