123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using InABox.Core;
- namespace Comal.Classes
- {
- [AutoEntity(typeof(StockHoldingSummaryGenerator))]
- [UserTracking(typeof(StockMovement))]
- public class StockHolding : StockEntity, IRemotable, IPersistent, IOneToMany<StockLocation>, IOneToMany<Product>,
- IStockHolding, ILicense<WarehouseLicense>
- {
- [Editable(Editable.Disabled)]
- [EditorSequence(1)]
- public StockLocationLink Location { get; set; }
-
- private class ProductLookupGenerator : LookupDefinitionGenerator<Product, StockHolding>
- {
- public override Filter<Product>? DefineFilter(StockHolding[] items)
- => LookupFactory.DefineFilter<Product>().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<StockHolding, double>
- {
- public override IComplexFormulaNode<StockHolding, double> 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<IStockHolding>[] Columns => 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),
- };
-
- public static Filter<StockMovement>? GetFilter(IStockHolding holding)
- {
- var filter = new Filters<StockMovement>();
-
- foreach(var column in Columns)
- {
- filter.Add(new Filter<StockMovement>(column.Cast<StockMovement>()).IsEqualTo(CoreUtils.GetPropertyValue(holding, column.Property)));
- }
-
- return filter.Combine();
- }
-
- }
- }
|