using System; using InABox.Core; namespace Comal.Classes { [AutoEntity(typeof(StockHoldingSummaryGenerator))] [UserTracking(typeof(StockMovement))] public class StockHolding : StockEntity, IRemotable, IPersistent, IOneToMany, IOneToMany, IStockHolding, ILicense { [Editable(Editable.Disabled)] [EditorSequence(1)] public StockLocationLink Location { get; set; } private class ProductLookupGenerator : LookupDefinitionGenerator { public override Filter? DefineFilter(StockHolding[] items) => LookupFactory.DefineFilter().And(x => x.NonStock).IsEqualTo(false); } [Editable(Editable.Disabled)] [EditorSequence(2)] [LookupDefinition(typeof(ProductLookupGenerator))] public override ProductLink Product { get; set; } [DimensionsEditor(typeof(StockDimensions))] [Editable(Editable.Disabled)] [EditorSequence(3)] public override StockDimensions Dimensions { get; set; } [Editable(Editable.Disabled)] [EditorSequence(4)] public ProductStyleLink Style { get; set; } [Editable(Editable.Disabled)] [EditorSequence(4)] public JobLink Job { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(5)] public double Units { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(6)] public double Qty { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(7)] public double Weight { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(8)] public double Available { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(9)] public double Allocated { get; set; } [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] [EditorSequence(10)] public double Value { get; set; } private class AverageValueFormula : ComplexFormulaGenerator { public override IComplexFormulaNode GetFormula() => Formula( FormulaOperator.Divide, Property(x => x.Value), Property(x => x.Units) ); } [ComplexFormula(typeof(AverageValueFormula))] [DoubleEditor(Editable = Editable.Disabled)] [EditorSequence(11)] public double AverageValue { get; set; } [DateEditor(Editable = Editable.Disabled)] [EditorSequence(11)] public DateTime LastStockTake { get; set; } public static Column[] Columns => new Column[] { new Column(x => x.Job.ID), new Column(x => x.Location.ID), new Column(x => x.Product.ID), new Column(x => x.Style.ID), new Column(x => x.Dimensions.Unit.ID), new Column(x => x.Dimensions.Quantity), new Column(x => x.Dimensions.Length), new Column(x => x.Dimensions.Width), new Column(x => x.Dimensions.Height), new Column(x => x.Dimensions.Weight), }; public static Filter? GetFilter(IStockHolding holding) { var filter = new Filters(); foreach(var column in Columns) { filter.Add(new Filter(column.Cast()).IsEqualTo(CoreUtils.GetPropertyValue(holding, column.Property))); } return filter.Combine(); } } }