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, IJobScopedItem { [EntityRelationship(DeleteAction.SetNull)] [NullEditor] [RequiredColumn] [LoggableProperty] public DeliveryLink Delivery { get; set; } [Aggregate(typeof(RequisitionDocumentCount))] [NullEditor] public int Documents { 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(2)] [DateEditor(Editable = Editable.Hidden)] public override DateTime Created { get => base.Created; set => base.Created = value; } [EditorSequence(3)] [TextBoxEditor] public string Title { get; set; } [EditorSequence(4)] [EntityRelationship(DeleteAction.Cascade)] public JobLink JobLink { get; set; } [EditorSequence(5)] [EntityRelationship(DeleteAction.SetNull)] public JobScopeLink JobScope { get; set; } [EditorSequence(6)] public EmployeeLink RequestedBy { get; set; } [EditorSequence(7)] [MemoEditor] public string Request { get; set; } [EditorSequence(8)] [NotesEditor] public string[] Notes { get; set; } = Array.Empty(); [EditorSequence(9)] [DateTimeEditor] public DateTime Due { get; set; } [EditorSequence(10)] public RequisitionDestinationLink Destination { get; set; } [EditorSequence("Fulfilment", 1)] [Caption("Assigned To")] public EmployeeLink Employee { get; set; } [EditorSequence("Fulfilment", 2)] [TimestampEditor] public DateTime Filled { get; set; } [EditorSequence("Fulfilment", 3)] [IntegerEditor] public int Boxes { get; set; } [EditorSequence("Fulfilment", 4)] [LoggableProperty] [RequiredColumn] public EmployeeLink TakenBy { get; set; } [EditorSequence("Fulfilment", 5)] [TimestampEditor(Editable = Editable.Disabled)] public DateTime StockUpdated { get; set; } [EditorSequence("Fulfilment", 6)] [TimestampEditor(Editable = Editable.Disabled)] [LoggableProperty] public DateTime Archived { get; set; } = DateTime.MinValue; public override string ToString() { return string.Format("{0}: {1} ({2} - {3})", Number, Title, JobLink.JobNumber, JobLink.Name); } static Requisition() { LinkedProperties.Register(x=>x.JobLink.DefaultScope, x=>x.ID, x=>x.JobScope.ID); } } }