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;
}
}