using System; using System.Collections.Generic; using System.Linq; using InABox.Clients; using InABox.Core; namespace Comal.Classes { public class StockLocationLookups : EntityLookup, ILookupDefinition, ILookupDefinition { // If there are multiple items, they must be all in the same warehouse public Filter DefineFilter(Product[] items) { var warehouses = items.Select(x => x.Warehouse.ID).Distinct().ToArray(); if (warehouses.Length == 1) return new Filter(x => x.Active).IsEqualTo(true).And(x => x.Warehouse.ID).IsEqualTo(warehouses.First()); return new Filter(x => x.ID).IsEqualTo(CoreUtils.FullGuid); } Columns ILookupDefinition.DefineFilterColumns() => new Columns(x => x.Warehouse.ID); public Filter 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(x => x.ID).InQuery( new Filter(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 ILookupDefinition.DefineFilterColumns() => new Columns(x => x.Product.ID).Add(x => x.Style.ID); public override Columns DefineColumns() { return new Columns ( x => x.ID, x => x.Code, x => x.Area.Warehouse.Description, x => x.Area.Description, x => x.Description ); } public override Filter DefineFilter() { return new Filter(x => x.Active).IsEqualTo(true); } public override SortOrder DefineSortOrder() { return new SortOrder(x => x.Code); } } }