PurchaseOrderItemLookups.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using InABox.Core;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace Comal.Classes
  6. {
  7. public class PurchaseOrderItemLookups : EntityLookup<PurchaseOrderItem>, ILookupDefinition<PurchaseOrderItem, BillLine>
  8. {
  9. public override Columns<PurchaseOrderItem> DefineColumns()
  10. {
  11. return new Columns<PurchaseOrderItem>(
  12. x => x.ID,
  13. x => x.PurchaseOrderLink.PONumber,
  14. x => x.Product.Code,
  15. x => x.Description,
  16. x => x.Qty,
  17. x => x.ExTax,
  18. x => x.TaxCode.ID,
  19. x => x.TaxCode.Code,
  20. x => x.TaxCode.Description,
  21. x => x.TaxCode.Rate,
  22. x => x.TaxRate,
  23. x => x.IncTax
  24. );
  25. }
  26. public override string FormatLookup(Dictionary<string, object?> values, IEnumerable<string> exclude)
  27. {
  28. return Guid.Equals(values["ID"],Guid.Empty)
  29. ? ""
  30. : $"{values["PurchaseOrderLink.PONumber"]}: {values["Qty"]} x {values["Description"]}";
  31. }
  32. public override Filter<PurchaseOrderItem>? DefineFilter()
  33. {
  34. return null;
  35. }
  36. public Filter<PurchaseOrderItem> DefineFilter(BillLine[] items)
  37. {
  38. if (!items.Any())
  39. return new Filter<PurchaseOrderItem>().None();
  40. var supplierID = items.Select(x => x.BillLink.SupplierLink.ID).Distinct().SingleOrDefault();
  41. if(supplierID == Guid.Empty)
  42. return new Filter<PurchaseOrderItem>().None();
  43. return new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.SupplierLink.ID).IsEqualTo(supplierID)
  44. .And(x=>x.BillLine.ID).IsEqualTo(Guid.Empty);
  45. }
  46. public Columns<BillLine> DefineFilterColumns()
  47. {
  48. return new Columns<BillLine>(x => x.BillLink.SupplierLink.ID);
  49. }
  50. public override SortOrder<PurchaseOrderItem> DefineSortOrder()
  51. {
  52. return new SortOrder<PurchaseOrderItem>(x => x.PurchaseOrderLink.PONumber).ThenBy(x => x.Created);
  53. }
  54. }
  55. }