using InABox.Core; using System; using System.Collections.Generic; using System.Linq; namespace Comal.Classes { public class PurchaseOrderItemLookups : EntityLookup, ILookupDefinition, ILookupDefinition { public override Columns DefineColumns() { return new Columns( x => x.ID, x => x.PurchaseOrderLink.PONumber, x => x.Product.Code, x => x.Description, x => x.Qty, x => x.ExTax, x => x.TaxCode.ID, x => x.TaxCode.Code, x => x.TaxCode.Description, x => x.TaxCode.Rate, x => x.TaxRate, x => x.IncTax ); } public override string FormatLookup(Dictionary values, IEnumerable exclude) { return Guid.Equals(values["ID"],Guid.Empty) ? "" : $"{values["PurchaseOrderLink.PONumber"]}: {values["Qty"]} x {values["Description"]}"; } public override Filter? DefineFilter() { return null; } public Filter DefineFilter(BillLine[] items) { if (!items.Any()) return new Filter().None(); var supplierID = items.Select(x => x.BillLink.SupplierLink.ID).Distinct().SingleOrDefault(); if(supplierID == Guid.Empty) return new Filter().None(); return new Filter(x => x.PurchaseOrderLink.SupplierLink.ID).IsEqualTo(supplierID) .And(x=>x.BillLine.ID).IsEqualTo(Guid.Empty); } public Columns DefineFilterColumns() { return new Columns(x => x.BillLink.SupplierLink.ID); } public override SortOrder DefineSortOrder() { return new SortOrder(x => x.PurchaseOrderLink.PONumber).ThenBy(x => x.Created); } public Filter? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items) { var jobs = items.Select(x => x.JobRequisitionItem.Job.ID).Distinct().ToArray(); var products = items.Select(x => x.JobRequisitionItem.Product.ID).Distinct().ToArray(); if(jobs.Length == 1 && products.Length == 1) { return new Filter(x => x.Job.ID).IsEqualTo(jobs.First()) .And(x => x.Product.ID).IsEqualTo(products.First()); } { return new Filter().None(); } } Columns ILookupDefinition.DefineFilterColumns() => new Columns(x => x.JobRequisitionItem.Job.ID) .Add(x => x.JobRequisitionItem.Product.ID); } }