SystemSetupActions.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Comal.Classes;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.Wpf;
  9. namespace PRSDesktop;
  10. public static class SystemSetupActions
  11. {
  12. private class V6SettingsGrid : DynamicItemsListGrid<V6Settings>
  13. {
  14. private void Validate<T>(string sql, List<string> errors) where T : V6Object, new()
  15. {
  16. var t = new T();
  17. List<string> _e = new();
  18. t.ValidateQuery(sql,_e);
  19. if (_e.Any())
  20. {
  21. errors.Add($"The query for {typeof(T).Name} has some errors:");
  22. errors.AddRange(_e);
  23. }
  24. }
  25. private static void ValidateUom(V6Settings settings, string uomcode, List<string> errors, IEnumerable<ProductDimensionUnit> uoms, params string[] checks)
  26. {
  27. var _uomvalue = CoreUtils.GetPropertyValue(settings, uomcode) as string;
  28. if (string.IsNullOrWhiteSpace(_uomvalue))
  29. {
  30. errors.Add($"{uomcode.SplitCamelCase()} may not be blank!");
  31. return;
  32. }
  33. var _uom = uoms.FirstOrDefault(x => string.Equals(x.Code, _uomvalue));
  34. if (_uom == null)
  35. {
  36. errors.Add($"{uomcode.SplitCamelCase()}: {_uomvalue} is not a value Unit of Measure!");
  37. return;
  38. }
  39. List<string> _missing = new();
  40. foreach (var _check in checks)
  41. {
  42. var _enabled = (bool)(CoreUtils.GetPropertyValue(_uom, _check) ?? false);
  43. if (!_enabled)
  44. _missing.Add(_check);
  45. }
  46. if (_missing.Any())
  47. errors.Add($"{_uomvalue} is missing the following checks: {string.Join(", ",_missing)}");
  48. }
  49. protected override void DoValidate(V6Settings[] items, List<string> errors)
  50. {
  51. base.DoValidate(items, errors);
  52. var _item = items.FirstOrDefault();
  53. if (_item == null)
  54. return;
  55. var _uoms = Client.Query(new Filter<ProductDimensionUnit>().All(), Columns.All<ProductDimensionUnit>()).ToObjects<ProductDimensionUnit>().ToArray();
  56. if (_item.ImportCosts != V6ImportCosts.None)
  57. {
  58. ValidateUom(_item, nameof(V6Settings.ProfileUom), errors, _uoms, nameof(ProductDimensionUnit.HasLength));
  59. ValidateUom(_item, nameof(V6Settings.ComponentUom), errors, _uoms, nameof(ProductDimensionUnit.HasQuantity));
  60. ValidateUom(_item, nameof(V6Settings.GlassUom), errors, _uoms, nameof(ProductDimensionUnit.HasHeight), nameof(ProductDimensionUnit.HasWidth));
  61. }
  62. if (_item.ImportDesigns == V6ImportDesigns.ToManufacturing)
  63. {
  64. if (String.IsNullOrWhiteSpace(_item.PacketTemplate))
  65. errors.Add("Packet Template my not be blank!");
  66. else
  67. {
  68. var _found = Client
  69. .Query(new Filter<ManufacturingTemplate>(x => x.Code).IsEqualTo(_item.PacketTemplate),
  70. Columns.None<ManufacturingTemplate>()).Rows.Any();
  71. if (!_found)
  72. errors.Add($"Packet Template [{_item.PacketTemplate}] does not exist!");
  73. }
  74. }
  75. _item.CheckSQL();
  76. Validate<V6Quote>(_item.QuoteSQL, errors);
  77. Validate<V6Elevation>(_item.ElevationSQL, errors);
  78. Validate<V6Drawings>(_item.DrawingsSQL, errors);
  79. Validate<V6Profile>(_item.ProfileSQL, errors);
  80. Validate<V6Component>(_item.ComponentSQL, errors);
  81. Validate<V6Labour>(_item.LabourSQL, errors);
  82. Validate<V6Glass>(_item.GlassSQL, errors);
  83. }
  84. }
  85. private class LogikalSettingsGrid : DynamicItemsListGrid<LogikalSettings>
  86. {
  87. private void Validate<T>(string sql, List<string> errors) where T : LogikalItem, new()
  88. {
  89. var t = new T();
  90. List<string> _e = new();
  91. t.ValidateQuery(sql, _e);
  92. if (_e.Any())
  93. {
  94. errors.Add($"The query for {typeof(T).Name} has some errors:");
  95. errors.AddRange(_e);
  96. }
  97. }
  98. private static void ValidateUom(LogikalSettings settings, string uomcode, List<string> errors, IEnumerable<ProductDimensionUnit> uoms, params string[] checks)
  99. {
  100. var _uomvalue = CoreUtils.GetPropertyValue(settings, uomcode) as string;
  101. if (string.IsNullOrWhiteSpace(_uomvalue))
  102. {
  103. errors.Add($"{uomcode.SplitCamelCase()} may not be blank!");
  104. return;
  105. }
  106. var _uom = uoms.FirstOrDefault(x => string.Equals(x.Code, _uomvalue));
  107. if (_uom == null)
  108. {
  109. errors.Add($"{uomcode.SplitCamelCase()}: {_uomvalue} is not a value Unit of Measure!");
  110. return;
  111. }
  112. List<string> _missing = new();
  113. foreach (var _check in checks)
  114. {
  115. var _enabled = (bool)(CoreUtils.GetPropertyValue(_uom, _check) ?? false);
  116. if (!_enabled)
  117. _missing.Add(_check);
  118. }
  119. if (_missing.Any())
  120. errors.Add($"{_uomvalue} is missing the following checks: {string.Join(", ", _missing)}");
  121. }
  122. protected override void DoValidate(LogikalSettings[] items, List<string> errors)
  123. {
  124. base.DoValidate(items, errors);
  125. var _item = items.FirstOrDefault();
  126. if (_item == null)
  127. return;
  128. var _uoms = Client.Query(new Filter<ProductDimensionUnit>().All(), Columns.All<ProductDimensionUnit>()).ToObjects<ProductDimensionUnit>().ToArray();
  129. ValidateUom(_item, nameof(LogikalSettings.ProfileUom), errors, _uoms, nameof(ProductDimensionUnit.HasLength));
  130. ValidateUom(_item, nameof(LogikalSettings.ComponentUom), errors, _uoms, nameof(ProductDimensionUnit.HasQuantity));
  131. ValidateUom(_item, nameof(LogikalSettings.GlassUom), errors, _uoms, nameof(ProductDimensionUnit.HasHeight), nameof(ProductDimensionUnit.HasWidth));
  132. //if (_item.ImportDesigns == V6ImportDesigns.ToManufacturing)
  133. //{
  134. // if (String.IsNullOrWhiteSpace(_item.PacketTemplate))
  135. // errors.Add("Packet Template my not be blank!");
  136. // else
  137. // {
  138. // var _found = Client
  139. // .Query(new Filter<ManufacturingTemplate>(x => x.Code).IsEqualTo(_item.PacketTemplate),
  140. // Columns.None<ManufacturingTemplate>()).Rows.Any();
  141. // if (!_found)
  142. // errors.Add($"Packet Template [{_item.PacketTemplate}] does not exist!");
  143. // }
  144. //}
  145. _item.CheckSQL();
  146. Validate<LogikalProfile>(_item.ProfileSQL, errors);
  147. Validate<LogikalComponent>(_item.ComponentSQL, errors);
  148. Validate<LogikalLabour>(_item.LabourSQL, errors);
  149. Validate<LogikalGlass>(_item.GlassSQL, errors);
  150. }
  151. }
  152. public static void ERPStatuses(IPanelHost host)
  153. {
  154. host.CreateSetupActionIfCanView<LogikalSettings>("Logikal Settings", PRSDesktop.Resources.logikal, (action) =>
  155. {
  156. var logikal = Client.Query(
  157. new Filter<LogikalSettings>().All(),
  158. Columns.All<LogikalSettings>()
  159. ).Rows
  160. .FirstOrDefault()?
  161. .ToObject<LogikalSettings>() ?? new LogikalSettings();
  162. var grid = new LogikalSettingsGrid();
  163. if (grid.EditItems(new LogikalSettings[] { logikal }))
  164. {
  165. Client.Save(logikal, "Updated Settings");
  166. }
  167. });
  168. host.CreateSetupActionIfCanView<V6Settings>("V6 Settings", PRSDesktop.Resources.v6, (action) =>
  169. {
  170. var v6 = Client.Query(
  171. new Filter<V6Settings>().All(),
  172. Columns.All<V6Settings>()
  173. ).Rows
  174. .FirstOrDefault()?
  175. .ToObject<V6Settings>() ?? new V6Settings();
  176. v6.CheckSQL();
  177. var grid = new V6SettingsGrid();
  178. if (grid.EditItems(new V6Settings[] { v6 }))
  179. {
  180. Client.Save(v6, "Updated Settings");
  181. }
  182. });
  183. }
  184. }