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 { 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; } [TimeOfDayEditor] [EditorSequence(6)] public TimeSpan Start { get; set; } [DurationEditor(Summary = Summary.Sum)] [EditorSequence(7)] public TimeSpan Duration { get; set; } [TimeOfDayEditor] [EditorSequence(8)] public TimeSpan Finish { get; set; } [EditorSequence(9)] [EntityRelationship(DeleteAction.SetNull)] public KanbanLink Task { get; set; } [EditorSequence(10)] public JobLink JobLink { get; set; } [EditorSequence(11)] public JobITPLink ITP { get; set; } [EditorSequence(12)] public AssignmentActivityLink ActivityLink { get; set; } [TimestampEditor] [EditorSequence(13)] public DateTime Completed { get; set; } [TimestampEditor] [EditorSequence(14)] 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 TimeSheetLink TimeSheetLink { get; set; } public Expression> AutoIncrementField() { return x => x.Number; } public Filter AutoIncrementFilter() { return null; } protected override void DoPropertyChanged(string name, object before, object after) { base.DoPropertyChanged(name, before, after); if (bChanging) return; bChanging = true; if (name.Equals("Start")) Finish = ((TimeSpan)after).Add(Duration); else if (name.Equals("Finish")) Duration = ((TimeSpan)after).Subtract(Start); else if (name.Equals("Duration")) Finish = Start.Add((TimeSpan)after); bChanging = false; } protected override void Init() { base.Init(); JobLink = new JobLink(); ITP = new JobITPLink(); EmployeeLink = new EmployeeLink(); LeaveRequestLink = new LeaveRequestLink(); ActivityLink = new AssignmentActivityLink(); TimeSheetLink = new TimeSheetLink(); Delivery = new DeliveryLink(); Task = new KanbanLink(); } } }