|  | @@ -31,6 +31,23 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |          private Entity? _entity;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private Button? _process;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        private bool _isChanged;
 | 
	
		
			
				|  |  | +        private bool IsChanged
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            get => _isChanged;
 | 
	
		
			
				|  |  | +            set
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                if(_isChanged != value)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    _isChanged = value;
 | 
	
		
			
				|  |  | +                    Editor.HideButtons = !value;// (_entity?.IsChanged() != true) && (_originalID == _entityID);
 | 
	
		
			
				|  |  | +                    if (_process != null)
 | 
	
		
			
				|  |  | +                        _process.IsEnabled = value;// ((_entity?.ID ?? Guid.Empty) != Guid.Empty) || (_entity?.IsChanged() != false);
 | 
	
		
			
				|  |  | +                    _documents._dataEntryGrid.IsEnabled = !value;// (_entity?.IsChanged() != true) && (_originalID == _entityID);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          public void Select(Type? type, Guid id)
 | 
	
		
			
				|  |  |          {
 | 
	
	
		
			
				|  | @@ -67,6 +84,8 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |          public void Setup()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              _documents.Setup();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            IsChanged = false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          public void Refresh()
 | 
	
	
		
			
				|  | @@ -133,9 +152,9 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void Shutdown(CancelEventArgs? cancel)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (_entity?.IsChanged() == true)
 | 
	
		
			
				|  |  | +            if (cancel != null && _isChanged)
 | 
	
		
			
				|  |  |                  CheckSaved(cancel);
 | 
	
		
			
				|  |  | -            if (cancel.Cancel == false) 
 | 
	
		
			
				|  |  | +            if (cancel?.Cancel != true) 
 | 
	
		
			
				|  |  |                  _documents.Shutdown(cancel);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -181,8 +200,7 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              DetailBorder.Child = null;
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | -            CheckChanged();
 | 
	
		
			
				|  |  | +            IsChanged = false;
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |              //if (_popup is UIElement element)
 | 
	
		
			
				|  |  |              //    DetailHeader.Children.Remove(element);
 | 
	
	
		
			
				|  | @@ -202,9 +220,9 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |              Editor.SetValue(Grid.ColumnProperty, 0);
 | 
	
		
			
				|  |  |              Editor.SetValue(Grid.ColumnSpanProperty, 4);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            Editor.OnAfterEditorValueChanged += (sender, column) =>
 | 
	
		
			
				|  |  | +            Editor.OnAfterEditorValueChanged += (sender, args) =>
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                CheckChanged();
 | 
	
		
			
				|  |  | +                IsChanged = IsChanged || (_entity?.IsChanged() == true || _originalID != _entityID);
 | 
	
		
			
				|  |  |                  return null;
 | 
	
		
			
				|  |  |              };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -214,7 +232,7 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |                  _entityID = _originalID;
 | 
	
		
			
				|  |  |                  Select(_selectedType,_entityID);
 | 
	
		
			
				|  |  |              };
 | 
	
		
			
				|  |  | -            Editor.OnChanged += (sender, args) => CheckChanged();
 | 
	
		
			
				|  |  | +            Editor.OnChanged += (sender, args) => IsChanged = true;
 | 
	
		
			
				|  |  |              Editor.OnFormCustomiseEditor += (sender, items, column, editor) =>
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  if ((editor is BaseCodeEditor be) && editor.Editable.EditorVisible())
 | 
	
	
		
			
				|  | @@ -292,6 +310,7 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |              if (!cancel.Cancel)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  _originalID = _entityID;
 | 
	
		
			
				|  |  | +                IsChanged = false;
 | 
	
		
			
				|  |  |                  var row = _documents._dataEntryGrid.SelectedRows.FirstOrDefault();
 | 
	
		
			
				|  |  |                  if (row != null)
 | 
	
		
			
				|  |  |                  {
 | 
	
	
		
			
				|  | @@ -311,15 +330,6 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |                      
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            CheckChanged();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        private void CheckChanged()
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            Editor.HideButtons = (_entity?.IsChanged() != true) && (_originalID == _entityID);
 | 
	
		
			
				|  |  | -            if (_process != null)
 | 
	
		
			
				|  |  | -                _process.IsEnabled = ((_entity?.ID ?? Guid.Empty) != Guid.Empty) || (_entity?.IsChanged() != false);
 | 
	
		
			
				|  |  | -            _documents._dataEntryGrid.IsEnabled = (_entity?.IsChanged() != true) && (_originalID == _entityID);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private void PopulateEditor()
 | 
	
	
		
			
				|  | @@ -355,8 +365,7 @@ namespace PRSDesktop
 | 
	
		
			
				|  |  |              };
 | 
	
		
			
				|  |  |              _process.Click += (sender, args) => DoSave(true);
 | 
	
		
			
				|  |  |              Editor.AddButton(_process);
 | 
	
		
			
				|  |  | -            CheckChanged();
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +            IsChanged = false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |      }
 |