PurchaseOrderItemLookups.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. ILookupDefinition<PurchaseOrderItem, JobRequisitionItemPurchaseOrderItem>
  9. {
  10. public override Columns<PurchaseOrderItem> DefineColumns()
  11. {
  12. return new Columns<PurchaseOrderItem>(
  13. x => x.ID,
  14. x => x.PurchaseOrderLink.PONumber,
  15. x => x.Product.Code,
  16. x => x.Description,
  17. x => x.Qty,
  18. x => x.ExTax,
  19. x => x.TaxCode.ID,
  20. x => x.TaxCode.Code,
  21. x => x.TaxCode.Description,
  22. x => x.TaxCode.Rate,
  23. x => x.TaxRate,
  24. x => x.IncTax
  25. );
  26. }
  27. public override string FormatLookup(Dictionary<string, object?> values, IEnumerable<string> exclude)
  28. {
  29. return Guid.Equals(values["ID"],Guid.Empty)
  30. ? ""
  31. : $"{values["PurchaseOrderLink.PONumber"]}: {values["Qty"]} x {values["Description"]}";
  32. }
  33. public override Filter<PurchaseOrderItem>? DefineFilter()
  34. {
  35. return null;
  36. }
  37. public Filter<PurchaseOrderItem> DefineFilter(BillLine[] items)
  38. {
  39. if (!items.Any())
  40. return new Filter<PurchaseOrderItem>().None();
  41. var supplierID = items.Select(x => x.BillLink.SupplierLink.ID).Distinct().SingleOrDefault();
  42. if(supplierID == Guid.Empty)
  43. return new Filter<PurchaseOrderItem>().None();
  44. return new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.SupplierLink.ID).IsEqualTo(supplierID)
  45. .And(x=>x.BillLine.ID).IsEqualTo(Guid.Empty);
  46. }
  47. public Columns<BillLine> DefineFilterColumns()
  48. {
  49. return new Columns<BillLine>(x => x.BillLink.SupplierLink.ID);
  50. }
  51. public override SortOrder<PurchaseOrderItem> DefineSortOrder()
  52. {
  53. return new SortOrder<PurchaseOrderItem>(x => x.PurchaseOrderLink.PONumber).ThenBy(x => x.Created);
  54. }
  55. public Filter<PurchaseOrderItem>? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items)
  56. {
  57. var jobs = items.Select(x => x.JobRequisitionItem.Job.ID).Distinct().ToArray();
  58. var products = items.Select(x => x.JobRequisitionItem.Product.ID).Distinct().ToArray();
  59. if(jobs.Length == 1 && products.Length == 1)
  60. {
  61. return new Filter<PurchaseOrderItem>(x => x.Job.ID).IsEqualTo(jobs.First())
  62. .And(x => x.Product.ID).IsEqualTo(products.First());
  63. }
  64. {
  65. return new Filter<PurchaseOrderItem>().None();
  66. }
  67. }
  68. Columns<JobRequisitionItemPurchaseOrderItem> ILookupDefinition<PurchaseOrderItem, JobRequisitionItemPurchaseOrderItem>.DefineFilterColumns() =>
  69. new Columns<JobRequisitionItemPurchaseOrderItem>(x => x.JobRequisitionItem.Job.ID)
  70. .Add(x => x.JobRequisitionItem.Product.ID);
  71. }
  72. }