StockMovementStore.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. namespace Comal.Stores
  6. {
  7. public class StockMovementStore : BaseStore<StockMovement>
  8. {
  9. protected override void BeforeSave(StockMovement entity)
  10. {
  11. base.BeforeSave(entity);
  12. EnsureHoldings(entity);
  13. EnsureJobMaterials(entity.Product, entity.Job, entity.Style, entity.Dimensions);
  14. }
  15. protected override void AfterSave(StockMovement entity)
  16. {
  17. base.AfterSave(entity);
  18. CleanupHoldings(entity, false);
  19. CleanupJobMaterials(entity.ID, entity.Product, entity.Job, entity.Style, entity.Dimensions, true);
  20. }
  21. protected override void BeforeDelete(StockMovement entity)
  22. {
  23. base.BeforeDelete(entity);
  24. var delete = Provider.Query(
  25. new Filter<StockMovement>(x => x.ID).IsEqualTo(entity.ID),
  26. new Columns<StockMovement>(x => x.ID)
  27. .Add(x => x.Product.ID)
  28. .Add(x => x.Location.ID)
  29. .Add(x => x.Job.ID)
  30. .Add(x => x.Style.ID)
  31. .Add(x => x.Dimensions.Unit.ID)
  32. .Add(x => x.Dimensions.Length)
  33. .Add(x => x.Dimensions.Width)
  34. .Add(x => x.Dimensions.Height)
  35. .Add(x => x.Dimensions.Weight)
  36. ).Rows.FirstOrDefault()?.ToObject<StockMovement>();
  37. CleanupHoldings(delete, true);
  38. CleanupJobMaterials(entity.ID, delete.Product, delete.Job, delete.Style, delete.Dimensions, true);
  39. }
  40. private void EnsureHoldings(StockMovement entity)
  41. {
  42. // var holdings = Provider.List(
  43. // new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(entity.Product.ID)
  44. // .And(x => x.Location.ID).IsEqualTo(entity.Location.ID)
  45. // .And(x => x.Job.ID).IsEqualTo(entity.Job.ID)
  46. // .And(x => x.Style.ID).IsEqualTo(entity.Style.ID)
  47. // .And(x => x.Dimensions.Unit.ID).IsEqualTo(entity.Dimensions.Unit.ID)
  48. // .And(x => x.Dimensions.Length).IsEqualTo(entity.Dimensions.Length)
  49. // .And(x => x.Dimensions.Width).IsEqualTo(entity.Dimensions.Width)
  50. // .And(x => x.Dimensions.Height).IsEqualTo(entity.Dimensions.Height)
  51. // .And(x => x.Dimensions.Weight).IsEqualTo(entity.Dimensions.Weight)
  52. // ,
  53. // new Columns<StockHolding>(x => x.ID)
  54. // );
  55. // if (!holdings.Any())
  56. // {
  57. // var holding = new StockHolding();
  58. // holding.Product.ID = entity.Product.ID;
  59. // holding.Location.ID = entity.Location.ID;
  60. // holding.Job.ID = entity.Job.ID;
  61. // holding.Style.ID = entity.Style.ID;
  62. // holding.Dimensions.CopyFrom(entity.Dimensions);
  63. // Provider.Save(holding);
  64. // }
  65. //
  66. // var jobmaterials = Provider.List(
  67. // new Filter<JobMaterial>(x => x.Product.ID).IsEqualTo(entity.Product.ID)
  68. // .And(x => x.Job.ID).IsEqualTo(entity.Job.ID)
  69. // .And(x => x.Style.ID).IsEqualTo(entity.Style.ID)
  70. // .And(x => x.Dimensions.Unit.ID).IsEqualTo(entity.Dimensions.Unit.ID)
  71. // .And(x => x.Dimensions.Length).IsEqualTo(entity.Dimensions.Length)
  72. // .And(x => x.Dimensions.Width).IsEqualTo(entity.Dimensions.Width)
  73. // .And(x => x.Dimensions.Height).IsEqualTo(entity.Dimensions.Height)
  74. // .And(x => x.Dimensions.Weight).IsEqualTo(entity.Dimensions.Weight)
  75. // ,
  76. // new Columns<JobMaterial>(x => x.ID)
  77. // );
  78. // if (!jobmaterials.Any())
  79. // {
  80. // var material = new JobMaterial();
  81. // material.Product.ID = entity.Product.ID;
  82. // material.Job.ID = entity.Job.ID;
  83. // material.Style.ID = entity.Style.ID;
  84. // material.Dimensions.CopyFrom(entity.Dimensions);
  85. // Provider.Save(material);
  86. // }
  87. }
  88. private void CleanupHoldings(StockMovement entity, bool delete)
  89. {
  90. // var isNew = !delete && entity.HasOriginalValue(x => x.ID) && entity.Product.GetOriginalValue(x => x.ID) == Guid.Empty;
  91. // if (isNew)
  92. // return;
  93. // var hasProduct = !delete && entity.Product.HasOriginalValue(x=>x.ID);
  94. // var hasLocation = !delete && entity.Location.HasOriginalValue(x=>x.ID);
  95. // var hasJob = !delete && entity.Job.HasOriginalValue(x=>x.ID);
  96. // var hasStyle = !delete && entity.Style.HasOriginalValue(x=>x.ID);
  97. // var hasDimensionUnit = !delete && entity.Dimensions.Unit.HasOriginalValue(x=>x.ID);
  98. // var hasLength = !delete && entity.Dimensions.HasOriginalValue(x=>x.Length);
  99. // var hasWidth = !delete && entity.Dimensions.HasOriginalValue(x=>x.Width);
  100. // var hasHeight = !delete && entity.Dimensions.HasOriginalValue(x=>x.Height);
  101. // var hasWeight = !delete && entity.Dimensions.HasOriginalValue(x=>x.Weight);
  102. //
  103. // if (delete || hasProduct || hasLocation || hasJob || hasStyle || hasDimensionUnit || hasLength || hasWidth || hasHeight || hasWeight)
  104. // {
  105. // var product = hasProduct ? entity.Product.GetOriginalValue(x=>x.ID) : entity.Product.ID;
  106. // var location = hasLocation ? entity.Location.GetOriginalValue(x=>x.ID) : entity.Location.ID;
  107. // var job = hasJob ? entity.Job.GetOriginalValue(x=>x.ID) : entity.Job.ID;
  108. // var style = hasStyle ? entity.Style.GetOriginalValue(x=>x.ID) : entity.Style.ID;
  109. // var dimensionUnit = hasDimensionUnit ? entity.Dimensions.Unit.GetOriginalValue(x=>x.ID) : entity.Dimensions.Unit.ID;
  110. // var length = hasLength ? entity.Dimensions.GetOriginalValue(x=>x.Length) : entity.Dimensions.Length;
  111. // var width = hasWidth ? entity.Dimensions.GetOriginalValue(x=>x.Width) : entity.Dimensions.Width;
  112. // var height = hasHeight ? entity.Dimensions.GetOriginalValue(x=>x.Height) : entity.Dimensions.Height;
  113. // var weight = hasWeight ? entity.Dimensions.GetOriginalValue(x=>x.Weight) : entity.Dimensions.Weight;
  114. //
  115. // var movements = Provider.Query(
  116. // new Filter<StockMovement>(X => X.ID).IsNotEqualTo(entity.ID)
  117. // .And(x => x.Product.ID).IsEqualTo(product)
  118. // .And(x=>x.Location.ID).IsEqualTo(location)
  119. // .And(x => x.Job.ID).IsEqualTo(job)
  120. // .And(x => x.Style.ID).IsEqualTo(style)
  121. // .And(x => x.Dimensions.Unit.ID).IsEqualTo(dimensionUnit)
  122. // .And(x => x.Dimensions.Length).IsEqualTo(length)
  123. // .And(x => x.Dimensions.Width).IsEqualTo(width)
  124. // .And(x => x.Dimensions.Height).IsEqualTo(height)
  125. // .And(x => x.Dimensions.Weight).IsEqualTo(weight),
  126. // new Columns<StockMovement>(x => x.Location.ID)
  127. // );
  128. //
  129. // if (!movements.Rows.Any())
  130. // {
  131. // var holdings = Provider.Query(
  132. // new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(product)
  133. // .And(x => x.Location.ID).IsEqualTo(location)
  134. // .And(x => x.Job.ID).IsEqualTo(job)
  135. // .And(x => x.Style.ID).IsEqualTo(style)
  136. // .And(x => x.Dimensions.Unit.ID).IsEqualTo(dimensionUnit)
  137. // .And(x => x.Dimensions.Length).IsEqualTo(length)
  138. // .And(x => x.Dimensions.Width).IsEqualTo(width)
  139. // .And(x => x.Dimensions.Height).IsEqualTo(height)
  140. // .And(x => x.Dimensions.Weight).IsEqualTo(weight),
  141. // new Columns<StockHolding>(x => x.ID)
  142. // ).Rows.Select(r => r.ToObject<StockHolding>());
  143. //
  144. // // should only ever be one, but lets clean up anyways
  145. // foreach (var holding in holdings)
  146. // Provider.Delete(holding);
  147. // }
  148. //
  149. // }
  150. }
  151. }
  152. }