StockLocationLookups.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using InABox.Clients;
  5. using InABox.Core;
  6. namespace Comal.Classes
  7. {
  8. public class StockLocationLookups : EntityLookup<StockLocation>, ILookupDefinition<StockLocation, Product>,
  9. ILookupDefinition<StockLocation, RequisitionItem>
  10. {
  11. // If there are multiple items, they must be all in the same warehouse
  12. public Filter<StockLocation> DefineFilter(Product[] items)
  13. {
  14. var warehouses = items.Select(x => x.Warehouse.ID).Distinct().ToArray();
  15. if (warehouses.Length == 1)
  16. return new Filter<StockLocation>(x => x.Active).IsEqualTo(true).And(x => x.Warehouse.ID).IsEqualTo(warehouses.First());
  17. return new Filter<StockLocation>(x => x.ID).IsEqualTo(CoreUtils.FullGuid);
  18. }
  19. Columns<Product> ILookupDefinition<StockLocation, Product>.DefineFilterColumns()
  20. => new Columns<Product>(x => x.Warehouse.ID);
  21. public Filter<StockLocation> DefineFilter(RequisitionItem[] items)
  22. {
  23. var productid = items.Select(x => x.Product.ID).FirstOrDefault();
  24. var styleid = items.Select(x => x.Style.ID).FirstOrDefault();
  25. var result =new Filter<StockLocation>(x => x.ID).InQuery<StockHolding>(
  26. new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(productid)
  27. .And(x=>x.Style.ID).IsEqualTo(styleid),
  28. x => x.Location.ID);
  29. return result;
  30. // var locationids = new Client<StockHolding>().Query(
  31. // new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(productid),
  32. // new Columns<StockHolding>(x => x.Location.ID)
  33. // ).Rows.Select(r => r.Get<StockHolding, Guid>(c => c.Location.ID)).Distinct().ToArray();
  34. // return new Filter<StockLocation>(x => x.ID).InList(locationids);
  35. }
  36. Columns<RequisitionItem> ILookupDefinition<StockLocation, RequisitionItem>.DefineFilterColumns()
  37. => new Columns<RequisitionItem>(x => x.Product.ID).Add(x => x.Style.ID);
  38. public override Columns<StockLocation> DefineColumns()
  39. {
  40. return new Columns<StockLocation>
  41. (
  42. x => x.ID,
  43. x => x.Code,
  44. x => x.Area.Warehouse.Description,
  45. x => x.Area.Description,
  46. x => x.Description
  47. );
  48. }
  49. public override Filter<StockLocation> DefineFilter()
  50. {
  51. return new Filter<StockLocation>(x => x.Active).IsEqualTo(true);
  52. }
  53. public override SortOrder<StockLocation> DefineSortOrder()
  54. {
  55. return new SortOrder<StockLocation>(x => x.Code);
  56. }
  57. public override string FormatLookup(Dictionary<string, object> values, IEnumerable<string> exclude)
  58. {
  59. return base.FormatLookup(values, exclude);
  60. }
  61. }
  62. }