using System; using System.ComponentModel; using System.Linq; using System.Linq.Expressions; using InABox.Clients; using InABox.Core; using PRSClasses; namespace Comal.Classes { public enum JobRequisitionItemStatus { NotChecked, Allocated, TreatmentRequired, OrderRequired, TreatmentOnOrder, OnOrder, Received, TreatmentReceived, Cancelled, Archived } public class JobRequisitionItemTotalQtyFormula : IFormula { public Expression> Value => x => x.Qty; public Expression>[] Modifiers => new Expression>[] { x => x.Dimensions.Value }; public FormulaOperator Operator => FormulaOperator.Multiply; public FormulaType Type => FormulaType.Virtual; } [Caption("Items")] [UserTracking(typeof(Job))] public class JobRequisitionItem : StockEntity, IRemotable, IPersistent, IOneToMany, ILicense, IJobMaterial, ISequenceable { [EntityRelationship(DeleteAction.Cascade)] public JobLink Job { get; set; } [EntityRelationship(DeleteAction.Cascade)] public JobRequisitionLink Requisition { get; set; } [EntityRelationship(DeleteAction.SetNull)] [EditorSequence(0)] [RequiredColumn] public override ProductLink Product { get; set; } [EditorSequence(1)] [MemoEditor] public string Notes { get; set; } [EditorSequence(2)] public ProductStyleLink Style { get; set; } [EditorSequence(3)] public double Qty { get; set; } [NullEditor] [Obsolete("Replaced with Dimensions", true)] public double UnitSize { get; set; } [EditorSequence(4)] [RequiredColumn] [DimensionsEditor(typeof(StockDimensions), AllowEditingUnit = false)] public override StockDimensions Dimensions { get; set; } [EditorSequence(5)] public SupplierLink Supplier { get; set; } [DoubleEditor(Editable = Editable.Hidden)] [Formula(typeof(JobRequisitionItemTotalQtyFormula))] public double TotalQty { get; set; } [EnumLookupEditor(typeof(JobRequisitionItemStatus))] public JobRequisitionItemStatus Status { get; set; } public PurchaseOrderItemLink PurchaseOrderItem { get; set; } public DateTime Cancelled { get; set; } public DateTime Archived { get; set; } public DateTime Ordered { get; set; } [NullEditor] public long Sequence { get; set; } protected override void Init() { base.Init(); Job = new JobLink(); Requisition = new JobRequisitionLink(); Style = new ProductStyleLink(() => this); Status = JobRequisitionItemStatus.NotChecked; PurchaseOrderItem = new PurchaseOrderItemLink(); Supplier = new SupplierLink(); Cancelled = DateTime.MinValue; Archived = DateTime.MinValue; Ordered = DateTime.MinValue; } static JobRequisitionItem() { StockEntity.LinkStockDimensions(); LinkedProperties.Register(x => x.Product.DefaultStyle, x => x.ID, x => x.Style.ID); } private void CheckPurchaseOrder() { } } }