| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | using InABox.Core;using System;using System.Collections.Generic;using System.Text;namespace Comal.Classes{    public interface IConsolidatedPurchaseOrderItem    {        Guid ID { get; set; }        PurchaseOrderItemLink OrderItem { get; set; }        JobRequisitionItemLink JobRequisitionItem { get; set; }        JobLink Job { get; set; }        /// <summary>        /// Quantity of the item in "exploded" units.        /// </summary>        double Qty { get; set; }    }    /// <summary>    /// Represents a consolidation of <see cref="PurchaseOrderItem"/> and <see cref="PurchaseOrderItemAllocation"/> into a single list.    /// </summary>    [AutoEntity(typeof(ConsolidatedPurchaseOrderItemGenerator))]    public class ConsolidatedPurchaseOrderItem : Entity, IConsolidatedPurchaseOrderItem, IRemotable, IPersistent, ILicense<AccountsPayableLicense>    {        public PurchaseOrderItemLink OrderItem { get; set; } = null!;        public JobRequisitionItemLink JobRequisitionItem { get; set; } = null!;        public JobLink Job { get; set; } = null!;        public double Qty { get; set; }        static ConsolidatedPurchaseOrderItem()        {            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.OrderItem.PurchaseOrderLink.PONumber, caption: "PONumber");            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.OrderItem.Description);            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.OrderItem.Product.Code, caption: "Product", width: 100);            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.OrderItem.Style.Code, caption: "Style", width: 100);            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.OrderItem.Dimensions.UnitSize, width: 70, caption: "Size");            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.Job.JobNumber, caption: "Job", width: 70);            DefaultColumns.Add<ConsolidatedPurchaseOrderItem>(x => x.Qty, width: 50);        }    }    public class ConsolidatedPurchaseOrderItemGenerator : AutoEntityUnionGenerator<IConsolidatedPurchaseOrderItem>    {        public override Column<IConsolidatedPurchaseOrderItem>[] IDColumns => new Column<IConsolidatedPurchaseOrderItem>[]        {            new Column<IConsolidatedPurchaseOrderItem>(x => x.ID)        };        protected override void Configure()        {            AddTable<PurchaseOrderItem>()                .AliasField(x => x.Job.ID, x => x.Job.ID)                .AliasField(x => x.OrderItem.ID, x => x.ID)                .AliasField(x => x.Qty, x => x.Unallocated)                .AddConstant(x => x.JobRequisitionItem.ID, Guid.Empty);            AddTable<PurchaseOrderItemAllocation>()                .AliasField(x => x.Job.ID, x => x.Job.ID)                .AliasField(x => x.OrderItem.ID, x => x.Item.ID)                .AliasField(x => x.Qty,                    ComplexFormulaGenerator.If<PurchaseOrderItemAllocation, string, double>(                        ComplexFormulaGenerator.Property<PurchaseOrderItemAllocation, string>(x => x.Item.Dimensions.Unit.Conversion),                        Condition.Equals,                        ComplexFormulaGenerator.Constant<PurchaseOrderItemAllocation, string>(""),                        "")                    .Then(ComplexFormulaGenerator.Property<PurchaseOrderItemAllocation, double>(x => x.Quantity))                    .Else(ComplexFormulaGenerator.Formula(FormulaOperator.Divide,                        ComplexFormulaGenerator.Property<PurchaseOrderItemAllocation, double>(x => x.Quantity),                        ComplexFormulaGenerator.Property<PurchaseOrderItemAllocation, double>(x => x.Item.Dimensions.Value))))                .AliasField(x => x.JobRequisitionItem.ID, x => x.JobRequisitionItem.ID);        }        public override bool Distinct => true;    }}
 |