123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using InABox.Core;
- namespace Comal.Classes
- {
- public class EmployeeRosterItem : BaseObject, IImportable, IExportable
- {
- private static readonly Dictionary<string, Func<EmployeeRosterItem, TimeSpan>> times = new Dictionary<string, Func<EmployeeRosterItem, TimeSpan>>()
- {
- { "Start", x => x.Start },
- { "Finish", x => x.Finish },
- { "Break", x => x.Break },
- { "Start2", x => x.Start2 },
- { "Finish2", x => x.Finish2 },
- { "Break2", x => x.Break2 }
- };
-
- [IntegerEditor(Alignment = Alignment.MiddleCenter, Editable = Editable.Disabled)]
- [EditorSequence(1)]
- [Caption("Day")]
- public int Day { get; set; }
- [TextBoxEditor(Editable = Editable.Disabled)]
- [EditorSequence(2)]
- public string Description { get; set; }
- [CheckBoxEditor]
- [EditorSequence(3)]
- [Caption("Rostered On?")]
- public bool Enabled { get; set; }
- [TimeOfDayEditor(Format = "hh:mm", Width = 70)]
- [EditorSequence(4)]
- public TimeSpan Start { get; set; }
- [TimeOfDayEditor(Format = "hh:mm", Width = 70)]
- [EditorSequence(5)]
- public TimeSpan Finish { get; set; }
- [DurationEditor(Format = "hh:mm", Visible = Visible.Default, Editable = Editable.Enabled, Width = 70)]
- [EditorSequence(6)]
- public TimeSpan Break { get; set; }
- [CheckBoxEditor]
- [EditorSequence(7)]
- [Caption("Split")]
- public bool SplitShift { get; set; }
- [TimeOfDayEditor(Format = "hh:mm", Width = 70)]
- [EditorSequence(8)]
- [Caption("Start 2")]
- public TimeSpan Start2 { get; set; }
- [TimeOfDayEditor(Format = "hh:mm", Width = 70)]
- [EditorSequence(9)]
- [Caption("Finish 2")]
- public TimeSpan Finish2 { get; set; }
- [DurationEditor(Format = "hh:mm", Visible = Visible.Default, Editable = Editable.Enabled, Width = 70)]
- [EditorSequence(10)]
- [Caption("Break 2")]
- public TimeSpan Break2 { get; set; }
-
- [DoubleEditor(Format = "F2", Visible = Visible.Default, Editable = Editable.Disabled, Summary = Summary.Sum, Width = 70,
- Alignment = Alignment.MiddleCenter)]
- [EditorSequence(12)]
- [Caption("Total")]
- public double Duration { get; set; }
-
- protected override void DoPropertyChanged(string name, object before, object after)
- {
- base.DoPropertyChanged(name, before, after);
- if (times.ContainsKey(name))
- Duration = RecalculateTimes(name, (TimeSpan)after);
- }
- private double RecalculateTimes(string name, TimeSpan after)
- {
- double result = 0.0F;
- result = GetTime("Finish", name, after) - (GetTime("Start", name, after) + GetTime("Break", name, after));
- result = result + GetTime("Finish2", name, after) - (GetTime("Start2", name, after) + GetTime("Break2", name, after));
- return result;
- }
- private double GetTime(string column, string name, TimeSpan after)
- {
- if (string.Equals(column, name))
- return after.TotalHours;
- return times[column].Invoke(this).TotalHours;
- }
- public static EmployeeRosterItem[] FromJSON(String? json)
- {
- return !String.IsNullOrWhiteSpace(json)
- ? Serialization.Deserialize<List<EmployeeRosterItem>>(json)?.OrderBy(x => x.Day).ToArray()
- ?? new EmployeeRosterItem[] { }
- : new EmployeeRosterItem[] { };
- }
- public static String ToJSON(EmployeeRosterItem[] items)
- {
- return Serialization.Serialize(items);
- }
- }
- }
|