using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; using InABox.Core; namespace Comal.Classes { // public class StockSummaryBOMAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Quantity; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Product.ID, StockSummary => StockSummary.Product.ID }, // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Style.ID, StockSummary => StockSummary.Style.ID }, // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // // public override Filter Filter => // new Filter(x => x.BillOfMaterials.Approved).IsNotEqualTo(DateTime.MinValue); // } // // public class StockSummaryTotalRequiredAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Qty; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockSummaryRequisitionItem => StockSummaryRequisitionItem.Product.ID, StockSummary => StockSummary.Product.ID }, // { StockSummaryRequisitionItem => StockSummaryRequisitionItem.Style.ID, StockSummary => StockSummary.Style.ID }, // { StockSummaryRequisitionItem => StockSummaryRequisitionItem.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // // public override Filter Filter => // new Filter(x => x.Requisition.Approved).IsNotEqualTo(DateTime.MinValue); // // } // // public class StockSummaryOrderAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Qty; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { PurchaseOrderItem => PurchaseOrderItem.Product.ID, StockSummary => StockSummary.Product.ID }, // { PurchaseOrderItem => PurchaseOrderItem.Style.ID, StockSummary => StockSummary.Style.ID }, // { PurchaseOrderItem => PurchaseOrderItem.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // // public override Filter Filter => new Filter(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue); // } // // public class StockSummaryOrderValue : CoreAggregate // { // public override Expression> Aggregate => x => x.ExTax; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { PurchaseOrderItem => PurchaseOrderItem.Product.ID, StockSummary => StockSummary.Product.ID }, // { PurchaseOrderItem => PurchaseOrderItem.Style.ID, StockSummary => StockSummary.Style.ID }, // { PurchaseOrderItem => PurchaseOrderItem.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // // public override Filter Filter => new Filter(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue); // } // // public class StockSummaryReceivedAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Received; // // public override Filter Filter => new Filter(x => x.IsTransfer).IsEqualTo(false); // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockMovement => StockMovement.Product.ID, StockSummary => StockSummary.Product.ID }, // { StockMovement => StockMovement.Style.ID, StockSummary => StockSummary.Style.ID }, // { StockMovement => StockMovement.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // } // // public class StockSummaryIssuedAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Issued; // // public override Filter Filter => new Filter(x => x.IsTransfer).IsEqualTo(false); // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockMovement => StockMovement.Product.ID, StockSummary => StockSummary.Product.ID }, // { StockMovement => StockMovement.Style.ID, StockSummary => StockSummary.Style.ID }, // { StockMovement => StockMovement.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // } // // public class StockSummaryBalanceRequiredFormula : IFormula // { // public Expression> Value => x => x.TotalRequired; // public Expression>[] Modifiers => new Expression>[] { x => x.Issued }; // public FormulaOperator Operator => FormulaOperator.Subtract; // public FormulaType Type => FormulaType.Virtual; // } // // public class StockSummaryReservedStockAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Units; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockMovement => StockMovement.Product.ID, StockSummary => StockSummary.Product.ID }, // { StockMovement => StockMovement.Style.ID, StockSummary => StockSummary.Style.ID }, // { StockMovement => StockMovement.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // } // // public class StockSummaryFreeStockAggregate : CoreAggregate // { // public override Expression> Aggregate => x => x.Units; // // public override AggregateCalculation Calculation => AggregateCalculation.Sum; // // public override Filter Filter => new Filter(x => x.Job).NotLinkValid().Or(x=>x.Job.JobStatus.Active).IsEqualTo(false); // // public override Dictionary>, Expression>> Links => // new Dictionary>, Expression>>() // { // { StockMovement => StockMovement.Product.ID, StockSummary => StockSummary.Product.ID }, // //{ StockMovement => StockMovement.Style.ID, StockSummary => StockSummary.Style.ID }, // //{ StockMovement => StockMovement.Dimensions.UnitSize, StockSummary => StockSummary.Dimensions.UnitSize } // }; // } // // public interface IStockSummary // { // // ProductLink Product { get; set; } // // ProductStyleLink Style { get; set; } // // StockDimensions Dimensions { get; set; } // } // // public class StockSummaryUnionGenerator : AutoEntityUnionGenerator // { // protected override void Configure() // { // AddTable(new Filter(x=>x.Job.JobStatus.Active).IsEqualTo(true)); // AddTable(new Filter(x=>x.Job.JobStatus.Active).IsEqualTo(true)); // AddTable(new Filter(x=>x.Job.JobStatus.Active).IsEqualTo(true)); // AddTable(new Filter(x=>x.Job.JobStatus.Active).IsEqualTo(true)); // } // // public override bool Distinct => true; // // public override Column[] IDColumns => new Column[] // { // 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) // }; // } // // // [UserTracking(typeof(Product))] // [AutoEntity(typeof(StockSummaryUnionGenerator))] // public class StockSummary : StockEntity, IStockSummary, IRemotable, IPersistent, ILicense/* , IDimensioned */ // { // // [EditorSequence(1)] // public override ProductLink Product { get; set; } // // [EditorSequence(2)] // public ProductStyleLink Style { get; set; } // // [NullEditor] // [Obsolete("Replaced with Dimensions", true)] // public double UnitSize { get; set; } // // [EditorSequence(3)] // [RequiredColumn] // [DimensionsEditor(typeof(StockDimensions), AllowEditingUnit = false)] // public override StockDimensions Dimensions { get; set; } // // [EditorSequence(4)] // [DoubleEditor] // [Aggregate(typeof(StockSummaryBOMAggregate))] // public double BillOfMaterials { get; set; } // // [EditorSequence(5)] // [DoubleEditor] // [Aggregate(typeof(StockSummaryTotalRequiredAggregate))] // public double TotalRequired { get; set; } // // [EditorSequence(6)] // [DoubleEditor] // [Aggregate(typeof(StockSummaryOrderAggregate))] // public double OnOrder { get; set; } // // [EditorSequence(7)] // [DoubleEditor] // [Aggregate(typeof(StockSummaryOrderValue))] // public double OrderValue { get; set; } // // [EditorSequence(8)] // [Aggregate(typeof(StockSummaryReceivedAggregate))] // [DoubleEditor(Editable = Editable.Hidden)] // public double Received { get; set; } // // [EditorSequence(9)] // [Aggregate(typeof(StockSummaryIssuedAggregate))] // [DoubleEditor(Editable = Editable.Hidden)] // public double Issued { get; set; } // // [EditorSequence(10)] // [DoubleEditor] // [Formula(typeof(StockSummaryBalanceRequiredFormula))] // public double BalanceRequired { get; set; } // // [EditorSequence(11)] // [Aggregate(typeof(StockSummaryReservedStockAggregate))] // [DoubleEditor(Editable = Editable.Hidden)] // public double ReservedStock { get; set; } // // [EditorSequence(12)] // [Aggregate(typeof(StockSummaryFreeStockAggregate))] // [DoubleEditor(Editable = Editable.Hidden)] // public double FreeStock { get; set; } // // protected override void Init() // { // base.Init(); // Style = new ProductStyleLink(); // } // // } }