using InABox.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Comal.Classes { [Caption("Allocation")] public class PurchaseOrderItemAllocation : Entity, IRemotable, IPersistent, ILicense , IOneToMany, IOneToMany, IOneToMany { [RequiredColumn] [EntityRelationship(DeleteAction.Cascade)] public PurchaseOrderItemLink Item { get; set; } /// /// This may not be blank. /// [RequiredColumn] [EntityRelationship(DeleteAction.Cascade)] public JobLink Job { get; set; } /// /// This may be an empty link. The interface is as such: if there is no JRI, then we are creating a reserve and allocation just against the job. If there is a JRI, /// then received stock is reserved and allocated for the JRI. /// [RequiredColumn] [EntityRelationship(DeleteAction.Cascade)] public JobRequisitionItemLink JobRequisitionItem { get; set; } [RequiredColumn] public double Quantity { get; set; } } [Caption("Requisition / PO Item Links")] [Obsolete("Replaced with PurchaseOrderItemAllocation", true)] public class JobRequisitionItemPurchaseOrderItem : Entity, IRemotable, IPersistent, IOneToMany, IOneToMany, ILicense { private class JobRequisitionItemLookup : LookupDefinitionGenerator { public override Filter? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items) { var jobs = items.Select(x => x.PurchaseOrderItem.Job.ID).Distinct().ToArray(); var products = items.Select(x => x.PurchaseOrderItem.Product.ID).Distinct().ToArray(); if(jobs.Length == 1 && products.Length == 1) { return new Filter(x => x.Job.ID).IsEqualTo(jobs.First()) .And(x => x.Product.ID).IsEqualTo(products.First()); } { return new Filter().None(); } } public override Columns DefineFilterColumns() => Columns.None().Add(x => x.PurchaseOrderItem.Job.ID) .Add(x => x.PurchaseOrderItem.Product.ID); } [LookupDefinition(typeof(JobRequisitionItemLookup))] [EntityRelationship(DeleteAction.Cascade)] public JobRequisitionItemLink JobRequisitionItem { get; set; } private class PurchaseOrderItemLookup : LookupDefinitionGenerator { public override Filter? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items) { var jobs = items.Select(x => x.JobRequisitionItem.Job.ID).Distinct().ToArray(); var products = items.Select(x => x.JobRequisitionItem.Product.ID).Distinct().ToArray(); if(jobs.Length == 1 && products.Length == 1) { return new Filter(x => x.Job.ID).IsEqualTo(jobs.First()) .And(x => x.Product.ID).IsEqualTo(products.First()); } { return new Filter().None(); } } public override Columns DefineFilterColumns() => Columns.None().Add(x => x.JobRequisitionItem.Job.ID) .Add(x => x.JobRequisitionItem.Product.ID); } [LookupDefinition(typeof(PurchaseOrderItemLookup))] [EntityRelationship(DeleteAction.Cascade)] public PurchaseOrderItemLink PurchaseOrderItem { get; set; } } }