using System; using System.Collections.Generic; using System.Linq; using InABox.Core; namespace Comal.Classes { public class ProductLookups : EntityLookup, ILookupDefinition, ILookupDefinition, ILookupDefinition, ILookupDefinition, ILookupDefinition { // EmployeeProduct records also require a Default Location to pull from public Filter DefineFilter(EmployeeProduct[] items) { return DefineFilter().And(x => x.NonStock).IsEqualTo(false).And(x => x.DefaultLocation).LinkValid(); } Columns ILookupDefinition.DefineFilterColumns() => new Columns(); // You should not be able to create a stock movement for a non-stock item public Filter DefineFilter(StockMovement[] items) { return DefineFilter().And(x => x.NonStock).IsEqualTo(false); } Columns ILookupDefinition.DefineFilterColumns() => new Columns(); // Filters for Manufacturing Treament Codes public Filter DefineFilter(StagingManufacturingPacketTreatment[] items) { var jobs = items.Select(x => x.Packet.Job.ID).Distinct().ToArray(); if(jobs.Length == 0) { return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true); } else { var jobStyleFilters = new Filters(); foreach(var job in jobs) { jobStyleFilters.Add(new Filter(x => x.Job.ID).IsEqualTo(job)); } return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true) .And(x => x.ID).InQuery( new Filter(x => x.ID).InQuery(jobStyleFilters.Combine(), x => x.Style.ID), x => x.ManufacturingTreatmentProduct.ID); } } Columns ILookupDefinition.DefineFilterColumns() => new Columns(x => x.Packet.Job.ID); // Filters for Manufacturing Treament Codes public Filter DefineFilter(ManufacturingTreatment[] items) { return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true); } Columns ILookupDefinition.DefineFilterColumns() => new Columns(); public override Columns DefineColumns() { return new Columns( x => x.ID, x => x.Code, x => x.Name, x => x.TaxCode.ID, x => x.PurchaseGL.ID, x => x.NettCost, x => x.DefaultInstance.Dimensions.Unit.ID, x => x.DefaultInstance.Dimensions.Unit.Code, x => x.DefaultInstance.Dimensions.Unit.Description, x => x.DefaultInstance.Dimensions.Unit.HasLength, x => x.DefaultInstance.Dimensions.Unit.HasHeight, x => x.DefaultInstance.Dimensions.Unit.HasQuantity, x => x.DefaultInstance.Dimensions.Unit.HasWeight, x => x.DefaultInstance.Dimensions.Unit.HasWidth, x => x.DefaultInstance.Dimensions.Unit.Formula, x => x.DefaultInstance.Dimensions.Unit.Format, x => x.DefaultInstance.Dimensions.Height, x => x.DefaultInstance.Dimensions.Length, x => x.DefaultInstance.Dimensions.Quantity, x => x.DefaultInstance.Dimensions.Weight, x => x.DefaultInstance.Dimensions.Width, x => x.DefaultInstance.Dimensions.Value, x => x.DefaultInstance.Dimensions.UnitSize ); } public override string FormatLookup(Dictionary values, IEnumerable exclude) { return $"{values["Name"]}"; } public override Filter DefineFilter() { return new Filter(x => x.Expired).IsEqualTo(DateTime.MinValue); } public override SortOrder DefineSortOrder() { return new SortOrder(x => x.Code); } public Filter DefineFilter(BillLine[] items) { return new Filter(x => x.NonStock); } public Columns DefineFilterColumns() { return new Columns(); } } }