SystemSetupActions.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.Wpf;
  10. namespace PRSDesktop;
  11. public static class SystemSetupActions
  12. {
  13. private class V6SettingsGrid : DynamicItemsListGrid<V6Settings>
  14. {
  15. private void Validate<T>(string sql, List<string> errors) where T : V6Object, new()
  16. {
  17. var t = new T();
  18. List<string> _e = new();
  19. t.ValidateQuery(sql,_e);
  20. if (_e.Any())
  21. {
  22. errors.Add($"The query for {typeof(T).Name} has some errors:");
  23. errors.AddRange(_e);
  24. }
  25. }
  26. private static void ValidateUom(V6Settings settings, string uomcode, List<string> errors, IEnumerable<ProductDimensionUnit> uoms, params string[] checks)
  27. {
  28. var _uomvalue = CoreUtils.GetPropertyValue(settings, uomcode) as string;
  29. if (string.IsNullOrWhiteSpace(_uomvalue))
  30. {
  31. errors.Add($"{uomcode.SplitCamelCase()} may not be blank!");
  32. return;
  33. }
  34. var _uom = uoms.FirstOrDefault(x => string.Equals(x.Code, _uomvalue));
  35. if (_uom == null)
  36. {
  37. errors.Add($"{uomcode.SplitCamelCase()}: {_uomvalue} is not a value Unit of Measure!");
  38. return;
  39. }
  40. List<string> _missing = new();
  41. foreach (var _check in checks)
  42. {
  43. var _enabled = (bool)(CoreUtils.GetPropertyValue(_uom, _check) ?? false);
  44. if (!_enabled)
  45. _missing.Add(_check);
  46. }
  47. if (_missing.Any())
  48. errors.Add($"{_uomvalue} is missing the following checks: {string.Join(", ",_missing)}");
  49. }
  50. protected override void DoValidate(V6Settings[] items, List<string> errors)
  51. {
  52. base.DoValidate(items, errors);
  53. var _item = items.FirstOrDefault();
  54. if (_item == null)
  55. return;
  56. var _uoms = Client.Query(new Filter<ProductDimensionUnit>().All(), Columns.All<ProductDimensionUnit>()).ToObjects<ProductDimensionUnit>().ToArray();
  57. if (_item.ImportCosts != V6ImportCosts.None)
  58. {
  59. ValidateUom(_item, nameof(V6Settings.ProfileUom), errors, _uoms, nameof(ProductDimensionUnit.HasLength));
  60. ValidateUom(_item, nameof(V6Settings.ComponentUom), errors, _uoms, nameof(ProductDimensionUnit.HasQuantity));
  61. ValidateUom(_item, nameof(V6Settings.GlassUom), errors, _uoms, nameof(ProductDimensionUnit.HasHeight), nameof(ProductDimensionUnit.HasWidth));
  62. }
  63. if (_item.ImportDesigns == V6ImportDesigns.ToManufacturing)
  64. {
  65. if (String.IsNullOrWhiteSpace(_item.PacketTemplate))
  66. errors.Add("Packet Template my not be blank!");
  67. else
  68. {
  69. var _found = Client
  70. .Query(new Filter<ManufacturingTemplate>(x => x.Code).IsEqualTo(_item.PacketTemplate),
  71. Columns.None<ManufacturingTemplate>()).Rows.Any();
  72. if (!_found)
  73. errors.Add($"Packet Template [{_item.PacketTemplate}] does not exist!");
  74. }
  75. }
  76. _item.CheckSQL();
  77. Validate<V6Quote>(_item.QuoteSQL, errors);
  78. Validate<V6Elevation>(_item.ElevationSQL, errors);
  79. Validate<V6Drawings>(_item.DrawingsSQL, errors);
  80. Validate<V6Profile>(_item.ProfileSQL, errors);
  81. Validate<V6Component>(_item.ComponentSQL, errors);
  82. Validate<V6Labour>(_item.LabourSQL, errors);
  83. Validate<V6Glass>(_item.GlassSQL, errors);
  84. }
  85. }
  86. public static void ERPStatuses(IPanelHost host)
  87. {
  88. host.CreateSetupActionIfCanView<LogikalSettings>("Logikal Settings", PRSDesktop.Resources.logikal, (action) =>
  89. {
  90. var logikal = Client.Query(
  91. new Filter<LogikalSettings>().All(),
  92. Columns.All<LogikalSettings>()
  93. ).Rows
  94. .FirstOrDefault()?
  95. .ToObject<LogikalSettings>() ?? new LogikalSettings();
  96. var grid = new DynamicItemsListGrid<LogikalSettings>();
  97. if (grid.EditItems(new LogikalSettings[] { logikal }))
  98. {
  99. Client.Save(logikal, "Updated Settings");
  100. }
  101. });
  102. host.CreateSetupActionIfCanView<V6Settings>("V6 Settings", PRSDesktop.Resources.v6, (action) =>
  103. {
  104. var v6 = Client.Query(
  105. new Filter<V6Settings>().All(),
  106. Columns.All<V6Settings>()
  107. ).Rows
  108. .FirstOrDefault()?
  109. .ToObject<V6Settings>() ?? new V6Settings();
  110. v6.CheckSQL();
  111. var grid = new V6SettingsGrid();
  112. if (grid.EditItems(new V6Settings[] { v6 }))
  113. {
  114. Client.Save(v6, "Updated Settings");
  115. }
  116. });
  117. }
  118. }