StockLocationLookups.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. public Filter<StockLocation> DefineFilter(RequisitionItem[] items)
  20. {
  21. var productid = items.Select(x => x.Product.ID).FirstOrDefault();
  22. var styleid = items.Select(x => x.Style.ID).FirstOrDefault();
  23. var result =new Filter<StockLocation>(x => x.ID).InQuery<StockHolding>(
  24. new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(productid)
  25. .And(x=>x.Style.ID).IsEqualTo(styleid),
  26. x => x.Location.ID);
  27. return result;
  28. // var locationids = new Client<StockHolding>().Query(
  29. // new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(productid),
  30. // new Columns<StockHolding>(x => x.Location.ID)
  31. // ).Rows.Select(r => r.Get<StockHolding, Guid>(c => c.Location.ID)).Distinct().ToArray();
  32. // return new Filter<StockLocation>(x => x.ID).InList(locationids);
  33. }
  34. public override Columns<StockLocation> DefineColumns()
  35. {
  36. return new Columns<StockLocation>
  37. (
  38. x => x.ID,
  39. x => x.Code,
  40. x => x.Area.Warehouse.Description,
  41. x => x.Area.Description,
  42. x => x.Description
  43. );
  44. }
  45. public override Filter<StockLocation> DefineFilter()
  46. {
  47. return new Filter<StockLocation>(x => x.Active).IsEqualTo(true);
  48. }
  49. public override SortOrder<StockLocation> DefineSortOrder()
  50. {
  51. return new SortOrder<StockLocation>(x => x.Code);
  52. }
  53. public override string FormatLookup(Dictionary<string, object> values, IEnumerable<string> exclude)
  54. {
  55. return base.FormatLookup(values, exclude);
  56. }
  57. }
  58. }