StockSummary.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Runtime.CompilerServices;
  6. using InABox.Core;
  7. namespace Comal.Classes
  8. {
  9. // public class StockSummaryBOMAggregate : CoreAggregate<StockSummary, JobBillOfMaterialsItem, double>
  10. // {
  11. // public override Expression<Func<JobBillOfMaterialsItem, double>> Aggregate => x => x.Quantity;
  12. //
  13. // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  14. //
  15. // public override Dictionary<Expression<Func<JobBillOfMaterialsItem, object?>>, Expression<Func<StockSummary, object?>>> Links =>
  16. // new Dictionary<Expression<Func<JobBillOfMaterialsItem, object?>>, Expression<Func<StockSummary, object?>>>()
  17. // {
  18. // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Job.ID, summary => summary.Job.ID },
  19. // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Product.ID, summary => summary.Product.ID },
  20. // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Style.ID, summary => summary.Style.ID },
  21. // }.AddRange(Dimensions.GetLinks<JobBillOfMaterialsItem, StockSummary>());
  22. //
  23. // public override Filter<JobBillOfMaterialsItem> Filter =>
  24. // new Filter<JobBillOfMaterialsItem>(x => x.BillOfMaterials.Approved).IsNotEqualTo(DateTime.MinValue);
  25. // }
  26. // public class StockSummaryMinimumStockAggregate : CoreAggregate<StockSummary, ProductInstance, int>
  27. // {
  28. // public override Expression<Func<ProductInstance, int>> Aggregate => x => x.MinimumStockLevel;
  29. //
  30. // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  31. //
  32. // public override Dictionary<Expression<Func<ProductInstance, object?>>, Expression<Func<StockSummary, object?>>> Links =>
  33. // new Dictionary<Expression<Func<ProductInstance, object?>>, Expression<Func<StockSummary, object?>>>()
  34. // {
  35. // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Product.ID, summary => summary.Product.ID },
  36. // { JobBillOfMaterialsItem => JobBillOfMaterialsItem.Style.ID, summary => summary.Style.ID },
  37. // }.AddRange(Dimensions.GetLinks<ProductInstance, StockSummary>());
  38. //
  39. // }
  40. //
  41. // public class StockSummaryIssuedAggregate : CoreAggregate<StockSummary, StockMovement, double>
  42. // {
  43. // public override Expression<Func<StockMovement, double>> Aggregate => x => x.Issued;
  44. //
  45. // public override Filter<StockMovement> Filter => new Filter<StockMovement>(x => x.Type).IsEqualTo(StockMovementType.Issue)
  46. // .And(x => x.Job.ID).IsNotEqualTo(Guid.Empty);
  47. //
  48. // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  49. //
  50. // public override Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<StockSummary, object?>>> Links =>
  51. // new Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<StockSummary, object?>>>()
  52. // {
  53. // { StockMovement => StockMovement.Job.ID, summary => summary.Job.ID },
  54. // { StockMovement => StockMovement.Product.ID, summary => summary.Product.ID },
  55. // { StockMovement => StockMovement.Style.ID, summary => summary.Style.ID },
  56. // }.AddRange(Dimensions.GetLinks<StockMovement, StockSummary>());
  57. // }
  58. //
  59. // public class StockSummaryTotalRequiredFormula : IFormula<StockSummary, double>
  60. // {
  61. // public Expression<Func<StockSummary, double>> Value => x => x.BillOfMaterials;
  62. //
  63. // public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
  64. // {
  65. // x => x.Issued
  66. // };
  67. //
  68. // public FormulaOperator Operator => FormulaOperator.Subtract;
  69. //
  70. // public FormulaType Type => FormulaType.Virtual;
  71. // }
  72. //
  73. // public class StockSummaryNettRequiredFormula : IFormula<StockSummary, double>
  74. // {
  75. // public Expression<Func<StockSummary, double>> Value => x => x.TotalRequired;
  76. //
  77. // public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
  78. // {
  79. // x => 0.0
  80. // };
  81. //
  82. // public FormulaOperator Operator => FormulaOperator.Maximum;
  83. //
  84. // public FormulaType Type => FormulaType.Virtual;
  85. // }
  86. //
  87. // public class StockSummaryAllStockAggregate : CoreAggregate<StockSummary, StockMovement, double>
  88. // {
  89. // public override Expression<Func<StockMovement, double>> Aggregate => x => x.Units;
  90. //
  91. // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  92. //
  93. // public override Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<StockSummary, object?>>> Links =>
  94. // new Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<StockSummary, object?>>>()
  95. // {
  96. // { StockMovement => StockMovement.Product.ID, summary => summary.Product.ID },
  97. // { StockMovement => StockMovement.Style.ID, summary => summary.Style.ID },
  98. // }.AddRange(Dimensions.GetLinks<StockMovement, StockSummary>());
  99. // }
  100. //
  101. // public class StockSummaryOrderAggregate : CoreAggregate<StockSummary, PurchaseOrderItem, double>
  102. // {
  103. // public override Expression<Func<PurchaseOrderItem, double>> Aggregate => x => x.Qty;
  104. //
  105. // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  106. //
  107. // public override Dictionary<Expression<Func<PurchaseOrderItem, object?>>, Expression<Func<StockSummary, object?>>> Links =>
  108. // new Dictionary<Expression<Func<PurchaseOrderItem, object?>>, Expression<Func<StockSummary, object?>>>()
  109. // {
  110. // { PurchaseOrderItem => PurchaseOrderItem.Product.ID, summary => summary.Product.ID },
  111. // { PurchaseOrderItem => PurchaseOrderItem.Style.ID, summary => summary.Style.ID },
  112. // }.AddRange(Dimensions.GetLinks<PurchaseOrderItem, StockSummary>());
  113. //
  114. // public override Filter<PurchaseOrderItem> Filter => new Filter<PurchaseOrderItem>(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue);
  115. // }
  116. //
  117. // public class StockSummaryTotalStockFormula : IFormula<StockSummary, double>
  118. // {
  119. // public Expression<Func<StockSummary, double>> Value => x => x.AllStock;
  120. //
  121. // public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
  122. // {
  123. // x => x.OnOrder
  124. // };
  125. //
  126. // public FormulaOperator Operator => FormulaOperator.Add;
  127. //
  128. // public FormulaType Type => FormulaType.Virtual;
  129. // }
  130. //
  131. // public class StockSummaryBalanceAvailableFormula : IFormula<StockSummary, double>
  132. // {
  133. // public Expression<Func<StockSummary, double>> Value => x => x.TotalStock;
  134. //
  135. // public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
  136. // {
  137. // x => x.MinimumStockLevel,
  138. // x => x.NettRequired
  139. // };
  140. //
  141. // public FormulaOperator Operator => FormulaOperator.Subtract;
  142. //
  143. // public FormulaType Type => FormulaType.Virtual;
  144. // }
  145. //
  146. // public class StockSummaryUnionGenerator : AutoEntityUnionGenerator<IJobMaterial>
  147. // {
  148. // protected override void Configure()
  149. // {
  150. // //
  151. // AddTable<ProductInstance>()
  152. // .AddConstant<object?>(x => x.Job.ID, Guid.Empty);
  153. //
  154. // // BOM
  155. // AddTable<JobBillOfMaterialsItem>(new Filter<JobBillOfMaterialsItem>(x => x.Job.ID).IsNotEqualTo(Guid.Empty));
  156. //
  157. // // Stock Issues
  158. // AddTable<StockMovement>(new Filter<StockMovement>(x => x.Job.ID).IsNotEqualTo(Guid.Empty).And(x=>x.Type).IsEqualTo(StockMovementType.Issue));
  159. //
  160. // // Stock Holdings
  161. // AddTable<StockHolding>();
  162. //
  163. // // On Order
  164. // AddTable<PurchaseOrderItem>(new Filter<PurchaseOrderItem>(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue));
  165. //
  166. // }
  167. //
  168. // public override bool Distinct => true;
  169. //
  170. // public override Column<IJobMaterial>[] IDColumns => new Column<IJobMaterial>[]
  171. // {
  172. // new Column<IJobMaterial>(x => x.Job.ID),
  173. // new Column<IJobMaterial>(x => x.Product.ID),
  174. // new Column<IJobMaterial>(x => x.Style.ID),
  175. // new Column<IJobMaterial>(x => x.Dimensions.Unit.ID),
  176. // new Column<IJobMaterial>(x => x.Dimensions.Quantity),
  177. // new Column<IJobMaterial>(x => x.Dimensions.Length),
  178. // new Column<IJobMaterial>(x => x.Dimensions.Width),
  179. // new Column<IJobMaterial>(x => x.Dimensions.Height),
  180. // new Column<IJobMaterial>(x => x.Dimensions.Weight)
  181. // };
  182. // }
  183. //
  184. // public class StockSummaryCalculatedField : IFormula<StockSummary, double>
  185. // {
  186. // public Expression<Func<StockSummary, double>> Value => x => 0.0;
  187. // public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[] { };
  188. // public FormulaOperator Operator => FormulaOperator.Constant;
  189. // public FormulaType Type => FormulaType.Virtual;
  190. // }
  191. //
  192. // public class StockSummaryCalculatedStringField : IFormula<StockSummary, string>
  193. // {
  194. // public Expression<Func<StockSummary, string>> Value => x => "";
  195. // public Expression<Func<StockSummary, string>>[] Modifiers => new Expression<Func<StockSummary, string>>[] { };
  196. // public FormulaOperator Operator => FormulaOperator.Constant;
  197. // public FormulaType Type => FormulaType.Virtual;
  198. // }
  199. //
  200. //
  201. // [UserTracking(typeof(Product))]
  202. // [AutoEntity(typeof(StockSummaryUnionGenerator))]
  203. // public class StockSummary : StockEntity, IJobMaterial, IRemotable, IPersistent, ILicense<WarehouseLicense>
  204. // {
  205. //
  206. // [NullEditor]
  207. // public JobLink Job { get; set; }
  208. //
  209. // [EditorSequence(1)]
  210. // public override ProductLink Product { get; set; }
  211. //
  212. // [EditorSequence(2)]
  213. // public ProductStyleLink Style { get; set; }
  214. //
  215. // [EditorSequence(3)]
  216. // [RequiredColumn]
  217. // [DimensionsEditor(typeof(StockDimensions))]
  218. // public override StockDimensions Dimensions { get; set; }
  219. //
  220. // [EditorSequence(4)]
  221. // [DoubleEditor]
  222. // [Aggregate(typeof(StockSummaryBOMAggregate))]
  223. // public double BillOfMaterials { get; set; }
  224. //
  225. // [EditorSequence(5)]
  226. // [IntegerEditor]
  227. // [Aggregate(typeof(StockSummaryMinimumStockAggregate))]
  228. // public int MinimumStockLevel { get; set; }
  229. //
  230. // [EditorSequence(6)]
  231. // [Aggregate(typeof(StockSummaryIssuedAggregate))]
  232. // [DoubleEditor]
  233. // public double Issued { get; set; }
  234. //
  235. // [EditorSequence(7)]
  236. // [Formula(typeof(StockSummaryTotalRequiredFormula))]
  237. // public double TotalRequired { get; set; }
  238. //
  239. // [EditorSequence(8)]
  240. // [Formula(typeof(StockSummaryNettRequiredFormula))]
  241. // public double NettRequired { get; set; }
  242. //
  243. // [EditorSequence(9)]
  244. // [Aggregate(typeof(StockSummaryAllStockAggregate))]
  245. // [DoubleEditor]
  246. // public double AllStock { get; set; }
  247. //
  248. // [EditorSequence(10)]
  249. // [DoubleEditor]
  250. // [Aggregate(typeof(StockSummaryOrderAggregate))]
  251. // public double OnOrder { get; set; }
  252. //
  253. // [EditorSequence(11)]
  254. // [Formula(typeof(StockSummaryTotalStockFormula))]
  255. // [DoubleEditor]
  256. // public double TotalStock { get; set; }
  257. //
  258. // [EditorSequence(12)]
  259. // [DoubleEditor]
  260. // [Formula(typeof(StockSummaryCalculatedField))]
  261. // public double BalanceAvailable { get; set; }
  262. //
  263. // //[EditorSequence(13)]
  264. // //[DoubleEditor]
  265. // //[Formula(typeof(StockSummaryCalculatedField))]
  266. // //public double JobBOM { get; set; }
  267. //
  268. // [EditorSequence(14)]
  269. // [NullEditor]
  270. // [Formula(typeof(StockSummaryCalculatedStringField))]
  271. // public string Issues { get; set; }
  272. // }
  273. }