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; } /// /// Quantity of the item in "exploded" units. /// double Qty { get; set; } } /// /// Represents a consolidation of and into a single list. /// [AutoEntity(typeof(ConsolidatedPurchaseOrderItemGenerator))] public class ConsolidatedPurchaseOrderItem : Entity, IConsolidatedPurchaseOrderItem, IRemotable, IPersistent, ILicense { 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(x => x.OrderItem.PurchaseOrderLink.PONumber, caption: "PONumber"); DefaultColumns.Add(x => x.OrderItem.Description); DefaultColumns.Add(x => x.OrderItem.Product.Code, caption: "Product", width: 100); DefaultColumns.Add(x => x.OrderItem.Style.Code, caption: "Style", width: 100); DefaultColumns.Add(x => x.OrderItem.Dimensions.UnitSize, width: 70, caption: "Size"); DefaultColumns.Add(x => x.Job.JobNumber, caption: "Job", width: 70); DefaultColumns.Add(x => x.Qty, width: 50); } } public class ConsolidatedPurchaseOrderItemGenerator : AutoEntityUnionGenerator { public override Column[] IDColumns => new Column[] { new Column(x => x.ID) }; protected override void Configure() { AddTable() .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() .AliasField(x => x.Job.ID, x => x.Job.ID) .AliasField(x => x.OrderItem.ID, x => x.Item.ID) .AliasField(x => x.Qty, ComplexFormulaGenerator.If( ComplexFormulaGenerator.Property(x => x.Item.Dimensions.Unit.Conversion), Condition.Equals, ComplexFormulaGenerator.Constant(""), "") .Then(ComplexFormulaGenerator.Property(x => x.Quantity)) .Else(ComplexFormulaGenerator.Formula(FormulaOperator.Divide, ComplexFormulaGenerator.Property(x => x.Quantity), ComplexFormulaGenerator.Property(x => x.Item.Dimensions.Value)))) .AliasField(x => x.JobRequisitionItem.ID, x => x.JobRequisitionItem.ID); } public override bool Distinct => true; } }