using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { public class RequisitionDocumentCount : CoreAggregate { public override Expression> Aggregate => x => x.ID; public override AggregateCalculation Calculation => AggregateCalculation.Count; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { RequisitionDocument => RequisitionDocument.EntityLink.ID, Requisition => Requisition.ID } }; } [UserTracking(typeof(StockMovement))] public class Requisition : Entity, IRequisition, IPersistent, IRemotable, INumericAutoIncrement, ILicense { [EditorSequence(2)] [DateEditor(Editable = Editable.Hidden)] public override DateTime Created { get; set; } [EditorSequence(5)] public EmployeeLink RequestedBy { get; set; } [EditorSequence(6)] [NotesEditor] public string[] Notes { get; set; } [EditorSequence(7)] [DateTimeEditor] public DateTime Due { get; set; } [EditorSequence(9)] [IntegerEditor] public int Boxes { get; set; } [EditorSequence(11)] [LoggableProperty] [RequiredColumn] public EmployeeLink TakenBy { get; set; } [EditorSequence(13)] [TimestampEditor(Editable = Editable.Disabled)] public DateTime StockUpdated { get; set; } [EntityRelationship(DeleteAction.SetNull)] [NullEditor] [RequiredColumn] [LoggableProperty] public DeliveryLink Delivery { get; set; } [Aggregate(typeof(RequisitionDocumentCount))] [NullEditor] public int Documents { get; set; } [MemoEditor] public string Request { get; set; } public Expression> AutoIncrementField() { return x => x.Number; } public Filter AutoIncrementFilter() { return null; } [EditorSequence(1)] [IntegerEditor(Editable = Editable.Disabled)] public int Number { get; set; } [EditorSequence(3)] [TextBoxEditor] public string Title { get; set; } [EditorSequence(4)] [EntityRelationship(DeleteAction.Cascade)] public JobLink JobLink { get; set; } [EditorSequence(8)] public EmployeeLink Employee { get; set; } [EditorSequence(10)] [TimestampEditor] public DateTime Filled { get; set; } [EditorSequence(12)] [TimestampEditor(Editable = Editable.Disabled)] [LoggableProperty] public DateTime Archived { get; set; } protected override void Init() { base.Init(); JobLink = new JobLink(); Notes = new string[] { }; Archived = DateTime.MinValue; Delivery = new DeliveryLink(); RequestedBy = new EmployeeLink(); Employee = new EmployeeLink(); TakenBy = new EmployeeLink(); } public override string ToString() { return string.Format("{0}: {1} ({2} - {3})", Number, Title, JobLink.JobNumber, JobLink.Name); } } }