using System; using System.Collections.Generic; namespace Comal.Classes { public static class EmployeeRosterExtensions { private static readonly Dictionary> times = new Dictionary>() { { "Start", x => x.Start }, { "Finish", x => x.Finish }, { "Break", x => x.Break }, { "Start2", x => x.Start2 }, { "Finish2", x => x.Finish2 }, { "Break2", x => x.Break2 } }; private static double GetTime(IEmployeeRosterItem item, string column, string name, TimeSpan after) { if (string.Equals(column, name)) return after.TotalHours; return times[column].Invoke(item).TotalHours; } private static double RecalculateTimes(IEmployeeRosterItem item, string name, TimeSpan after) { double result = 0.0F; result = GetTime(item, "Finish", name, after) - (GetTime(item, "Start", name, after) + GetTime(item, "Break", name, after)); result = result + GetTime(item, "Finish2", name, after) - (GetTime(item, "Start2", name, after) + GetTime(item, "Break2", name, after)); return result; } public static void DoPropertyChanged(this IEmployeeRosterItem item, string name, object? before, object? after) { if (times.ContainsKey(name) && after is TimeSpan afterTime) item.Duration = RecalculateTimes(item, name, afterTime); } /*public static EmployeeRosterItem[] FromJSON(String? json) { return !String.IsNullOrWhiteSpace(json) ? Serialization.Deserialize>(json)?.OrderBy(x => x.Day).ToArray() ?? new EmployeeRosterItem[] { } : new EmployeeRosterItem[] { }; } public static String ToJSON(EmployeeRosterItem[] items) { return Serialization.Serialize(items); }*/ } }