| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | using System;using System.Collections.Generic;using System.Linq;using InABox.Clients;using InABox.Core;namespace Comal.Classes{    public class StockLocationLookups : EntityLookup<StockLocation>, ILookupDefinition<StockLocation, Product>,        ILookupDefinition<StockLocation, RequisitionItem>    {        // If there are multiple items, they must be all in the same warehouse        public Filter<StockLocation> DefineFilter(Product[] items)        {            var warehouses = items.Select(x => x.Warehouse.ID).Distinct().ToArray();            if (warehouses.Length == 1)                return new Filter<StockLocation>(x => x.Active).IsEqualTo(true).And(x => x.Warehouse.ID).IsEqualTo(warehouses.First());            return new Filter<StockLocation>(x => x.ID).IsEqualTo(CoreUtils.FullGuid);        }        Columns<Product> ILookupDefinition<StockLocation, Product>.DefineFilterColumns()            => new Columns<Product>(x => x.Warehouse.ID);        public Filter<StockLocation> DefineFilter(RequisitionItem[] items)        {            var productid = items.Select(x => x.Product.ID).FirstOrDefault();            var styleid = items.Select(x => x.Style.ID).FirstOrDefault();            var unitsize = items.Select(x => x.Dimensions.UnitSize).FirstOrDefault();            var result = new Filter<StockLocation>(x => x.ID).InQuery<StockHolding>(                new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(productid)                    .And(x=>x.Style.ID).IsEqualTo(styleid)                    .And(x=>x.Dimensions.UnitSize).IsEqualTo(unitsize)                    .And(x => x.Qty).IsGreaterThan(0.0F),                x => x.Location.ID);            return result;        }        Columns<RequisitionItem> ILookupDefinition<StockLocation, RequisitionItem>.DefineFilterColumns()            => new Columns<RequisitionItem>(x => x.Product.ID).Add(x => x.Style.ID);        public override Columns<StockLocation> DefineColumns()        {            return new Columns<StockLocation>            (                x => x.ID,                x => x.Code,                x => x.Area.Warehouse.Description,                x => x.Area.Description,                x => x.Description            );        }        public override Filter<StockLocation> DefineFilter()        {            return new Filter<StockLocation>(x => x.Active).IsEqualTo(true);        }        public override SortOrder<StockLocation> DefineSortOrder()        {            return new SortOrder<StockLocation>(x => x.Code);        }    }}
 |