using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; using PRSClasses; namespace Comal.Classes { // public class StockHoldingLastStocktake : CoreAggregate // { // public override Expression> Aggregate => x => x.Date; // // public override Filter Filter => new Filter(x => x.Type) // .IsEqualTo(StockMovementType.StockTake); // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockMovement => StockMovement.Product.ID, StockHolding => StockHolding.Product.ID }, // { StockMovement => StockMovement.Location.ID, StockHolding => StockHolding.Location.ID }, // { StockMovement => StockMovement.Style.ID, StockHolding => StockHolding.Style.ID }, // { StockMovement => StockMovement.Job.ID, StockHolding => StockHolding.Job.ID }, // }.AddRange(Dimensions.GetLinks(x => x.Dimensions, x => x.Dimensions)); // // public override AggregateCalculation Calculation => AggregateCalculation.Maximum; // } // // [UserTracking(typeof(StockMovement))] // [Unrecoverable] // 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 Value { get; set; } // // [DoubleEditor(Editable = Editable.Disabled)] // [EditorSequence(9)] // public double AverageValue { get; set; } // // [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] // [EditorSequence(10)] // public double Available { get; set; } // // [Formula(typeof(StockHoldingAllocatedFormula))] // [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)] // [EditorSequence(11)] // public double Allocated { get; set; } // // [Aggregate(typeof(StockHoldingLastStocktake))] // [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(); // } // } // // internal class StockHoldingAllocatedFormula : IFormula // { // public Expression> Value => x => x.Qty; // // public FormulaOperator Operator => FormulaOperator.Subtract; // // public Expression>[] Modifiers => new Expression>[] // { // x => x.Available // }; // // public FormulaType Type => FormulaType.Virtual; // } }