StockHoldingLookups.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. public class StockHoldingLookups : EntityLookup<StockHolding>, ILookupDefinition<StockHolding, RequisitionItem>
  8. {
  9. public Filter<StockHolding> DefineFilter(RequisitionItem[] items)
  10. {
  11. var item = items?.SingleOrDefault();
  12. if (item == null)
  13. return DefineFilter();
  14. return new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(item.Product.ID)
  15. .And(x => x.Style.ID).IsEqualTo(item.Style.ID)
  16. .And(x => x.Qty).IsGreaterThan(0.0F);
  17. }
  18. Columns<RequisitionItem> ILookupDefinition<StockHolding, RequisitionItem>.DefineFilterColumns()
  19. => new Columns<RequisitionItem>(x => x.Product.ID).Add(x => x.Style.ID);
  20. public override Columns<StockHolding> DefineColumns()
  21. {
  22. return base.DefineColumns()
  23. .Add(x => x.Location.Code)
  24. .Add(x => x.Location.Description)
  25. .Add(x => x.Style.Description)
  26. .Add(x => x.Job.JobNumber)
  27. .Add(x => x.Units)
  28. .Add(x => x.Dimensions.UnitSize);
  29. }
  30. private bool HasValue(Dictionary<string, object?> values, string key)
  31. {
  32. return values.ContainsKey(key) && values[key] != null && !string.IsNullOrWhiteSpace(values[key] as string);
  33. }
  34. public override string FormatLookup(Dictionary<string, object?> values, IEnumerable<string> exclude)
  35. {
  36. var result = new StringBuilder();
  37. result.AppendFormat("{0}: {1} @ {2} {3}", values["Location.Description"], values["Units"], values["UnitSize"],
  38. values["Product.Units.Description"]);
  39. if (HasValue(values, "Style.Description"))
  40. result.AppendFormat(" ({0})", values["Style.Description"]);
  41. if (HasValue(values, "Job.JobNumber"))
  42. result.AppendFormat(" - Job {0}", values["Job.JobNumber"]);
  43. return result.ToString();
  44. }
  45. public override Filter<StockHolding> DefineFilter()
  46. {
  47. return new Filter<StockHolding>(x => x.ID).IsEqualTo(CoreUtils.FullGuid);
  48. }
  49. public override SortOrder<StockHolding> DefineSortOrder()
  50. {
  51. return new SortOrder<StockHolding>(x => x.Location.Code).ThenBy(x => x.Job.JobNumber);
  52. }
  53. }
  54. }