diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-21 15:49:10 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-21 15:49:10 +0300 |
| commit | f0588aa546e9497b0f6def56e8b3b1756d30fbfb (patch) | |
| tree | 4a66d1f9333e9a09b50f94e1745b26a2542d9608 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels | |
| parent | 5c58e6499306b3087015758c1054497dccc407e6 (diff) | |
| download | Tango-f0588aa546e9497b0f6def56e8b3b1756d30fbfb.tar.gz Tango-f0588aa546e9497b0f6def56e8b3b1756d30fbfb.zip | |
Machine designer working good !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels')
2 files changed, 204 insertions, 72 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs index 40358344d..b332ebc6b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineVersionDialogVM.cs @@ -14,7 +14,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { public class MachineVersionDialogVM : DialogViewVM { - public ObservablesEntitiesAdapter Adapter { get; set; } + public ObservablesStaticCollections Adapter { get; set; } public double Version { get; set; } @@ -46,7 +46,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public MachineVersionDialogVM() { - Adapter = ObservablesEntitiesAdapter.Instance; + Adapter = ObservablesStaticCollections.Instance; AcceptCommand = new RelayCommand(() => { Accept(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index 1f410d49c..a819a4d1a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -16,27 +16,39 @@ using SimpleValidator.Extensions; using Tango.MachineStudio.Common.StudioApplication; using Tango.MachineStudio.Common; using Tango.BL; +using Tango.AutoComplete.Editors; +using System.Data.Entity; namespace Tango.MachineStudio.MachineDesigner.ViewModels { public class MainViewVM : StudioViewModel<MachineDesignerModule> { - private bool _isSaving; private INotificationProvider _notification; - + private ObservablesContext _db; + private Configuration _original_configuration; #region Properties - private ObservablesEntitiesAdapter _adapter; + private ObservablesStaticCollections _adapter; /// <summary> - /// Gets or sets the db adapter. + /// Gets or sets the db static adapter. /// </summary> - public ObservablesEntitiesAdapter Adapter + public ObservablesStaticCollections Adapter { get { return _adapter; } set { _adapter = value; RaisePropertyChangedAuto(); } } + private bool _canWork; + /// <summary> + /// Gets or sets a value indicating whether this instance can work. + /// </summary> + public bool CanWork + { + get { return _canWork; } + set { _canWork = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + private Machine _machine; /// <summary> /// Gets or sets the current editable machine. @@ -54,7 +66,13 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public Machine SelectedMachine { get { return _selectedMachine; } - set { _selectedMachine = value; RaisePropertyChangedAuto(); OnSelectedMachineChanged(); } + set + { + if (_selectedMachine != value) + { + _selectedMachine = value; RaisePropertyChangedAuto(); OnSelectedMachineChanged(); + } + } } private Configuration _configuration; @@ -107,6 +125,16 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } } + /// <summary> + /// Gets or sets the machines provider. + /// </summary> + public ISuggestionProvider MachinesProvider { get; set; } + + /// <summary> + /// Gets or sets the versions provider. + /// </summary> + public ISuggestionProvider VersionsProvider { get; set; } + #endregion #region Commands @@ -136,6 +164,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> public RelayCommand SetAsDefaultCommand { get; set; } + /// <summary> + /// Gets or sets the reset command. + /// </summary> + public RelayCommand ResetCommand { get; set; } + #endregion #region Constructors @@ -150,23 +183,89 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> public MainViewVM(INotificationProvider notification) { + CanWork = true; + _notification = notification; - Adapter = ObservablesEntitiesAdapter.Instance; Configuration = new Configuration(); Configuration.Name = "Untitled"; Machine = new Machine(); Machine.Configuration = Configuration; - SaveCommand = new RelayCommand(Save, (x) => !_isSaving); - AddIdsCommand = new RelayCommand(AddIds, (x) => !_isSaving && Configuration.IdsPacks.Count < 8); - RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => !_isSaving && SelectedIds != null); - SetVersionConfigurationCommand = new RelayCommand(SetVersionConfiguration, (x) => !_isSaving); - SetAsDefaultCommand = new RelayCommand(SetAsDefaultConfiguration, (x) => !_isSaving); + SaveCommand = new RelayCommand(Save, (x) => CanWork); + AddIdsCommand = new RelayCommand(AddIds, (x) => CanWork && Configuration.IdsPacks.Count < 8); + RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => CanWork && SelectedIds != null); + SetVersionConfigurationCommand = new RelayCommand(SetVersionConfiguration, (x) => CanWork); + SetAsDefaultCommand = new RelayCommand(SetAsDefaultConfiguration, (x) => CanWork); + ResetCommand = new RelayCommand(Reset, () => CanWork); + + MachinesProvider = new SuggestionProvider((filter) => + { + return _db.Machines.Where(x => x.SerialNumber.StartsWith(filter)).ToList(); + }); + + VersionsProvider = new SuggestionProvider((filter) => + { + return _db.MachineVersions.Where(x => x.Version.ToString().StartsWith(filter) || x.Name.StartsWith(filter)).ToList(); + }); + } + + #endregion + + #region Application Ready + + public async override void OnApplicationReady() + { + base.OnApplicationReady(); + + await InitCollections(); } #endregion + private Task InitCollections() + { + return Task.Factory.StartNew(() => + { + CanWork = false; + + _db = ObservablesContext.CreateDefault(); + _db.Configuration.LazyLoadingEnabled = false; + + Adapter = new ObservablesStaticCollections(); + Adapter.ApplicationDisplayPanelVersions = _db.ApplicationDisplayPanelVersions.ToObservableCollection(); + Adapter.ApplicationFirmwareVersions = _db.ApplicationFirmwareVersions.ToObservableCollection(); + Adapter.ApplicationOsVersions = _db.ApplicationOsVersions.ToObservableCollection(); + Adapter.EmbeddedFirmwareVersions = _db.EmbeddedFirmwareVersions.ToObservableCollection(); + Adapter.DispenserTypes = _db.DispenserTypes.ToObservableCollection(); + Adapter.LiquidTypes = _db.LiquidTypes.ToObservableCollection(); + Adapter.MidTankTypes = _db.MidTankTypes.ToObservableCollection(); + Adapter.CartridgeTypes = _db.CartridgeTypes.ToObservableCollection(); + Adapter.IdsPackFormulas = _db.IdsPackFormulas.ToObservableCollection(); + Adapter.HardwareVersions = _db.HardwareVersions.ToObservableCollection(); + Adapter.MachineVersions = _db.MachineVersions.ToObservableCollection(); + Adapter.Organizations = _db.Organizations.ToObservableCollection(); + + Adapter.InitCollectionSources(); + + CanWork = true; + }); + } + + private void Reset() + { + using (_notification.PushTaskItem("Resetting designer...")) + { + SelectedMachine = null; + Machine = new Machine(); + Configuration = new Configuration(); + History = new ObservableCollection<Configuration>(); + SelectedHistoryConfiguration = null; + Filter = String.Empty; + InitCollections(); + } + } + #region Virtual Methods /// <summary> @@ -176,9 +275,23 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { if (SelectedMachine != null) { - Machine = SelectedMachine.Clone(); - Configuration = Machine.Configuration.Clone(); - History = SelectedMachine.MachinesConfigurations.Select(x => x.Configuration).ToObservableCollection(); + CanWork = false; + + using (_notification.PushTaskItem("Loading machine configuration...")) + { + Task.Factory.StartNew(() => + { + InitCollections().Wait(); + Machine = _db.Machines.Where(x => x.Guid == SelectedMachine.Guid).Include(x => x.Organization).SingleOrDefault(x => x.Guid == SelectedMachine.Guid); + Configuration = _db.LoadConfiguration(x => x.Guid == Machine.ConfigurationGuid); + + SetHistory(); + + _original_configuration = Configuration.Clone(); + }); + } + + CanWork = true; } else { @@ -191,9 +304,21 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> protected virtual void OnHistoryConfigurationSelected() { - if (SelectedHistoryConfiguration != null) + if (SelectedHistoryConfiguration != null && CanWork) { - Configuration = SelectedHistoryConfiguration.Clone(); + using (_notification.PushTaskItem("Loading Configuration...")) + { + Task.Factory.StartNew(() => + { + CanWork = false; + + SelectedHistoryConfiguration = _db.LoadConfiguration(x => x.Guid == SelectedHistoryConfiguration.Guid); + Configuration = SelectedHistoryConfiguration; + Machine.Configuration = Configuration; + + CanWork = true; + }); + } } } @@ -202,8 +327,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> protected virtual void OnFilterChanged() { - - List<ICollectionView> collections = new List<ICollectionView>(); collections.Add(Adapter.ApplicationFirmwareVersionsViewSource); collections.Add(Adapter.ApplicationDisplayPanelVersionsViewSource); @@ -223,7 +346,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { String value = prop.GetValue(x).ToStringSafe(); - if (value != null) + if (value != null && Filter != null) { if (value.ToLower().Contains(Filter.ToLower())) { @@ -366,7 +489,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> private void RemoveIds() { - Configuration.IdsPacks.Remove(SelectedIds); + _db.IdsPacks.Remove(SelectedIds); SelectedIds = null; } @@ -375,7 +498,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// </summary> private void AddIds() { - Configuration.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); + _db.IdsPacks.Add(new IdsPack() { Configuration = Configuration }); InvalidateRelayCommands(); } @@ -494,17 +617,17 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels //Validate - _isSaving = true; - InvalidateRelayCommands(); - try { + CanWork = false; + using (_notification.PushTaskItem("Saving Machine Configuration...")) { - if (!Adapter.Machines.ToList().Exists(x => x.SerialNumber.ToLower() == Machine.SerialNumber.ToLower())) + if (!_db.Machines.Any(x => x.SerialNumber.ToLower() == Machine.SerialNumber.ToLower())) { if (!_notification.ShowQuestion("The specified machine serial number does not exist. Do you wish to create a new machine?")) { + CanWork = true; return; } else @@ -512,53 +635,34 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Machine.Configuration = Configuration; Configuration.CreationDate = DateTime.UtcNow; Machine.ProductionDate = DateTime.UtcNow; - Machine.MachinesConfigurations.Add(new MachinesConfiguration() + + _db.Machines.Add(Machine); + _db.MachinesConfigurations.Add(new MachinesConfiguration() { Configuration = Configuration, Machine = Machine, }); - await Machine.SaveAsync(Adapter.Context); - - Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == Machine.Guid); - Configuration = Machine.Configuration.Clone(); } } else { - var machine = Adapter.Machines.Single(x => x.SerialNumber.ToLower() == Machine.SerialNumber.ToLower()); - - //Set 'Real machine' parameters... - - bool add_history = History.Count == 0 || History.First().Name != Configuration.Name; - - machine.Name = Machine.Name; - machine.SerialNumber = Machine.SerialNumber; - machine.Organization = Machine.Organization; - + bool add_history = History.Count == 0 || _original_configuration.Name != Configuration.Name; if (add_history) { - machine.MachinesConfigurations.Add(new MachinesConfiguration() + _db.Configurations.Add(_original_configuration); + + _db.MachinesConfigurations.Add(new MachinesConfiguration() { - Configuration = Configuration, - Machine = machine + Configuration = _original_configuration, + Machine = Machine }); } - else - { - machine.Configuration.DefferedDelete(Adapter.Context); - } - - machine.Configuration = Configuration; - - await machine.SaveAsync(Adapter.Context); - - Machine = Adapter.Machines.SingleOrDefault(x => x.Guid == machine.Guid); - Configuration = Machine.Configuration.Clone(); } - SetHistory(Machine); - Machine = Machine.Clone(); + await _db.SaveChangesAsync(); + OnSelectedMachineChanged(); + } } catch (Exception ex) @@ -567,7 +671,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } finally { - _isSaving = false; + CanWork = true; InvalidateRelayCommands(); } } @@ -576,20 +680,33 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// Sets the specified machine history. /// </summary> /// <param name="machine">The machine.</param> - private void SetHistory(Machine machine) + private void SetHistory() { - History = machine.MachinesConfigurations.Select(x => x.Configuration).ToObservableCollection(); - History.Insert(0, machine.Configuration); + History = _db.MachinesConfigurations.Where(x => x.MachineGuid == Machine.Guid).Select(x => x.Configuration).ToObservableCollection(); + //History.Insert(0, Machine.Configuration); } /// <summary> /// Sets the current configuration to the selected machine version default configuration. /// </summary> - private void SetVersionConfiguration() + private async void SetVersionConfiguration() { if (Machine.MachineVersion != null) { - Configuration = Machine.MachineVersion.DefaultConfiguration.Clone(); + using (_notification.PushTaskItem("Applying default configuration...")) + { + CanWork = false; + + await Task.Factory.StartNew(() => + { + var version = _db.MachineVersions.Where(x => x.Guid == Machine.MachineVersion.Guid).Include(x => x.DefaultConfiguration).FirstOrDefault(); + var version_config = _db.LoadConfiguration(x => x.Guid == version.DefaultConfiguration.Guid); + Configuration = version_config.Clone(); + Machine.Configuration = Configuration; + }); + + CanWork = true; + } } else { @@ -604,15 +721,23 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { _notification.ShowModalDialog<MachineVersionDialogVM>(async (vm) => { + CanWork = false; + try { using (_notification.PushTaskItem("Saving Default Configuration...")) { if (vm.SelectedVersion != null) { - vm.SelectedVersion.DefaultConfiguration = Configuration.Clone(); - vm.SelectedVersion.DefaultConfigurationGuid = vm.SelectedVersion.DefaultConfiguration.Guid; - await vm.SelectedVersion.SaveAsync(Adapter.Context); + var version = _db.MachineVersions.Where(x => x.Guid == vm.SelectedVersion.Guid).Include(x => x.DefaultConfiguration).SingleOrDefault(x => x.Guid == vm.SelectedVersion.Guid); + + _db.Configurations.Remove(version.DefaultConfiguration); + + var cloned = Configuration.Clone(); + _db.Configurations.Add(cloned); + version.DefaultConfiguration = cloned; + + await _db.SaveChangesAsync(); } else { @@ -620,9 +745,12 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels newVersion.Version = vm.Version; newVersion.Name = vm.VersionName; - newVersion.DefaultConfiguration = Configuration.Clone(); - newVersion.DefaultConfigurationGuid = newVersion.DefaultConfiguration.Guid; - await newVersion.SaveAsync(Adapter.Context); + var cloned = Configuration.Clone(); + + _db.Configurations.Add(cloned); + newVersion.DefaultConfiguration = cloned; + _db.MachineVersions.Add(newVersion); + await _db.SaveChangesAsync(); } } } @@ -630,6 +758,10 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { _notification.ShowError(ex.Message); } + finally + { + CanWork = true; + } }, () => { @@ -643,7 +775,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public override void OnModuleRequest(params object[] args) { - SelectedMachine = Adapter.Machines.SingleOrDefault(x => x.Guid == (args[0] as Machine).Guid); + //SelectedMachine = Adapter.Machines.SingleOrDefault(x => x.Guid == (args[0] as Machine).Guid); } #endregion |
