| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | using System;using System.Collections.Generic;using System.Linq.Expressions;using InABox.Core;using PRSClasses;namespace Comal.Classes{    // public class StockHoldingViewQtyAggregate : CoreAggregate<StockHolding, double>    // {    //     public override Expression<Func<StockHolding, double>> Aggregate => x => x.Qty;    //     public override AggregateCalculation Calculation => AggregateCalculation.Sum;    // }        //    // public class StockHoldingViewUnitsFormula : IFormula<StockHoldingView, double>    // {    //     public Expression<Func<StockHoldingView, double>> Value => x => x.Qty;    //    //     public Expression<Func<StockHoldingView, double>>[] Modifiers => new Expression<Func<StockHoldingView, double>>[] { x => x.Dimensions.Value };    //    //     public FormulaOperator Operator => FormulaOperator.Divide;    // }    //    // public class StockHoldingViewIsRemnantCondition : ICondition<StockHoldingView, double, object>    // {    //     public Expression<Func<StockHoldingView, double>> Left => x => x.Dimensions.Value;    //    //     public Condition Condition => Condition.LessThan;    //    //     public Expression<Func<StockHoldingView, double>> Right => x => x.Product.Dimensions.Value;    //    //     public Expression<Func<StockHoldingView, object>> True => x => true;    //    //     public Expression<Func<StockHoldingView, object>> False => x => null;    // }    //    // public class StockHoldingView : Entity, IRemotable, IPersistent, IView<StockMovement, IStockHolding>, IStockHolding    // {    //     public ProductLink Product { get; set; }    //         //     public ProductStyleLink Style { get; set; }    //         //     public StockLocationLink Location { get; set; }    //         //     public JobLink Job { get; set; }    //         //     public StockDimensions Dimensions { get; set; }    //    //     [Condition(typeof(StockHoldingViewIsRemnantCondition))]    //     public bool IsRemnant { get; set; }    //    //     [Aggregate(typeof(StockHoldingViewQtyAggregate))]    //     public double Qty { get; set; }    //         //     [Formula(typeof(StockHoldingViewUnitsFormula))]    //     public double Units { get; set; }    //         //     protected override void Init()    //     {    //         base.Init();    //         Product = new ProductLink();    //         Location = new StockLocationLink();    //         Job = new JobLink();    //         Style = new ProductStyleLink();    //         Dimensions = new StockDimensions();    //     }            // }    public class StockHoldingUnitAggregate : CoreAggregate<StockHolding, StockMovement, double>    {        public override Expression<Func<StockMovement, double>> Aggregate => x => x.Units;        public override Dictionary<Expression<Func<StockMovement, object>>, Expression<Func<StockHolding, object>>> Links =>            new Dictionary<Expression<Func<StockMovement, object>>, Expression<Func<StockHolding, object>>>()            {                { StockMovement => StockMovement.Product.ID, StockHolding => StockHolding.Product.ID },                { StockMovement => StockMovement.Job.ID, StockHolding => StockHolding.Job.ID },                { StockMovement => StockMovement.Location.ID, StockHolding => StockHolding.Location.ID },                { StockMovement => StockMovement.Style.ID, StockHolding => StockHolding.Style.ID },                { StockMovement => StockMovement.Dimensions.UnitSize, StockHolding => StockHolding.Dimensions.UnitSize }            };        public override AggregateCalculation Calculation => AggregateCalculation.Sum;    }    public class StockHoldingQuantityAggregate : CoreAggregate<StockHolding, StockMovement, double>    {        public override Expression<Func<StockMovement, double>> Aggregate => x => x.Qty;        public override Dictionary<Expression<Func<StockMovement, object>>, Expression<Func<StockHolding, object>>> Links =>            new Dictionary<Expression<Func<StockMovement, object>>, Expression<Func<StockHolding, object>>>()            {                { StockMovement => StockMovement.Product.ID, StockHolding => StockHolding.Product.ID },                { StockMovement => StockMovement.Job.ID, StockHolding => StockHolding.Job.ID },                { StockMovement => StockMovement.Location.ID, StockHolding => StockHolding.Location.ID },                { StockMovement => StockMovement.Style.ID, StockHolding => StockHolding.Style.ID },                { StockMovement => StockMovement.Dimensions.UnitSize, StockHolding => StockHolding.Dimensions.UnitSize }            };        public override AggregateCalculation Calculation => AggregateCalculation.Sum;    }    public class StockHoldingWeightFormula : IFormula<StockHolding, double>    {        public Expression<Func<StockHolding, double>> Value => x => x.Qty;        public Expression<Func<StockHolding, double>>[] Modifiers => new Expression<Func<StockHolding, double>>[] { x => x.Dimensions.Weight };        public FormulaOperator Operator => FormulaOperator.Multiply;                public FormulaType Type => FormulaType.Virtual;    }    public class StockHoldingIsRemnantCondition : ICondition<StockHolding, double, object>    {        public Expression<Func<StockHolding, double>> Left => x => x.Dimensions.Value;        public Condition Condition => Condition.LessThan;        public Expression<Func<StockHolding, double>> Right => x => x.Product.Dimensions.Value;        public Expression<Func<StockHolding, object>> True => x => true;        public Expression<Func<StockHolding, object>> False => x => null;                public ConditionType Type => ConditionType.Virtual;    }        public class StockHoldingUnionGenerator : AutoEntityUnionGenerator<IStockHolding>    {        protected override void Configure()        {            AddTable<StockMovement>();        }        public override bool Distinct => true;        public override Column<IStockHolding>[] IDColumns => new Column<IStockHolding>[]        {            new Column<IStockHolding>(x => x.Job.ID),            new Column<IStockHolding>(x => x.Location.ID),            new Column<IStockHolding>(x => x.Product.ID),            new Column<IStockHolding>(x => x.Style.ID),            new Column<IStockHolding>(x => x.Dimensions.Unit.ID),            new Column<IStockHolding>(x => x.Dimensions.Quantity),            new Column<IStockHolding>(x => x.Dimensions.Length),            new Column<IStockHolding>(x => x.Dimensions.Width),            new Column<IStockHolding>(x => x.Dimensions.Height),            new Column<IStockHolding>(x => x.Dimensions.Weight),        };    }        [UserTracking(typeof(StockMovement))]    [AutoEntity(typeof(StockHoldingUnionGenerator))]    public class StockHolding : StockEntity, IRemotable, IPersistent, IOneToMany<StockLocation>, IOneToMany<Product>,         IStockHolding, ILicense<WarehouseLicense>    {                public override ProductLink Product { get; set; }        public ProductStyleLink Style { get; set; }        public StockLocationLink Location { get; set; }        public JobLink Job { get; set; }        [RequiredColumn]        [DimensionsEditor(typeof(StockDimensions), AllowEditingUnit = false)]        public override StockDimensions Dimensions { get; set; }        [Condition(typeof(StockHoldingIsRemnantCondition))]        public bool IsRemnant { get; set; }                [Aggregate(typeof(StockHoldingUnitAggregate))]        [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)]        public double Units { get; set; }                [Aggregate(typeof(StockHoldingQuantityAggregate))]        [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)]        public double Qty { get; set; }                [Formula(typeof(StockHoldingWeightFormula))]        public double Weight { get; set; }                //[DoubleEditor(Editable = Editable.Disabled)]        /*[NullEditor]        [Obsolete("Replaced with Dimensions", true)]        public double UnitSize { get; set; }*/                protected override void Init()        {            base.Init();            Location = new StockLocationLink();            Job = new JobLink();            Style = new ProductStyleLink();        }    }}
 |