ProductLookups.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. public class ProductLookups : EntityLookup<Product>,
  8. ILookupDefinition<Product, StockMovement>,
  9. ILookupDefinition<Product, EmployeeProduct>,
  10. ILookupDefinition<Product, StagingManufacturingPacketTreatment>,
  11. ILookupDefinition<Product, ManufacturingTreatment>,
  12. ILookupDefinition<Product, BillLine>
  13. {
  14. // EmployeeProduct records also require a Default Location to pull from
  15. public Filter<Product> DefineFilter(EmployeeProduct[] items)
  16. {
  17. return DefineFilter().And(x => x.NonStock).IsEqualTo(false).And(x => x.DefaultLocation).LinkValid();
  18. }
  19. Columns<EmployeeProduct> ILookupDefinition<Product, EmployeeProduct>.DefineFilterColumns()
  20. => new Columns<EmployeeProduct>();
  21. // You should not be able to create a stock movement for a non-stock item
  22. public Filter<Product> DefineFilter(StockMovement[] items)
  23. {
  24. return DefineFilter().And(x => x.NonStock).IsEqualTo(false);
  25. }
  26. Columns<StockMovement> ILookupDefinition<Product, StockMovement>.DefineFilterColumns()
  27. => new Columns<StockMovement>();
  28. // Filters for Manufacturing Treament Codes
  29. public Filter<Product> DefineFilter(StagingManufacturingPacketTreatment[] items)
  30. {
  31. var jobs = items.Select(x => x.Packet.Job.ID).Distinct().ToArray();
  32. if(jobs.Length == 0)
  33. {
  34. return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true);
  35. }
  36. else
  37. {
  38. var jobStyleFilters = new Filters<JobStyle>();
  39. foreach(var job in jobs)
  40. {
  41. jobStyleFilters.Add(new Filter<JobStyle>(x => x.Job.ID).IsEqualTo(job));
  42. }
  43. return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true)
  44. .And(x => x.ID).InQuery(
  45. new Filter<ProductStyle>(x => x.ID).InQuery(jobStyleFilters.Combine(), x => x.Style.ID),
  46. x => x.ManufacturingTreatmentProduct.ID);
  47. }
  48. }
  49. Columns<StagingManufacturingPacketTreatment> ILookupDefinition<Product, StagingManufacturingPacketTreatment>.DefineFilterColumns()
  50. => new Columns<StagingManufacturingPacketTreatment>(x => x.Packet.Job.ID);
  51. // Filters for Manufacturing Treament Codes
  52. public Filter<Product> DefineFilter(ManufacturingTreatment[] items)
  53. {
  54. return DefineFilter().And(x => x.IsManufacturingTreatment).IsEqualTo(true);
  55. }
  56. Columns<ManufacturingTreatment> ILookupDefinition<Product, ManufacturingTreatment>.DefineFilterColumns()
  57. => new Columns<ManufacturingTreatment>();
  58. public override Columns<Product> DefineColumns()
  59. {
  60. return new Columns<Product>(
  61. x => x.ID,
  62. x => x.Code,
  63. x => x.Name,
  64. x => x.TaxCode.ID,
  65. x => x.PurchaseGL.ID,
  66. x => x.NettCost,
  67. x => x.DefaultInstance.Dimensions.Unit.ID,
  68. x => x.DefaultInstance.Dimensions.Unit.Code,
  69. x => x.DefaultInstance.Dimensions.Unit.Description,
  70. x => x.DefaultInstance.Dimensions.Unit.HasLength,
  71. x => x.DefaultInstance.Dimensions.Unit.HasHeight,
  72. x => x.DefaultInstance.Dimensions.Unit.HasQuantity,
  73. x => x.DefaultInstance.Dimensions.Unit.HasWeight,
  74. x => x.DefaultInstance.Dimensions.Unit.HasWidth,
  75. x => x.DefaultInstance.Dimensions.Unit.Formula,
  76. x => x.DefaultInstance.Dimensions.Unit.Format,
  77. x => x.DefaultInstance.Dimensions.Height,
  78. x => x.DefaultInstance.Dimensions.Length,
  79. x => x.DefaultInstance.Dimensions.Quantity,
  80. x => x.DefaultInstance.Dimensions.Weight,
  81. x => x.DefaultInstance.Dimensions.Width,
  82. x => x.DefaultInstance.Dimensions.Value,
  83. x => x.DefaultInstance.Dimensions.UnitSize
  84. );
  85. }
  86. public override string FormatLookup(Dictionary<string, object?> values, IEnumerable<string> exclude)
  87. {
  88. return $"{values["Name"]}";
  89. }
  90. public override Filter<Product> DefineFilter()
  91. {
  92. return new Filter<Product>(x => x.Expired).IsEqualTo(DateTime.MinValue);
  93. }
  94. public override SortOrder<Product> DefineSortOrder()
  95. {
  96. return new SortOrder<Product>(x => x.Code);
  97. }
  98. public Filter<Product> DefineFilter(BillLine[] items)
  99. {
  100. return new Filter<Product>(x => x.NonStock);
  101. }
  102. public Columns<BillLine> DefineFilterColumns()
  103. {
  104. return new Columns<BillLine>();
  105. }
  106. }
  107. }