123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- namespace PRSDesktop;
- public static class SystemSetupActions
- {
- private class V6SettingsGrid : DynamicItemsListGrid<V6Settings>
- {
- private void Validate<T>(string sql, List<string> errors) where T : V6Object, new()
- {
- var t = new T();
- List<string> _e = new();
- t.ValidateQuery(sql,_e);
- if (_e.Any())
- {
- errors.Add($"The query for {typeof(T).Name} has some errors:");
- errors.AddRange(_e);
- }
- }
-
- private static void ValidateUom(V6Settings settings, string uomcode, List<string> errors, IEnumerable<ProductDimensionUnit> uoms, params string[] checks)
- {
- var _uomvalue = CoreUtils.GetPropertyValue(settings, uomcode) as string;
- if (string.IsNullOrWhiteSpace(_uomvalue))
- {
- errors.Add($"{uomcode.SplitCamelCase()} may not be blank!");
- return;
- }
- var _uom = uoms.FirstOrDefault(x => string.Equals(x.Code, _uomvalue));
- if (_uom == null)
- {
- errors.Add($"{uomcode.SplitCamelCase()}: {_uomvalue} is not a value Unit of Measure!");
- return;
- }
- List<string> _missing = new();
- foreach (var _check in checks)
- {
- var _enabled = (bool)(CoreUtils.GetPropertyValue(_uom, _check) ?? false);
- if (!_enabled)
- _missing.Add(_check);
- }
- if (_missing.Any())
- errors.Add($"{_uomvalue} is missing the following checks: {string.Join(", ",_missing)}");
-
- }
-
- protected override void DoValidate(V6Settings[] items, List<string> errors)
- {
- base.DoValidate(items, errors);
- var _item = items.FirstOrDefault();
- if (_item == null)
- return;
-
- var _uoms = Client.Query(new Filter<ProductDimensionUnit>().All(), Columns.All<ProductDimensionUnit>()).ToObjects<ProductDimensionUnit>().ToArray();
- if (_item.ImportCosts != V6ImportCosts.None)
- {
- ValidateUom(_item, nameof(V6Settings.ProfileUom), errors, _uoms, nameof(ProductDimensionUnit.HasLength));
- ValidateUom(_item, nameof(V6Settings.ComponentUom), errors, _uoms, nameof(ProductDimensionUnit.HasQuantity));
- ValidateUom(_item, nameof(V6Settings.GlassUom), errors, _uoms, nameof(ProductDimensionUnit.HasHeight), nameof(ProductDimensionUnit.HasWidth));
- }
- if (_item.ImportDesigns == V6ImportDesigns.ToManufacturing)
- {
- if (String.IsNullOrWhiteSpace(_item.PacketTemplate))
- errors.Add("Packet Template my not be blank!");
- else
- {
- var _found = Client
- .Query(new Filter<ManufacturingTemplate>(x => x.Code).IsEqualTo(_item.PacketTemplate),
- Columns.None<ManufacturingTemplate>()).Rows.Any();
- if (!_found)
- errors.Add($"Packet Template [{_item.PacketTemplate}] does not exist!");
- }
- }
- _item.CheckSQL();
- Validate<V6Quote>(_item.QuoteSQL, errors);
- Validate<V6Elevation>(_item.ElevationSQL, errors);
- Validate<V6Drawings>(_item.DrawingsSQL, errors);
- Validate<V6Profile>(_item.ProfileSQL, errors);
- Validate<V6Component>(_item.ComponentSQL, errors);
- Validate<V6Labour>(_item.LabourSQL, errors);
- Validate<V6Glass>(_item.GlassSQL, errors);
- }
- }
- private class LogikalSettingsGrid : DynamicItemsListGrid<LogikalSettings>
- {
- private void Validate<T>(string sql, List<string> errors) where T : LogikalItem, new()
- {
- var t = new T();
- List<string> _e = new();
- t.ValidateQuery(sql, _e);
- if (_e.Any())
- {
- errors.Add($"The query for {typeof(T).Name} has some errors:");
- errors.AddRange(_e);
- }
- }
- private static void ValidateUom(LogikalSettings settings, string uomcode, List<string> errors, IEnumerable<ProductDimensionUnit> uoms, params string[] checks)
- {
- var _uomvalue = CoreUtils.GetPropertyValue(settings, uomcode) as string;
- if (string.IsNullOrWhiteSpace(_uomvalue))
- {
- errors.Add($"{uomcode.SplitCamelCase()} may not be blank!");
- return;
- }
- var _uom = uoms.FirstOrDefault(x => string.Equals(x.Code, _uomvalue));
- if (_uom == null)
- {
- errors.Add($"{uomcode.SplitCamelCase()}: {_uomvalue} is not a value Unit of Measure!");
- return;
- }
- List<string> _missing = new();
- foreach (var _check in checks)
- {
- var _enabled = (bool)(CoreUtils.GetPropertyValue(_uom, _check) ?? false);
- if (!_enabled)
- _missing.Add(_check);
- }
- if (_missing.Any())
- errors.Add($"{_uomvalue} is missing the following checks: {string.Join(", ", _missing)}");
- }
- protected override void DoValidate(LogikalSettings[] items, List<string> errors)
- {
- base.DoValidate(items, errors);
- var _item = items.FirstOrDefault();
- if (_item == null)
- return;
- var _uoms = Client.Query(new Filter<ProductDimensionUnit>().All(), Columns.All<ProductDimensionUnit>()).ToObjects<ProductDimensionUnit>().ToArray();
- ValidateUom(_item, nameof(LogikalSettings.ProfileUom), errors, _uoms, nameof(ProductDimensionUnit.HasLength));
- ValidateUom(_item, nameof(LogikalSettings.ComponentUom), errors, _uoms, nameof(ProductDimensionUnit.HasQuantity));
- ValidateUom(_item, nameof(LogikalSettings.GlassUom), errors, _uoms, nameof(ProductDimensionUnit.HasHeight), nameof(ProductDimensionUnit.HasWidth));
- //if (_item.ImportDesigns == V6ImportDesigns.ToManufacturing)
- //{
- // if (String.IsNullOrWhiteSpace(_item.PacketTemplate))
- // errors.Add("Packet Template my not be blank!");
- // else
- // {
- // var _found = Client
- // .Query(new Filter<ManufacturingTemplate>(x => x.Code).IsEqualTo(_item.PacketTemplate),
- // Columns.None<ManufacturingTemplate>()).Rows.Any();
- // if (!_found)
- // errors.Add($"Packet Template [{_item.PacketTemplate}] does not exist!");
- // }
- //}
- _item.CheckSQL();
- Validate<LogikalProfile>(_item.ProfileSQL, errors);
- Validate<LogikalComponent>(_item.ComponentSQL, errors);
- Validate<LogikalLabour>(_item.LabourSQL, errors);
- Validate<LogikalGlass>(_item.GlassSQL, errors);
- }
- }
- public static void ERPStatuses(IPanelHost host)
- {
- host.CreateSetupActionIfCanView<LogikalSettings>("Logikal Settings", PRSDesktop.Resources.logikal, (action) =>
- {
- var logikal = Client.Query(
- new Filter<LogikalSettings>().All(),
- Columns.All<LogikalSettings>()
- ).Rows
- .FirstOrDefault()?
- .ToObject<LogikalSettings>() ?? new LogikalSettings();
- var grid = new LogikalSettingsGrid();
- if (grid.EditItems(new LogikalSettings[] { logikal }))
- {
- Client.Save(logikal, "Updated Settings");
- }
- });
-
- host.CreateSetupActionIfCanView<V6Settings>("V6 Settings", PRSDesktop.Resources.v6, (action) =>
- {
- var v6 = Client.Query(
- new Filter<V6Settings>().All(),
- Columns.All<V6Settings>()
- ).Rows
- .FirstOrDefault()?
- .ToObject<V6Settings>() ?? new V6Settings();
- v6.CheckSQL();
- var grid = new V6SettingsGrid();
- if (grid.EditItems(new V6Settings[] { v6 }))
- {
- Client.Save(v6, "Updated Settings");
- }
- });
- }
- }
|