using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { public class ConsignmentLastReceived : CoreAggregate { public override Expression> Aggregate => x => x.ReceivedDate; public override AggregateCalculation Calculation => AggregateCalculation.Maximum; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { PurchaseOrderItem => PurchaseOrderItem.Consignment.ID, Consignment => Consignment.ID } }; } public class ConsignmentUnreceivedItems : CoreAggregate { public override Expression> Aggregate => x => x.ID; public override AggregateCalculation Calculation => AggregateCalculation.Count; public override Filter Filter => new Filter(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue); public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { PurchaseOrderItem => PurchaseOrderItem.Consignment.ID, Consignment => Consignment.ID } }; } //public class ConsignmentClosed : ICondition //{ // public static readonly DateTime DefaultDate = DateTime.MinValue; // public Expression> Left => x => x.UnreceivedItems; // public Condition Condition => Condition.Equals; // public Expression> Right => x => 0; // public Expression> True => x => x.LastReceived; // public Expression> False => x => DateTime.MinValue; //} [UserTracking(typeof(Delivery))] public class Consignment : Entity, IRemotable, IPersistent, ILicense { [TextBoxEditor] [EditorSequence(0)] public string Number { get; set; } [EditorSequence(1)] public ConsignmentTypeLink Type { get; set; } [EditorSequence(2)] public PurchaseOrderCategoryLink Category { get; set; } [EditorSequence(3)] public SupplierLink Supplier { get; set; } [TextBoxEditor] [EditorSequence(4)] public string Origin { get; set; } [TextBoxEditor] [EditorSequence(5)] public string Description { get; set; } [DateEditor] [Caption("Est. Shipping Date")] [EditorSequence(6)] public DateTime EstimatedDispatchDate { get; set; } [DateEditor] [Caption("Act. Shipping Date")] [EditorSequence(7)] public DateTime ActualDispatchDate { get; set; } [DateEditor] [Caption("Est. Port Arrival")] [EditorSequence(8)] public DateTime EstimatedPortArrival { get; set; } [DateEditor] [Caption("Act. Port Arrival")] [EditorSequence(9)] public DateTime ActualPortArrival { get; set; } [NullEditor] [EditorSequence(10)] public DateTime EstimatedDepotArrival { get; set; } [NullEditor] [EditorSequence(11)] public DateTime ActualDepotArrival { get; set; } [DateEditor] [Caption("Est. Warehouse Arrival")] [EditorSequence(12)] public DateTime EstimatedWarehouseArrival { get; set; } [DateEditor] [Caption("Act. Warehouse Arrival")] [EditorSequence(13)] public DateTime ActualWarehouseArrival { get; set; } [TextBoxEditor] [EditorSequence(14)] public string Status { get; set; } [EditorSequence(14)] public PDFDocumentLink BillOfLading { get; set; } [TimestampEditor(Editable = Editable.Disabled)] [EditorSequence(15)] [Aggregate(typeof(ConsignmentLastReceived))] public DateTime LastReceived { get; set; } [IntegerEditor(Visible = Visible.Optional, Editable = Editable.Hidden)] [Aggregate(typeof(ConsignmentUnreceivedItems))] public int UnreceivedItems { get; set; } [TimestampEditor] //(Editable = Editable.Disabled)] [EditorSequence(16)] //[Condition(typeof(ConsignmentClosed))] public DateTime Closed { get; set; } [NullEditor] [EditorSequence(17)] public EmployeeLink Employee { get; set; } } }