SystemSetupActions.cs 8.7 KB

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