using System; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { //public class DeliveryAssignments : CoreAggregate //{ // public override Expression> Aggregate => Delivery => Delivery.ID; // //public Expression> Link => x => x.Assignment.ID; // public override AggregateCalculation Calculation => AggregateCalculation.Count; // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>> // { // { Delivery => Delivery.Assignment.ID, x => x.ID } // }; //} /// /// An assignment represents an anticipated booking for an employee, much like a diary entry /// /// [UserTracking("Assignments")] [Caption("Assignments")] public class Assignment : Entity, IPersistent, IRemotable, INumericAutoIncrement, IOneToMany, IOneToMany, IOneToMany, ILicense, IJobActivity, IOneToMany { private bool bChanging; [IntegerEditor(Editable = Editable.Hidden)] [EditorSequence(1)] public int Number { get; set; } [DateEditor] [EditorSequence(2)] public DateTime Date { get; set; } [EntityRelationship(DeleteAction.Cascade)] [EditorSequence(3)] public EmployeeLink EmployeeLink { get; set; } [TextBoxEditor] [EditorSequence(4)] public string Title { get; set; } [MemoEditor] [EditorSequence(5)] public string Description { get; set; } [EditorSequence(6)] public AssignmentActivityLink ActivityLink { get; set; } [EditorSequence(7)] [EntityRelationship(DeleteAction.SetNull)] public KanbanLink Task { get; set; } [EditorSequence(8)] public JobLink JobLink { get; set; } [EditorSequence(9)] public JobITPLink ITP { get; set; } [NullEditor] [Obsolete("Replaced with Actual.Start", true)] public TimeSpan Start { get; set; } [NullEditor] [Obsolete("Replaced with Actual.Duration", true)] public TimeSpan Duration { get; set; } [NullEditor] [Obsolete("Replaced with Actual.Finish", true)] public TimeSpan Finish { get; set; } [EditorSequence(10)] [CoreTimeEditor] public CoreTime Booked { get; set; } [EditorSequence(11)] [CoreTimeEditor] public CoreTime Actual { get; set; } [TimestampEditor] [EditorSequence(12)] public DateTime Completed { get; set; } [TimestampEditor] [EditorSequence(13)] public DateTime Processed { get; set; } [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public LeaveRequestLink LeaveRequestLink { get; set; } [NullEditor] public DeliveryLink Delivery { get; set; } [NullEditor] [EntityRelationship(DeleteAction.SetNull)] public InvoiceLink Invoice { get; set; } public Expression> AutoIncrementField() { return x => x.Number; } public Filter AutoIncrementFilter() { return null; } protected override void Init() { base.Init(); JobLink = new JobLink(); ITP = new JobITPLink(); EmployeeLink = new EmployeeLink(); LeaveRequestLink = new LeaveRequestLink(); ActivityLink = new AssignmentActivityLink(); Invoice = new InvoiceLink(); Delivery = new DeliveryLink(); Task = new KanbanLink(); Booked = new CoreTime(); Actual = new CoreTime(); } public DateTime EffectiveStart() { if (Actual.Start.Ticks != 0) return Date.Add(Actual.Start); else return Date.Add(Booked.Start); } public DateTime EffectiveFinish() { if (Actual.Finish.Ticks != 0) return Date.Add(Actual.Finish); else if (Actual.Start.Ticks != 0) return Date.Add(Actual.Start).Add(Booked.Duration); else return Date.Add(Booked.Finish); } } }