| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 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<ProjectManagementLicense>    , IOneToMany<JobRequisitionItem>, IOneToMany<Job>, IOneToMany<PurchaseOrderItem>    {        [RequiredColumn]        [EntityRelationship(DeleteAction.Cascade)]        public PurchaseOrderItemLink Item { get; set; }                /// <summary>        /// This may not be blank.        /// </summary>        [RequiredColumn]        [EntityRelationship(DeleteAction.Cascade)]        public JobLink Job { get; set; }                /// <summary>        /// 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.        /// </summary>        [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<JobRequisitionItem>, IOneToMany<PurchaseOrderItem>, ILicense<ProjectManagementLicense>    {                private class JobRequisitionItemLookup : LookupDefinitionGenerator<JobRequisitionItem, JobRequisitionItemPurchaseOrderItem>        {            public override Filter<JobRequisitionItem>? 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<JobRequisitionItem>(x => x.Job.ID).IsEqualTo(jobs.First())                        .And(x => x.Product.ID).IsEqualTo(products.First());                }                {                    return new Filter<JobRequisitionItem>().None();                }            }            public override Columns<JobRequisitionItemPurchaseOrderItem> DefineFilterColumns()                => Columns.None<JobRequisitionItemPurchaseOrderItem>().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<PurchaseOrderItem, JobRequisitionItemPurchaseOrderItem>        {            public override Filter<PurchaseOrderItem>? 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<PurchaseOrderItem>(x => x.Job.ID).IsEqualTo(jobs.First())                        .And(x => x.Product.ID).IsEqualTo(products.First());                }                {                    return new Filter<PurchaseOrderItem>().None();                }            }            public override Columns<JobRequisitionItemPurchaseOrderItem> DefineFilterColumns()                => Columns.None<JobRequisitionItemPurchaseOrderItem>().Add(x => x.JobRequisitionItem.Job.ID)                .Add(x => x.JobRequisitionItem.Product.ID);        }        [LookupDefinition(typeof(PurchaseOrderItemLookup))]        [EntityRelationship(DeleteAction.Cascade)]        public PurchaseOrderItemLink PurchaseOrderItem { get; set; }    }}
 |