aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-13 15:19:55 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-13 15:19:55 +0200
commit2a51f05523c1397b77eca5e5188520919205638c (patch)
treeedc40c2ca201be6e881ea6746469fb5cb412e8bc /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels
parent2c376ac3ae651dd6c6592cc4cbf72768dc97a93d (diff)
downloadTango-2a51f05523c1397b77eca5e5188520919205638c.tar.gz
Tango-2a51f05523c1397b77eca5e5188520919205638c.zip
Successfully separated Machine Studio to modules...
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/AddressesViewVM.cs17
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs219
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DialogOpenMode.cs14
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/EntityViewModel.cs31
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MachinesViewVM.cs26
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs19
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MultiComboVM.cs44
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/OrganizationsViewVM.cs26
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/UsersViewVM.cs77
9 files changed, 473 insertions, 0 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/AddressesViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/AddressesViewVM.cs
new file mode 100644
index 000000000..c5f95c803
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/AddressesViewVM.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Notifications;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public class AddressesViewVM : DbTableViewModel<Address>
+ {
+ public AddressesViewVM(INotificationProvider notification) : base(notification)
+ {
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs
new file mode 100644
index 000000000..db72055df
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DbTableViewModel.cs
@@ -0,0 +1,219 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.DB.Managers;
+using Tango.SharedUI;
+using Tango.MachineStudio.DB.ExtensionMethods;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public abstract class DbTableViewModel<T> : ViewModel where T : IObservableEntity
+ {
+ private INotificationProvider _notification;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DbTableViewModel"/> class.
+ /// </summary>
+ public DbTableViewModel(INotificationProvider notification) : base()
+ {
+ _notification = notification;
+ Adapter = ObservablesEntitiesAdapter.Instance;
+
+ AddCommand = new RelayCommand(OnAdd);
+ EditCommand = new RelayCommand(OnEdit);
+ DeleteCommand = new RelayCommand(OnDelete);
+ DialogOKCommand = new RelayCommand(() => OnDialogOKPressed(DialogOpenMode, EditEntity));
+ DialogCancelCommand = new RelayCommand(() => OnDialogCancelPressed(DialogOpenMode, EditEntity));
+
+ IsDialogOpen = false;
+ }
+
+ private T _editEntity;
+ /// <summary>
+ /// Gets or sets the edit entity.
+ /// </summary>
+ public T EditEntity
+ {
+ get { return _editEntity; }
+ set { _editEntity = value; RaisePropertyChangedAuto(); }
+ }
+
+ private DialogOpenMode _dialogOpenMode;
+ /// <summary>
+ /// Gets or sets the dialog open mode.
+ /// </summary>
+ public DialogOpenMode DialogOpenMode
+ {
+ get { return _dialogOpenMode; }
+ set { _dialogOpenMode = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isDialogOpen;
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is dialog open.
+ /// </summary>
+ public bool IsDialogOpen
+ {
+ get { return _isDialogOpen; }
+ set { _isDialogOpen = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservablesEntitiesAdapter _adapter;
+ /// <summary>
+ /// Gets or sets the DB adapter.
+ /// </summary>
+ public ObservablesEntitiesAdapter Adapter
+ {
+ get { return _adapter; }
+ set { _adapter = value; RaisePropertyChangedAuto(); }
+ }
+
+ private T _selectedEntity;
+ /// <summary>
+ /// Gets or sets the selected entity.
+ /// </summary>
+ public T SelectedEntity
+ {
+ get { return _selectedEntity; }
+ set { _selectedEntity = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _filter;
+ /// <summary>
+ /// Gets or sets the search filter.
+ /// </summary>
+ public String Filter
+ {
+ get { return _filter; }
+ set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the dialog OK command.
+ /// </summary>
+ public RelayCommand DialogOKCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the dialog cancel command.
+ /// </summary>
+ public RelayCommand DialogCancelCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the add command.
+ /// </summary>
+ public RelayCommand AddCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the edit command.
+ /// </summary>
+ public RelayCommand EditCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the delete command.
+ /// </summary>
+ public RelayCommand DeleteCommand { get; set; }
+
+ /// <summary>
+ /// Called when delete command invoked.
+ /// </summary>
+ protected virtual void OnDelete()
+ {
+ SelectedEntity.Deleted = true;
+ SelectedEntity.Save();
+ }
+
+ /// <summary>
+ /// Called when edit command invoked.
+ /// </summary>
+ protected virtual void OnEdit()
+ {
+ DialogOpenMode = DialogOpenMode.Editing;
+ EditEntity = GetEditableEntity(DialogOpenMode);
+ _notification.ShowDialog(DialogOpenMode, this);
+ IsDialogOpen = true;
+ }
+
+ /// <summary>
+ /// Called when add command invoked.
+ /// </summary>
+ protected virtual void OnAdd()
+ {
+ DialogOpenMode = DialogOpenMode.Adding;
+ EditEntity = GetEditableEntity(DialogOpenMode);
+ _notification.ShowDialog(DialogOpenMode, this);
+ IsDialogOpen = true;
+ }
+
+ /// <summary>
+ /// Called when dialog closes with OK button.
+ /// </summary>
+ /// <param name="mode">The mode.</param>
+ protected virtual void OnDialogOKPressed(DialogOpenMode mode, T entity)
+ {
+ if (mode == DialogOpenMode.Editing)
+ {
+ entity.ShallowCopyTo(SelectedEntity);
+ entity = SelectedEntity;
+ }
+
+ OnBeforeEntitySave(mode, entity);
+
+ entity.Save();
+ IsDialogOpen = false;
+ SelectedEntity = EditEntity;
+ }
+
+ /// <summary>
+ /// Called when [before entity save].
+ /// </summary>
+ /// <param name="mode">The mode.</param>
+ /// <param name="entity">The entity.</param>
+ protected virtual void OnBeforeEntitySave(DialogOpenMode mode,T entity)
+ {
+
+ }
+
+ /// <summary>
+ /// Called when dialog closes with cancel button.
+ /// </summary>
+ /// <param name="mode">The mode.</param>
+ protected virtual void OnDialogCancelPressed(DialogOpenMode mode, T entity)
+ {
+ IsDialogOpen = false;
+ }
+
+ /// <summary>
+ /// Gets the editable entity.
+ /// </summary>
+ /// <param name="mode">The mode.</param>
+ /// <returns></returns>
+ private T GetEditableEntity(DialogOpenMode mode)
+ {
+ if (mode == DialogOpenMode.Adding)
+ {
+ var newEntity = Activator.CreateInstance<T>();
+ InitializeEntity(newEntity);
+ return newEntity;
+ }
+ else
+ {
+ return SelectedEntity.ShallowClone();
+ }
+ }
+
+ protected virtual void OnFilterChanged(String filter)
+ {
+
+ }
+
+ protected virtual void InitializeEntity(T entity)
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DialogOpenMode.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DialogOpenMode.cs
new file mode 100644
index 000000000..7a7e9bd41
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/DialogOpenMode.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public enum DialogOpenMode
+ {
+ Editing,
+ Adding,
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/EntityViewModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/EntityViewModel.cs
new file mode 100644
index 000000000..946a73088
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/EntityViewModel.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.DB.ViewModels
+{
+ public class EntityViewModel<T> : ViewModel
+ {
+ private T _entity;
+
+ public T Entity
+ {
+ get { return _entity; }
+ set { _entity = value; RaisePropertyChanged(nameof(Entity)); }
+ }
+
+ public EntityViewModel() : base()
+ {
+
+ }
+
+ public EntityViewModel(T entity) : this()
+ {
+ Entity = entity;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MachinesViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MachinesViewVM.cs
new file mode 100644
index 000000000..fd2f88c2f
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MachinesViewVM.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Notifications;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public class MachinesViewVM : DbTableViewModel<Machine>
+ {
+ public MachinesViewVM(INotificationProvider notification) : base(notification)
+ {
+ }
+
+ protected override void InitializeEntity(Machine entity)
+ {
+ base.InitializeEntity(entity);
+ entity.ProductionDate = DateTime.Now;
+ }
+ }
+}
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
new file mode 100644
index 000000000..11c0adc0e
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MainViewVM.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.DB.ViewModels
+{
+ public class MainViewVM : ViewModel
+ {
+ public String Text { get; set; }
+
+ public MainViewVM() : base()
+ {
+ Text = "Hi ROy";
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MultiComboVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MultiComboVM.cs
new file mode 100644
index 000000000..4a3709050
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/MultiComboVM.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public class MultiComboVM<T> : EntityViewModel<T>
+ {
+ private Action _onSelectionChanged;
+
+ public event EventHandler SelectionChanged;
+
+ public MultiComboVM(T entity) : base(entity)
+ {
+
+ }
+
+ public MultiComboVM(T entity, Action onSelectionChanged) : this(entity)
+ {
+ _onSelectionChanged = onSelectionChanged;
+ }
+
+ private bool _isSelected;
+
+ public bool IsSelected
+ {
+ get { return _isSelected; }
+ set { _isSelected = value; RaisePropertyChangedAuto(); OnSelectionChanged(); }
+ }
+
+ protected virtual void OnSelectionChanged()
+ {
+ if (_onSelectionChanged != null)
+ {
+ _onSelectionChanged();
+ }
+
+ SelectionChanged?.Invoke(this, new EventArgs());
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/OrganizationsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/OrganizationsViewVM.cs
new file mode 100644
index 000000000..ff0ec3b77
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/OrganizationsViewVM.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Notifications;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public class OrganizationsViewVM : DbTableViewModel<Organization>
+ {
+ public OrganizationsViewVM(INotificationProvider notification) : base(notification)
+ {
+ }
+
+ protected override void OnFilterChanged(string filter)
+ {
+ Adapter.OrganizationsViewSource.Filter = (x) =>
+ {
+ var org = x as Organization;
+ return org.Name.Contains(filter);
+ };
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/UsersViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/UsersViewVM.cs
new file mode 100644
index 000000000..1dde969d6
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/ViewModels/UsersViewVM.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.DAL.Observables;
+using Tango.MachineStudio.Common.Notifications;
+
+namespace Tango.MachineStudio.DB.ViewModels.DBViewModels
+{
+ public class UsersViewVM : DbTableViewModel<User>
+ {
+ private ObservableCollection<MultiComboVM<Role>> _selectedRoles;
+
+ public UsersViewVM(INotificationProvider notification) : base(notification)
+ {
+ SelectedRoles = new ObservableCollection<MultiComboVM<Role>>();
+ }
+
+ public ObservableCollection<MultiComboVM<Role>> SelectedRoles
+ {
+ get { return _selectedRoles; }
+ set { _selectedRoles = value; RaisePropertyChangedAuto(); }
+ }
+
+ protected override void OnEdit()
+ {
+ SelectedRoles = Adapter.Roles.Select(x => new MultiComboVM<Role>(x, () => RaisePropertyChanged(nameof(SelectedRoles)))).ToObservableCollection();
+
+ foreach (var role in SelectedRoles)
+ {
+ if (SelectedEntity.UsersRoles.ToList().Exists(x => x.Role == role.Entity && !x.Deleted))
+ {
+ role.IsSelected = true;
+ }
+ }
+
+ base.OnEdit();
+ }
+
+ protected override void OnAdd()
+ {
+ SelectedRoles = Adapter.Roles.Select(x => new MultiComboVM<Role>(x, () => RaisePropertyChanged(nameof(SelectedRoles)))).ToObservableCollection();
+
+ base.OnAdd();
+ }
+
+ protected override void OnBeforeEntitySave(DialogOpenMode mode, User user)
+ {
+ base.OnBeforeEntitySave(mode, user);
+
+ foreach (var role in SelectedRoles)
+ {
+ var userRole = user.UsersRoles.SingleOrDefault(x => x.Role == role.Entity);
+
+ if (userRole != null)
+ {
+ userRole.Deleted = !role.IsSelected;
+ }
+ else
+ {
+ if (role.IsSelected)
+ {
+ user.UsersRoles.Add(new UsersRole()
+ {
+ Role = role.Entity,
+ User = user,
+ RoleGuid = role.Entity.Guid,
+ UserGuid = user.Guid
+ });
+ }
+ }
+ }
+ }
+ }
+}