From 10692d6af49f30f6a4eb5054945a6368dd181022 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 22 Aug 2018 14:21:23 +0300 Subject: Refactored Machine Versions Module !!!! Embedded sqlexaminer.msi to repo. Implemented precompiled views ? Fixed an issue with RemoteDB DAL. Added Active field to hardware components. --- .../ViewModels/MainViewVM.cs | 728 ++++++--------------- 1 file changed, 210 insertions(+), 518 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs index 3dd4e62a3..ab2b99dbd 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs @@ -11,118 +11,15 @@ using Tango.SharedUI; using Tango.BL; using Tango.SharedUI.Components; using System.Runtime.CompilerServices; +using Tango.MachineStudio.Common; namespace Tango.MachineStudio.HardwareDesigner.ViewModels { - public class MainViewVM : ViewModel + public class MainViewVM : StudioViewModel { private INotificationProvider _notification; private bool _isNew; - - private ObservablesEntitiesAdapter _adapter; - public ObservablesEntitiesAdapter Adapter - { - get { return _adapter; } - set { _adapter = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _motorTypes; - public SelectedObjectCollection MotorTypes - { - get { return _motorTypes; } - set { _motorTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedMotorTypes; - public ObservableCollection SelectedMotorTypes - { - get { return _selectedMotorTypes; } - set { _selectedMotorTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _dancerTypes; - public SelectedObjectCollection DancerTypes - { - get { return _dancerTypes; } - set { _dancerTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedDancerTypes; - public ObservableCollection SelectedDancerTypes - { - get { return _selectedDancerTypes; } - set { _selectedDancerTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _pidControlTypes; - public SelectedObjectCollection PidControlTypes - { - get { return _pidControlTypes; } - set { _pidControlTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedPidControlTypes; - public ObservableCollection SelectedPidControlTypes - { - get { return _selectedPidControlTypes; } - set { _selectedPidControlTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _winderTypes; - public SelectedObjectCollection WinderTypes - { - get { return _winderTypes; } - set { _winderTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedWinderTypes; - public ObservableCollection SelectedWinderTypes - { - get { return _selectedWinderTypes; } - set { _selectedWinderTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _speedSensorTypes; - public SelectedObjectCollection SpeedSensorTypes - { - get { return _speedSensorTypes; } - set { _speedSensorTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedSpeedSensorTypes; - public ObservableCollection SelectedSpeedSensorTypes - { - get { return _selectedSpeedSensorTypes; } - set { _selectedSpeedSensorTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _blowerTypes; - public SelectedObjectCollection BlowerTypes - { - get { return _blowerTypes; } - set { _blowerTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedBlowerTypes; - public ObservableCollection SelectedBlowerTypes - { - get { return _selectedBlowerTypes; } - set { _selectedBlowerTypes = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection _breakSensorTypes; - public SelectedObjectCollection BreakSensorTypes - { - get { return _breakSensorTypes; } - set { _breakSensorTypes = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection _selectedBreakSensorTypes; - public ObservableCollection SelectedBreakSensorTypes - { - get { return _selectedBreakSensorTypes; } - set { _selectedBreakSensorTypes = value; RaisePropertyChangedAuto(); } - } + private ObservablesContext _db; private HardwareVersion _selectedVersion; public HardwareVersion SelectedVersion @@ -144,25 +41,16 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels get { return _selectedHardwareObject; } set { - _selectedHardwareObject = null; - RaisePropertyChangedAuto(); _selectedHardwareObject = value; RaisePropertyChangedAuto(); } } - private Object _selectedHardwareObjectType; - public Object SelectedHardwareObjectType + private ObservableCollection _hardwareVersions; + public ObservableCollection HardwareVersions { - get { return _selectedHardwareObjectType; } - set - { - _selectedHardwareObjectType = null; - RaisePropertyChangedAuto(); - _selectedHardwareObjectType = value; - RaisePropertyChangedAuto(); - OnSelectedHardwareObjectTypeChanged(); - } + get { return _hardwareVersions; } + set { _hardwareVersions = value; RaisePropertyChangedAuto(); } } public RelayCommand SaveCommand { get; set; } @@ -179,429 +67,229 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels { _notification = notification; - Adapter = ObservablesEntitiesAdapter.Instance; + CurrentVersion = new HardwareVersion(); + SaveCommand = new RelayCommand(Save, () => SelectedVersion != null); NewCommand = new RelayCommand(New); DeleteCommand = new RelayCommand(Delete, () => !_isNew && SelectedVersion != null); CurrentVersion = new HardwareVersion(); - CreateTemplate(CurrentVersion); - CopyParametersCommand = new RelayCommand(CopyParameters, (x) => SelectedVersion != null && SelectedHardwareObjectType != null); + CopyParametersCommand = new RelayCommand(CopyParameters, (x) => SelectedVersion != null); CloneCommand = new RelayCommand(CloneCurrentVersion, () => SelectedVersion != null); } - private void CopyParameters(object obj) + public override void OnApplicationReady() { - IObservableEntity source = obj.GetType().GetProperty("Data").GetValue(obj) as IObservableEntity; - IObservableEntity target = null; + base.OnApplicationReady(); - if (source is HardwareMotorType) - { - target = CurrentVersion.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType == source); - } - else if (source is HardwareDancerType) - { - target = CurrentVersion.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType == source); - } - else if (source is HardwarePidControlType) - { - target = CurrentVersion.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType == source); - } - else if (source is HardwareWinderType) - { - target = CurrentVersion.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType == source); - } - else if (source is HardwareSpeedSensorType) - { - target = CurrentVersion.HardwareSpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType == source); - } - else if (source is HardwareBlowerType) - { - target = CurrentVersion.HardwareBlowers.SingleOrDefault(x => x.HardwareBlowerType == source); - } - else if (source is HardwareBreakSensorType) + Task.Factory.StartNew(() => { - target = CurrentVersion.HardwareBreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType == source); - } + RefreshVersions(); + CreateDefaultView(); + }); + } - target.MapPrimitivesTo(SelectedHardwareObject); + private void CopyParameters(object obj) + { + obj.MapPrimitivesTo(SelectedHardwareObject, + (prop) => + !prop.PropertyType.IsEnum + && + !prop.Name.ToLower().Contains("guid")); + } + + private void CreateDefaultView() + { + if (_db != null) _db.Dispose(); + + _db = ObservablesContext.CreateDefault(); + _db.Configuration.LazyLoadingEnabled = false; + + CurrentVersion.HardwareMotors = _db.HardwareMotorTypes.ToList().Select(x => new HardwareMotor() { HardwareMotorType = x }).ToObservableCollection(); + CurrentVersion.HardwareDancers = _db.HardwareDancerTypes.ToList().Select(x => new HardwareDancer() { HardwareDancerType = x }).ToObservableCollection(); + CurrentVersion.HardwarePidControls = _db.HardwarePidControlTypes.ToList().Select(x => new HardwarePidControl() { HardwarePidControlType = x }).ToObservableCollection(); + CurrentVersion.HardwareWinders = _db.HardwareWinderTypes.ToList().Select(x => new HardwareWinder() { HardwareWinderType = x }).ToObservableCollection(); + CurrentVersion.HardwareSpeedSensors = _db.HardwareSpeedSensorTypes.ToList().Select(x => new HardwareSpeedSensor() { HardwareSpeedSensorType = x }).ToObservableCollection(); + CurrentVersion.HardwareBlowers = _db.HardwareBlowerTypes.ToList().Select(x => new HardwareBlower() { HardwareBlowerType = x }).ToObservableCollection(); + CurrentVersion.HardwareBreakSensors = _db.HardwareBreakSensorTypes.ToList().Select(x => new HardwareBreakSensor() { HardwareBreakSensorType = x }).ToObservableCollection(); } - private void OnSelectedHardwareObjectTypeChanged() + private void RefreshVersions() { - if (SelectedHardwareObjectType != null) + using (var db = ObservablesContext.CreateDefault()) { - if (SelectedHardwareObjectType is SelectedObject) + db.Configuration.LazyLoadingEnabled = false; + _hardwareVersions = db.HardwareVersions.ToObservableCollection(); + InvokeUI(() => { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType == type); + RaisePropertyChanged(nameof(HardwareVersions)); + }); + } + } - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareMotor() { HardwareMotorType = type }; - CurrentVersion.HardwareMotors.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) - { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType == type); + private void CreateVersionView(HardwareVersion selectedVersion) + { + if (_db != null) _db.Dispose(); - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareDancer() { HardwareDancerType = type }; - CurrentVersion.HardwareDancers.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) - { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType == type); + _db = ObservablesContext.CreateDefault(); + _db.Configuration.LazyLoadingEnabled = false; - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwarePidControl() { HardwarePidControlType = type }; - CurrentVersion.HardwarePidControls.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) + CurrentVersion = _db.GetHardwareVersion(x => x.Guid == selectedVersion.Guid); + + ObservablesStaticCollections.Instance.HardwareMotorTypes.Where(x => !CurrentVersion.HardwareMotors.ToList().Exists(y => y.HardwareMotorType.Code == x.Code)).ToList().ForEach(x => + { + CurrentVersion.HardwareMotors.Add(new HardwareMotor() { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType == type); + HardwareMotorType = _db.HardwareMotorTypes.SingleOrDefault(y => y.Code == x.Code), + }); + }); - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareWinder() { HardwareWinderType = type }; - CurrentVersion.HardwareWinders.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) + CurrentVersion.HardwareMotors = CurrentVersion.HardwareMotors.OrderBy(x => x.HardwareMotorType.Code).ToObservableCollection(); + + ObservablesStaticCollections.Instance.HardwareDancerTypes.Where(x => !CurrentVersion.HardwareDancers.ToList().Exists(y => y.HardwareDancerType.Code == x.Code)).ToList().ForEach(x => + { + CurrentVersion.HardwareDancers.Add(new HardwareDancer() { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareSpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType == type); + HardwareDancerType = _db.HardwareDancerTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareSpeedSensor() { HardwareSpeedSensorType = type }; - CurrentVersion.HardwareSpeedSensors.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) + CurrentVersion.HardwareDancers = CurrentVersion.HardwareDancers.OrderBy(x => x.HardwareDancerType.Code).ToObservableCollection(); + + ObservablesStaticCollections.Instance.HardwarePidControlTypes.Where(x => !CurrentVersion.HardwarePidControls.ToList().Exists(y => y.HardwarePidControlType.Code == x.Code)).ToList().ForEach(x => + { + CurrentVersion.HardwarePidControls.Add(new HardwarePidControl() { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareBlowers.SingleOrDefault(x => x.HardwareBlowerType == type); + HardwarePidControlType = _db.HardwarePidControlTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareBlower() { HardwareBlowerType = type }; - CurrentVersion.HardwareBlowers.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - else if (SelectedHardwareObjectType is SelectedObject) + CurrentVersion.HardwarePidControls = CurrentVersion.HardwarePidControls.OrderBy(x => x.HardwarePidControlType.Code).ToObservableCollection(); + + ObservablesStaticCollections.Instance.HardwareWinderTypes.Where(x => !CurrentVersion.HardwareWinders.ToList().Exists(y => y.HardwareWinderType.Code == x.Code)).ToList().ForEach(x => + { + CurrentVersion.HardwareWinders.Add(new HardwareWinder() { - var type = (SelectedHardwareObjectType as SelectedObject).Data; - var hardwareObj = CurrentVersion.HardwareBreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType == type); + HardwareWinderType = _db.HardwareWinderTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); - if (hardwareObj != null) - { - SelectedHardwareObject = hardwareObj; - } - else - { - hardwareObj = new HardwareBreakSensor() { HardwareBreakSensorType = type }; - CurrentVersion.HardwareBreakSensors.Add(hardwareObj); - SelectedHardwareObject = hardwareObj; - } - } - } - } + CurrentVersion.HardwareWinders = CurrentVersion.HardwareWinders.OrderBy(x => x.HardwareWinderType.Code).ToObservableCollection(); - private void CreateTemplate(HardwareVersion version) - { - if (version == null) + ObservablesStaticCollections.Instance.HardwareSpeedSensorTypes.Where(x => !CurrentVersion.HardwareSpeedSensors.ToList().Exists(y => y.HardwareSpeedSensorType.Code == x.Code)).ToList().ForEach(x => { - SelectedMotorTypes = new ObservableCollection(); - SelectedDancerTypes = new ObservableCollection(); - SelectedPidControlTypes = new ObservableCollection(); - SelectedWinderTypes = new ObservableCollection(); - SelectedSpeedSensorTypes = new ObservableCollection(); - SelectedBlowerTypes = new ObservableCollection(); - SelectedBreakSensorTypes = new ObservableCollection(); - } - else + CurrentVersion.HardwareSpeedSensors.Add(new HardwareSpeedSensor() + { + HardwareSpeedSensorType = _db.HardwareSpeedSensorTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); + + CurrentVersion.HardwareSpeedSensors = CurrentVersion.HardwareSpeedSensors.OrderBy(x => x.HardwareSpeedSensorType.Code).ToObservableCollection(); + + ObservablesStaticCollections.Instance.HardwareBlowerTypes.Where(x => !CurrentVersion.HardwareBlowers.ToList().Exists(y => y.HardwareBlowerType.Code == x.Code)).ToList().ForEach(x => { - SelectedMotorTypes = version.HardwareMotors.Select(x => x.HardwareMotorType).ToObservableCollection(); - SelectedDancerTypes = version.HardwareDancers.Select(x => x.HardwareDancerType).ToObservableCollection(); - SelectedPidControlTypes = version.HardwarePidControls.Select(x => x.HardwarePidControlType).ToObservableCollection(); - SelectedWinderTypes = version.HardwareWinders.Select(x => x.HardwareWinderType).ToObservableCollection(); - SelectedSpeedSensorTypes = version.HardwareSpeedSensors.Select(x => x.HardwareSpeedSensorType).ToObservableCollection(); - SelectedBlowerTypes = version.HardwareBlowers.Select(x => x.HardwareBlowerType).ToObservableCollection(); - SelectedBreakSensorTypes = version.HardwareBreakSensors.Select(x => x.HardwareBreakSensorType).ToObservableCollection(); - } + CurrentVersion.HardwareBlowers.Add(new HardwareBlower() + { + HardwareBlowerType = _db.HardwareBlowerTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); - MotorTypes = new SelectedObjectCollection(Adapter.HardwareMotorTypes, SelectedMotorTypes); - DancerTypes = new SelectedObjectCollection(Adapter.HardwareDancerTypes, SelectedDancerTypes); - PidControlTypes = new SelectedObjectCollection(Adapter.HardwarePidControlTypes, SelectedPidControlTypes); - WinderTypes = new SelectedObjectCollection(Adapter.HardwareWinderTypes, SelectedWinderTypes); - SpeedSensorTypes = new SelectedObjectCollection(Adapter.HardwareSpeedSensorTypes, SelectedSpeedSensorTypes); - BlowerTypes = new SelectedObjectCollection(Adapter.HardwareBlowerTypes, SelectedBlowerTypes); - BreakSensorTypes = new SelectedObjectCollection(Adapter.HardwareBreakSensorTypes, SelectedBreakSensorTypes); - } + CurrentVersion.HardwareBlowers = CurrentVersion.HardwareBlowers.OrderBy(x => x.HardwareBlowerType.Code).ToObservableCollection(); - private void OnSelectedVersionChanged() - { - if (SelectedVersion != null) + ObservablesStaticCollections.Instance.HardwareBreakSensorTypes.Where(x => !CurrentVersion.HardwareBreakSensors.ToList().Exists(y => y.HardwareBreakSensorType.Code == x.Code)).ToList().ForEach(x => { - _isNew = false; - CurrentVersion = SelectedVersion.Clone(); - CreateTemplate(CurrentVersion); - } + CurrentVersion.HardwareBreakSensors.Add(new HardwareBreakSensor() + { + HardwareBreakSensorType = _db.HardwareBreakSensorTypes.SingleOrDefault(y => y.Code == x.Code) + }); + }); - InvalidateRelayCommands(); + CurrentVersion.HardwareBreakSensors = CurrentVersion.HardwareBreakSensors.OrderBy(x => x.HardwareBreakSensorType.Code).ToObservableCollection(); } - private bool CheckCurrentVersionNull() + private async void OnSelectedVersionChanged() { - if (CurrentVersion == null) + if (SelectedVersion != null) { - _notification.ShowInfo("Please select a hardware version before attempting to insert any components."); - return true; + using (_notification.PushTaskItem("Loading hardware version...")) + { + await Task.Factory.StartNew(() => + { + _isNew = false; + var selectedVersion = SelectedVersion; + RefreshVersions(); + var version = _hardwareVersions.SingleOrDefault(X => X.Guid == selectedVersion.Guid); + CreateVersionView(SelectedVersion); + + InvokeUI(() => + { + _selectedVersion = version; + RaisePropertyChanged(nameof(SelectedVersion)); + }); + }); + } } - return false; + InvalidateRelayCommands(); } - private void New() + private async void New() { String name = _notification.ShowTextInput("Enter hardware version name", "Name"); if (!String.IsNullOrWhiteSpace(name)) { - SelectedVersion = null; - CurrentVersion = new HardwareVersion(); - CurrentVersion.Version = Adapter.HardwareVersions.Max(x => x.Version) + 1; - CurrentVersion.Name = name; - CreateTemplate(CurrentVersion); - _isNew = true; - InvalidateRelayCommands(); + using (_notification.PushTaskItem("Creating new machine versions...")) + { + await Task.Factory.StartNew(() => + { + SelectedVersion = null; + CurrentVersion = new HardwareVersion(); + CurrentVersion.Version = HardwareVersions.Max(x => x.Version) + 1; + CurrentVersion.Name = name; + CreateDefaultView(); + + _db.HardwareVersions.Add(CurrentVersion); + _db.SaveChanges(); + + RefreshVersions(); + + InvokeUI(() => + { + _selectedVersion = HardwareVersions.SingleOrDefault(x => x.Guid == CurrentVersion.Guid); + RaisePropertyChanged(nameof(SelectedVersion)); + }); + + _isNew = true; + InvalidateRelayCommands(); + }); + } } } private async void Save() { - if (CurrentVersion != null) + using (_notification.PushTaskItem("Saving hardware version...")) { - using (_notification.PushTaskItem("Saving hardware version...")) + try { await Task.Factory.StartNew(() => { - HardwareVersion realVersion = null; - - if (_isNew) - { - realVersion = CurrentVersion.Clone(); - - realVersion.HardwareMotors.ToList().Where(x => !SelectedMotorTypes.Contains(x.HardwareMotorType)).ToList().ForEach(x => realVersion.HardwareMotors.Remove(x)); - realVersion.HardwareDancers.ToList().Where(x => !SelectedDancerTypes.Contains(x.HardwareDancerType)).ToList().ForEach(x => realVersion.HardwareDancers.Remove(x)); - realVersion.HardwarePidControls.ToList().Where(x => !SelectedPidControlTypes.Contains(x.HardwarePidControlType)).ToList().ForEach(x => realVersion.HardwarePidControls.Remove(x)); - realVersion.HardwareWinders.ToList().Where(x => !SelectedWinderTypes.Contains(x.HardwareWinderType)).ToList().ForEach(x => realVersion.HardwareWinders.Remove(x)); - realVersion.HardwareSpeedSensors.ToList().Where(x => !SelectedSpeedSensorTypes.Contains(x.HardwareSpeedSensorType)).ToList().ForEach(x => realVersion.HardwareSpeedSensors.Remove(x)); - realVersion.HardwareBlowers.ToList().Where(x => !SelectedBlowerTypes.Contains(x.HardwareBlowerType)).ToList().ForEach(x => realVersion.HardwareBlowers.Remove(x)); - realVersion.HardwareBreakSensors.ToList().Where(x => !SelectedBreakSensorTypes.Contains(x.HardwareBreakSensorType)).ToList().ForEach(x => realVersion.HardwareBreakSensors.Remove(x)); - } - else - { - realVersion = Adapter.HardwareVersions.SingleOrDefault(x => x.Guid == SelectedVersion.Guid); - - realVersion.Version = CurrentVersion.Version; - realVersion.Name = CurrentVersion.Name; - - realVersion.HardwareDancers.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwareMotors.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwarePidControls.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwareWinders.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwareSpeedSensors.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwareBlowers.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - realVersion.HardwareBreakSensors.ToList().ForEach(x => x.DefferedDelete(Adapter.Context)); - - realVersion.HardwareDancers.Clear(); - realVersion.HardwareMotors.Clear(); - realVersion.HardwarePidControls.Clear(); - realVersion.HardwareWinders.Clear(); - realVersion.HardwareSpeedSensors.Clear(); - realVersion.HardwareBlowers.Clear(); - realVersion.HardwareBreakSensors.Clear(); - - foreach (var type in SelectedDancerTypes) - { - var item = CurrentVersion.HardwareDancers.SingleOrDefault(x => x.HardwareDancerType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareDancers.Add(item); - } - else - { - realVersion.HardwareDancers.Add(new HardwareDancer() - { - HardwareVersionGuid = realVersion.Guid, - HardwareDancerType = type - }); - } - } - - foreach (var type in SelectedMotorTypes) - { - var item = CurrentVersion.HardwareMotors.SingleOrDefault(x => x.HardwareMotorType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareMotors.Add(item); - } - else - { - realVersion.HardwareMotors.Add(new HardwareMotor() - { - HardwareVersionGuid = realVersion.Guid, - HardwareMotorType = type - }); - } - } - - foreach (var type in SelectedPidControlTypes) - { - var item = CurrentVersion.HardwarePidControls.SingleOrDefault(x => x.HardwarePidControlType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwarePidControls.Add(item); - } - else - { - realVersion.HardwarePidControls.Add(new HardwarePidControl() - { - HardwareVersionGuid = realVersion.Guid, - HardwarePidControlType = type - }); - } - } - - foreach (var type in SelectedWinderTypes) - { - var item = CurrentVersion.HardwareWinders.SingleOrDefault(x => x.HardwareWinderType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareWinders.Add(item); - } - else - { - realVersion.HardwareWinders.Add(new HardwareWinder() - { - HardwareVersionGuid = realVersion.Guid, - HardwareWinderType = type - }); - } - } - - foreach (var type in SelectedSpeedSensorTypes) - { - var item = CurrentVersion.HardwareSpeedSensors.SingleOrDefault(x => x.HardwareSpeedSensorType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareSpeedSensors.Add(item); - } - else - { - realVersion.HardwareSpeedSensors.Add(new HardwareSpeedSensor() - { - HardwareVersionGuid = realVersion.Guid, - HardwareSpeedSensorType = type - }); - } - } - - foreach (var type in SelectedBlowerTypes) - { - var item = CurrentVersion.HardwareBlowers.SingleOrDefault(x => x.HardwareBlowerType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareBlowers.Add(item); - } - else - { - realVersion.HardwareBlowers.Add(new HardwareBlower() - { - HardwareVersionGuid = realVersion.Guid, - HardwareBlowerType = type - }); - } - } - - foreach (var type in SelectedBreakSensorTypes) - { - var item = CurrentVersion.HardwareBreakSensors.SingleOrDefault(x => x.HardwareBreakSensorType == type); - if (item != null) - { - item.HardwareVersionGuid = realVersion.Guid; - realVersion.HardwareBreakSensors.Add(item); - } - else - { - realVersion.HardwareBreakSensors.Add(new HardwareBreakSensor() - { - HardwareVersionGuid = realVersion.Guid, - HardwareBreakSensorType = type - }); - } - } - } - + _db.SaveChanges(); + RefreshVersions(); - - if (_isNew) + InvokeUI(() => { - Adapter.Context.HardwareVersions.Add(realVersion); - } - - realVersion.Save(Adapter.Context); - - SelectedVersion = Adapter.HardwareVersions.SingleOrDefault(x => x.Guid == realVersion.Guid); + SelectedVersion = HardwareVersions.SingleOrDefault(x => x.Guid == CurrentVersion.Guid); + }); }); } + catch (Exception ex) + { + LogManager.Log(ex, "Could not save hardware version."); + _notification.ShowError($"An error occurred while trying to save this hardware version.\n{ex.Message}"); + } } } @@ -615,55 +303,59 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels { using (_notification.PushTaskItem("Cloning hardware configuration...")) { - await Task.Factory.StartNew(() => + try { - var realVersion = CurrentVersion.Clone(); - realVersion.Name = name; - realVersion.Version = 1; - - realVersion.HardwareMotors.ToList().Where(x => !SelectedMotorTypes.Contains(x.HardwareMotorType)).ToList().ForEach(x => realVersion.HardwareMotors.Remove(x)); - realVersion.HardwareDancers.ToList().Where(x => !SelectedDancerTypes.Contains(x.HardwareDancerType)).ToList().ForEach(x => realVersion.HardwareDancers.Remove(x)); - realVersion.HardwarePidControls.ToList().Where(x => !SelectedPidControlTypes.Contains(x.HardwarePidControlType)).ToList().ForEach(x => realVersion.HardwarePidControls.Remove(x)); - realVersion.HardwareWinders.ToList().Where(x => !SelectedWinderTypes.Contains(x.HardwareWinderType)).ToList().ForEach(x => realVersion.HardwareWinders.Remove(x)); - realVersion.HardwareSpeedSensors.ToList().Where(x => !SelectedSpeedSensorTypes.Contains(x.HardwareSpeedSensorType)).ToList().ForEach(x => realVersion.HardwareSpeedSensors.Remove(x)); - realVersion.HardwareBlowers.ToList().Where(x => !SelectedBlowerTypes.Contains(x.HardwareBlowerType)).ToList().ForEach(x => realVersion.HardwareBlowers.Remove(x)); - realVersion.HardwareBreakSensors.ToList().Where(x => !SelectedBreakSensorTypes.Contains(x.HardwareBreakSensorType)).ToList().ForEach(x => realVersion.HardwareBreakSensors.Remove(x)); - - realVersion.HardwareMotors.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwareDancers.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwarePidControls.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwareWinders.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwareSpeedSensors.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwareBlowers.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - realVersion.HardwareBreakSensors.ToList().ForEach(x => x.HardwareVersionGuid = realVersion.Guid); - - realVersion.HardwareMotors.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwareDancers.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwarePidControls.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwareWinders.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwareSpeedSensors.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwareBlowers.ToList().ForEach(x => x.HardwareVersion = realVersion); - realVersion.HardwareBreakSensors.ToList().ForEach(x => x.HardwareVersion = realVersion); - - Adapter.Context.HardwareVersions.Add(realVersion); - realVersion.Save(Adapter.Context); - - SelectedVersion = Adapter.HardwareVersions.SingleOrDefault(x => x.Guid == realVersion.Guid); - }); + await Task.Factory.StartNew(() => + { + var cloned = CurrentVersion.Clone(); + cloned.Name = name; + cloned.Version = HardwareVersions.Max(x => x.Version) + 1; + _db.HardwareVersions.Add(cloned); + _db.SaveChanges(); + RefreshVersions(); + + InvokeUI(() => + { + SelectedVersion = HardwareVersions.SingleOrDefault(x => x.Guid == cloned.Guid); + }); + }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Could not clone hardware version."); + _notification.ShowError($"An error occurred while trying to clone this hardware version.\n{ex.Message}"); + } } } } + } - private void Delete() + private async void Delete() { if (_notification.ShowQuestion("Are you sure you want to delete this hardware version?")) { using (_notification.PushTaskItem("Deleting hardware version...")) { - SelectedVersion.DeleteAsync(Adapter.Context); - SelectedVersion = null; - CurrentVersion = null; + try + { + await CurrentVersion.DeleteCascadeAsync(_db); + + await Task.Factory.StartNew(() => + { + SelectedVersion = null; + RefreshVersions(); + + CurrentVersion = new HardwareVersion(); + CreateDefaultView(); + InvalidateRelayCommands(); + }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Could not delete hardware version."); + _notification.ShowError($"An error occurred while trying to delete this hardware version.\n{ex.Message}"); + } } } } -- cgit v1.3.1 From f3ed76912f8dc895023b2afb92d605ddde1f0c42 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 22 Aug 2018 17:36:01 +0300 Subject: DB Module with lazy loading working... --- Software/DB/Tango.mdf | Bin 75497472 -> 75497472 bytes Software/DB/Tango_log.ldf | Bin 15400960 -> 15400960 bytes .../ViewModels/MainViewVM.cs | 32 ++++++++ .../Tango.MachineStudio.DB/Views/MainDBView.xaml | 14 ++++ .../ViewModels/MainViewVM.cs | 88 +++++++++++---------- .../ViewModels/MainViewVM.cs | 22 +++--- .../Tango.MachineStudio.UI.csproj | 4 + .../Tango.BL/ObservablesContextExtension.cs | 33 ++++++++ .../Tango.BL/ObservablesEntitiesAdapter.cs | 61 +------------- 9 files changed, 143 insertions(+), 111 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf index fb8249119..bc799ae05 100644 Binary files a/Software/DB/Tango.mdf and b/Software/DB/Tango.mdf differ diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf index febefe0d5..01ebc50c0 100644 Binary files a/Software/DB/Tango_log.ldf and b/Software/DB/Tango_log.ldf differ diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs index 727436306..2f3419d67 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using System.Windows; using Tango.BL; using Tango.BL.Entities; +using Tango.Core.Commands; using Tango.Core.DI; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.StudioApplication; @@ -16,9 +17,40 @@ namespace Tango.MachineStudio.DB.ViewModels { public class MainViewVM : StudioViewModel { + private bool _isLoading; + public bool IsLoading + { + get { return _isLoading; } + set { _isLoading = value; RaisePropertyChangedAuto(); } + } + + private bool _notLoaded; + public bool NotLoaded + { + get { return _notLoaded; } + set { _notLoaded = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand LoadCommand { get; set; } + public MainViewVM() : base() { + NotLoaded = true; + LoadCommand = new RelayCommand(LoadAdapter,() => !IsLoading); + } + + private async void LoadAdapter() + { + IsLoading = true; + InvalidateRelayCommands(); + + await Task.Factory.StartNew(() => + { + ObservablesEntitiesAdapter.Instance.Initialize(); + }); + IsLoading = false; + NotLoaded = false; } public override void OnModuleRequest(params object[] args) diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/MainDBView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/MainDBView.xaml index a6edd80da..050ce5f31 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/MainDBView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Views/MainDBView.xaml @@ -6,6 +6,7 @@ xmlns:dockablz="clr-namespace:Dragablz.Dockablz;assembly=Dragablz" xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz" xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" + xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:managers="clr-namespace:Tango.MachineStudio.DB.Managers" @@ -154,5 +155,18 @@ + + + + + The Database module is considered obsolete and will be removed in the future. + + Loading the module will require some time and memory. + + + + + + diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs index ab2b99dbd..9e67c247b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs @@ -137,75 +137,79 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels CurrentVersion = _db.GetHardwareVersion(x => x.Guid == selectedVersion.Guid); - ObservablesStaticCollections.Instance.HardwareMotorTypes.Where(x => !CurrentVersion.HardwareMotors.ToList().Exists(y => y.HardwareMotorType.Code == x.Code)).ToList().ForEach(x => + + InvokeUINow(() => { - CurrentVersion.HardwareMotors.Add(new HardwareMotor() + ObservablesStaticCollections.Instance.HardwareMotorTypes.Where(x => !CurrentVersion.HardwareMotors.ToList().Exists(y => y.HardwareMotorType.Code == x.Code)).ToList().ForEach(x => { - HardwareMotorType = _db.HardwareMotorTypes.SingleOrDefault(y => y.Code == x.Code), + CurrentVersion.HardwareMotors.Add(new HardwareMotor() + { + HardwareMotorType = _db.HardwareMotorTypes.SingleOrDefault(y => y.Code == x.Code), + }); }); - }); - CurrentVersion.HardwareMotors = CurrentVersion.HardwareMotors.OrderBy(x => x.HardwareMotorType.Code).ToObservableCollection(); + CurrentVersion.HardwareMotors = CurrentVersion.HardwareMotors.OrderBy(x => x.HardwareMotorType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwareDancerTypes.Where(x => !CurrentVersion.HardwareDancers.ToList().Exists(y => y.HardwareDancerType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwareDancers.Add(new HardwareDancer() + ObservablesStaticCollections.Instance.HardwareDancerTypes.Where(x => !CurrentVersion.HardwareDancers.ToList().Exists(y => y.HardwareDancerType.Code == x.Code)).ToList().ForEach(x => { - HardwareDancerType = _db.HardwareDancerTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwareDancers.Add(new HardwareDancer() + { + HardwareDancerType = _db.HardwareDancerTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwareDancers = CurrentVersion.HardwareDancers.OrderBy(x => x.HardwareDancerType.Code).ToObservableCollection(); + CurrentVersion.HardwareDancers = CurrentVersion.HardwareDancers.OrderBy(x => x.HardwareDancerType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwarePidControlTypes.Where(x => !CurrentVersion.HardwarePidControls.ToList().Exists(y => y.HardwarePidControlType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwarePidControls.Add(new HardwarePidControl() + ObservablesStaticCollections.Instance.HardwarePidControlTypes.Where(x => !CurrentVersion.HardwarePidControls.ToList().Exists(y => y.HardwarePidControlType.Code == x.Code)).ToList().ForEach(x => { - HardwarePidControlType = _db.HardwarePidControlTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwarePidControls.Add(new HardwarePidControl() + { + HardwarePidControlType = _db.HardwarePidControlTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwarePidControls = CurrentVersion.HardwarePidControls.OrderBy(x => x.HardwarePidControlType.Code).ToObservableCollection(); + CurrentVersion.HardwarePidControls = CurrentVersion.HardwarePidControls.OrderBy(x => x.HardwarePidControlType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwareWinderTypes.Where(x => !CurrentVersion.HardwareWinders.ToList().Exists(y => y.HardwareWinderType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwareWinders.Add(new HardwareWinder() + ObservablesStaticCollections.Instance.HardwareWinderTypes.Where(x => !CurrentVersion.HardwareWinders.ToList().Exists(y => y.HardwareWinderType.Code == x.Code)).ToList().ForEach(x => { - HardwareWinderType = _db.HardwareWinderTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwareWinders.Add(new HardwareWinder() + { + HardwareWinderType = _db.HardwareWinderTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwareWinders = CurrentVersion.HardwareWinders.OrderBy(x => x.HardwareWinderType.Code).ToObservableCollection(); + CurrentVersion.HardwareWinders = CurrentVersion.HardwareWinders.OrderBy(x => x.HardwareWinderType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwareSpeedSensorTypes.Where(x => !CurrentVersion.HardwareSpeedSensors.ToList().Exists(y => y.HardwareSpeedSensorType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwareSpeedSensors.Add(new HardwareSpeedSensor() + ObservablesStaticCollections.Instance.HardwareSpeedSensorTypes.Where(x => !CurrentVersion.HardwareSpeedSensors.ToList().Exists(y => y.HardwareSpeedSensorType.Code == x.Code)).ToList().ForEach(x => { - HardwareSpeedSensorType = _db.HardwareSpeedSensorTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwareSpeedSensors.Add(new HardwareSpeedSensor() + { + HardwareSpeedSensorType = _db.HardwareSpeedSensorTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwareSpeedSensors = CurrentVersion.HardwareSpeedSensors.OrderBy(x => x.HardwareSpeedSensorType.Code).ToObservableCollection(); + CurrentVersion.HardwareSpeedSensors = CurrentVersion.HardwareSpeedSensors.OrderBy(x => x.HardwareSpeedSensorType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwareBlowerTypes.Where(x => !CurrentVersion.HardwareBlowers.ToList().Exists(y => y.HardwareBlowerType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwareBlowers.Add(new HardwareBlower() + ObservablesStaticCollections.Instance.HardwareBlowerTypes.Where(x => !CurrentVersion.HardwareBlowers.ToList().Exists(y => y.HardwareBlowerType.Code == x.Code)).ToList().ForEach(x => { - HardwareBlowerType = _db.HardwareBlowerTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwareBlowers.Add(new HardwareBlower() + { + HardwareBlowerType = _db.HardwareBlowerTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwareBlowers = CurrentVersion.HardwareBlowers.OrderBy(x => x.HardwareBlowerType.Code).ToObservableCollection(); + CurrentVersion.HardwareBlowers = CurrentVersion.HardwareBlowers.OrderBy(x => x.HardwareBlowerType.Code).ToObservableCollection(); - ObservablesStaticCollections.Instance.HardwareBreakSensorTypes.Where(x => !CurrentVersion.HardwareBreakSensors.ToList().Exists(y => y.HardwareBreakSensorType.Code == x.Code)).ToList().ForEach(x => - { - CurrentVersion.HardwareBreakSensors.Add(new HardwareBreakSensor() + ObservablesStaticCollections.Instance.HardwareBreakSensorTypes.Where(x => !CurrentVersion.HardwareBreakSensors.ToList().Exists(y => y.HardwareBreakSensorType.Code == x.Code)).ToList().ForEach(x => { - HardwareBreakSensorType = _db.HardwareBreakSensorTypes.SingleOrDefault(y => y.Code == x.Code) + CurrentVersion.HardwareBreakSensors.Add(new HardwareBreakSensor() + { + HardwareBreakSensorType = _db.HardwareBreakSensorTypes.SingleOrDefault(y => y.Code == x.Code) + }); }); - }); - CurrentVersion.HardwareBreakSensors = CurrentVersion.HardwareBreakSensors.OrderBy(x => x.HardwareBreakSensorType.Code).ToObservableCollection(); + CurrentVersion.HardwareBreakSensors = CurrentVersion.HardwareBreakSensors.OrderBy(x => x.HardwareBreakSensorType.Code).ToObservableCollection(); + }); } private async void OnSelectedVersionChanged() @@ -240,7 +244,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels if (!String.IsNullOrWhiteSpace(name)) { - using (_notification.PushTaskItem("Creating new machine versions...")) + using (_notification.PushTaskItem("Creating new machine version...")) { await Task.Factory.StartNew(() => { diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs index 344d677ff..56888e631 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs @@ -193,19 +193,21 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels } } - private void LoadSelectedUser() + private async void LoadSelectedUser() { using (_notification.PushTaskItem("Loading user details...")) { - Task.Factory.StartNew(() => + await Task.Factory.StartNew(() => { _userContext = ObservablesContext.CreateDefault(); + _userContext.Configuration.LazyLoadingEnabled = false; + Roles = _userContext.Roles.ToObservableCollection(); - ManagedUser = _userContext.Users.SingleOrDefault(x => x.Guid == SelectedUser.Guid); + ManagedUser = _userContext.GetUser(SelectedUser.Guid); ManagedUserRoles = ManagedUser.Roles.ToObservableCollection(); - - InvokeUI(() => _navigation.NavigateTo(UsersAndRolesNavigationView.UserManagementView)); }); + + _navigation.NavigateTo(UsersAndRolesNavigationView.UserManagementView); } } @@ -248,17 +250,19 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels } } - private void LoadSelectedOrganization() + private async void LoadSelectedOrganization() { using (_notification.PushTaskItem("Loading organization...")) { - Task.Factory.StartNew(() => + await Task.Factory.StartNew(() => { _manageContext = ObservablesContext.CreateDefault(); - ManagedOrganization = _manageContext.Organizations.SingleOrDefault(x => x.Guid == SelectedOrganization.Guid); + _manageContext.Configuration.LazyLoadingEnabled = false; - InvokeUI(() => _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView)); + ManagedOrganization = _manageContext.GetOrganizationAndUsers(SelectedOrganization.Guid); }); + + _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index fe585c39d..4ded3b300 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -408,6 +408,10 @@ {fc337a7f-1214-41d8-9992-78092a3b961e} Tango.MachineStudio.DataCapture + + {94f7acf8-55e1-4a02-b9bc-a818413fdbbf} + Tango.MachineStudio.DB + {ce4a0d11-08a2-4cd6-9908-d6c62e80d805} Tango.MachineStudio.Developer diff --git a/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs b/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs index 8d3389d32..d265fbe01 100644 --- a/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs +++ b/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs @@ -223,6 +223,39 @@ namespace Tango.BL return LiquidTypesRmls.Where(x => x.RmlGuid == rmlGuid).ToObservableCollection(); } + public Organization GetOrganizationAndUsers(String organizationGuid) + { + var org = Organizations.SingleOrDefault(x => x.Guid == organizationGuid); + + org.Address = Addresses.SingleOrDefault(x => x.Guid == org.AddressGuid); + org.Contact = Contacts.SingleOrDefault(x => x.Guid == org.ContactGuid); + + Roles.Load(); + Permissions.Load(); + RolesPermissions.Load(); + + + org.Users = Users.Where(x => x.OrganizationGuid == organizationGuid) + .Include(x => x.Address) + .Include(x => x.Contact) + .Include(x => x.UsersRoles).ToObservableCollection(); + + return org; + } + + public User GetUser(String userGuid) + { + Roles.Load(); + Permissions.Load(); + RolesPermissions.Load(); + + return Users.Where(x => x.Guid == userGuid) + .Include(x => x.Address) + .Include(x => x.Contact) + .Include(x => x.UsersRoles) + .FirstOrDefault(); + } + #endregion } } diff --git a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs index 149567d7b..fdc359da0 100644 --- a/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs +++ b/Software/Visual_Studio/Tango.BL/ObservablesEntitiesAdapter.cs @@ -121,55 +121,16 @@ namespace Tango.BL { _syncLock = new object(); - if (initializing) - { - //Remove Unlinked Configurations.. - List remove_configurations = new List(); - - foreach (var config in Context.Configurations) - { - if (Context.MachineVersions.FirstOrDefault(x => x.DefaultConfigurationGuid == config.Guid) != null) - { - continue; - } - - if (Context.MachinesConfigurations.FirstOrDefault(x => x.ConfigurationGuid == config.Guid) != null) - { - continue; - } - - if (Context.Machines.FirstOrDefault(x => x.ConfigurationGuid == config.Guid) != null) - { - continue; - } - - remove_configurations.Add(config); - } - - foreach (var config in remove_configurations) - { - Context.Configurations.Remove(config); - } - - Context.SaveChanges(); - //Remove Unlinked Configurations.. - } - Organizations = Context.Organizations.ToObservableCollection(); Machines = Context.Machines.ToObservableCollection(); - foreach (var machine in Machines) - { - machine.MachinesConfigurations = machine.MachinesConfigurations.OrderByDescending(x => x.Configuration.CreationDate).Take(30).ToObservableCollection(); - //machine.Jobs = machine.Jobs.OrderByDescending(x => x.CreationDate).ToObservableCollection(); //No need to load jobs. - } - MachinesConfigurations = Context.MachinesConfigurations.ToObservableCollection(); MachineVersions = Context.MachineVersions.ToList().OrderBy(x => x.Version).ToObservableCollection(); Addresses = Context.Addresses.Where(x => !x.Deleted).ToList().OrderBy(x => x.AddressString).ToObservableCollection(); + Contacts = Context.Contacts.Where(x => !x.Deleted).ToList().OrderBy(x => x.FullName).ToObservableCollection(); Roles = Context.Roles.ToList().OrderBy(x => x.Name).ToObservableCollection(); @@ -180,11 +141,6 @@ namespace Tango.BL Users = Context.Users.Where(x => !x.Deleted).ToList().OrderBy(x => x.Contact.FullName).ToObservableCollection(); - //foreach (var user in Users) - //{ - // user.UsersRoles = user.UsersRoles.Where(x => !x.Deleted).ToObservableCollection(); - //} - foreach (var role in Roles) { role.RolesPermissions = role.RolesPermissions.ToObservableCollection(); @@ -319,21 +275,6 @@ namespace Tango.BL { InitCollectionSources(); }); - - //var action = ActionTypes.First(); - - //action.Name = "Action 1 Yesss"; - - //SaveChanges(); - - //BindingOperations.EnableCollectionSynchronization(Machines, _syncLock); - //BindingOperations.EnableCollectionSynchronization(MachinesViewSource, _syncLock); - - //BindingOperations.EnableCollectionSynchronization(MachinesConfigurations, _syncLock); - //BindingOperations.EnableCollectionSynchronization(MachinesConfigurationsViewSource, _syncLock); - - //BindingOperations.EnableCollectionSynchronization(EventTypesActions, _syncLock); - //BindingOperations.EnableCollectionSynchronization(EventTypesActionsViewSource, _syncLock); } catch (Exception ex) { -- cgit v1.3.1 From 439ee2d80eab039c2dee00f697d2d814ec67247e Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 22 Aug 2018 18:33:29 +0300 Subject: Added IsFree to base ViewModel. Implemented IsFree on HardwareVersions & ColorLab modules. --- .../ViewModels/MainViewVM.cs | 40 ++++++++++++++--- .../Views/MainView.xaml | 6 +-- .../Views/JobView.xaml | 4 +- .../ViewModels/MainViewVM.cs | 36 ++++++++++++--- .../Views/MainView.xaml | 6 +-- .../Tango.MachineStudio.Common/StudioViewModel.cs | 17 ------- .../ViewModels/UpdateViewVM.cs | 3 ++ Software/Visual_Studio/Tango.SharedUI/ViewModel.cs | 52 +++++++++------------- 8 files changed, 99 insertions(+), 65 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs index 3764e00de..5c513af9e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs @@ -239,6 +239,12 @@ namespace Tango.MachineStudio.ColorLab.ViewModels #endregion + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// The notification. public MainViewVM(INotificationProvider notification) : base() { _notification = notification; @@ -248,20 +254,28 @@ namespace Tango.MachineStudio.ColorLab.ViewModels SourceColor = new RgbVM(); SourceColor.ColorChanged += SourceColor_ColorChanged; - ImportForwardDataCommand = new RelayCommand(ImportForwardData, () => SelectedRML != null); - ImportInverseDataCommand = new RelayCommand(ImportInverseData, () => SelectedRML != null); + ImportForwardDataCommand = new RelayCommand(ImportForwardData, () => SelectedRML != null && IsFree); + ImportInverseDataCommand = new RelayCommand(ImportInverseData, () => SelectedRML != null && IsFree); - ExportForwardDataCommand = new RelayCommand(ExportForwardData, () => SelectedRML != null && CCT != null && CCT.ForwardFileName != null); - ExportInverseDataCommand = new RelayCommand(ExportInverseData, () => SelectedRML != null && CCT != null && CCT.InverseFileName != null); + ExportForwardDataCommand = new RelayCommand(ExportForwardData, () => SelectedRML != null && CCT != null && CCT.ForwardFileName != null && IsFree); + ExportInverseDataCommand = new RelayCommand(ExportInverseData, () => SelectedRML != null && CCT != null && CCT.InverseFileName != null && IsFree); - SaveCommand = new RelayCommand(Save, () => SelectedRML != null); + SaveCommand = new RelayCommand(Save, () => SelectedRML != null && IsFree); } + #endregion + + #region Event Handlers + private void SourceColor_ColorChanged(object sender, Color e) { GetHiveSuggestions(); } + #endregion + + #region Application Ready + public override void OnApplicationReady() { base.OnApplicationReady(); @@ -277,6 +291,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels }); } + #endregion + #region ColorLab private void GetHiveSuggestions() @@ -427,6 +443,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { if (SelectedMachine != null) { + IsFree = false; + _dbContext.GetConfiguration(x => x.Guid == SelectedMachine.ConfigurationGuid); LiquidVolumes = SelectedMachine.Configuration.NoneEmptyIdsPacks.OrderBy(x => x.PackIndex).Select(x => new LiquidVolumeVM() @@ -445,6 +463,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels SelectedMachine.Modified -= SelectedMachine_Modified; SelectedMachine.Modified += SelectedMachine_Modified; + + IsFree = true; } } @@ -534,6 +554,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { if (SelectedRML != null && SelectedMachine != null) { + IsFree = false; + await Task.Factory.StartNew(() => { using (_notification.PushTaskItem("Loading RML data...")) @@ -581,6 +603,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels } } }); + + IsFree = true; } } @@ -594,6 +618,8 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { try { + IsFree = false; + if (_isNewCCT) { _dbContext.Ccts.Add(CCT); @@ -631,6 +657,10 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { _notification.ShowError(LogManager.Log(ex, "An error occurred while trying to save to data base.").Message + Environment.NewLine + ex.Message); } + finally + { + IsFree = true; + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml index d8ef015be..78eaf04e8 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml @@ -35,7 +35,7 @@ - +