Esempio n. 1
0
        private Task Create(Func <Task <OperationResult <BeginNewResult <TDataOrder> > > > callback) =>
        OutsideModificationLocker.LockForDurationAsync(async() => {
            CriticalOperationType = CriticalOperationType.AddingNewRecord;

            await CreateToRun();

            OperationResult <BeginNewResult <TDataOrder> > operation =
                await callback();

            if (operation.WasSuccessful)
            {
                if (operation.Result.Type == BeginNewType.Refresh)
                {
                    await RefreshModelInformation(operation.Result.Id, true);
                }
                else if (operation.Result.Type == BeginNewType.Load)
                {
                    await RefreshSuccessful(operation.Result.Model);
                }
            }
            else
            {
                await CancelCallback();
            }
        });
Esempio n. 2
0
        protected override Task ConfirmCallback() =>
        OutsideModificationLocker.LockForDurationAsync(async() => {
            bool modifying = CriticalOperationType == CriticalOperationType.ModifyingRecord;

            OperationResult <ConfirmRecordResult> operation =
                await _interactor.CompleteConfirmation(Model);

            if (operation.WasSuccessful)
            {
                CriticalOperationType = CriticalOperationType.None;

                if (operation.Result.Id > 0)
                {
                    await RefreshModelInformation(operation.Result.Id, true);
                }
                else if (operation.Result.Types.Any(t => t == ConfirmRecordType.DoNotRefresh) == false)
                {
                    await RefreshModelInformation(Model.Id, modifying == false);
                }

                if (operation.Result.Types.Any(t => t == ConfirmRecordType.RefreshCollections))
                {
                    await RefreshCollections();
                    foreach (var locator in Locators)
                    {
                        await locator.RefreshCollections();
                    }
                }
            }
        });
        public AdminViewModel()
        {
            Navigation.New       = new AwaitableDelegateCommand(() => ConfirmCancelLocker.LockForDurationAsync(NewCallback), () => NewEnableCallback(NewEnable()));
            Navigation.Duplicate = new AwaitableDelegateCommand(() => ConfirmCancelLocker.LockForDurationAsync(DuplicateCallback), () => DuplicateEnableCallback(DuplicateEnable()));
            Navigation.Modify    = new AwaitableDelegateCommand(() => ConfirmCancelLocker.LockForDurationAsync(ModifyCallback), () => ModifyEnableCallback(ModifyEnable()));

            Navigation.ReloadCurrent = new AwaitableDelegateCommand(() => RefreshModelInformation(Model.Id), () => ReloadCurrentEnable());

            Navigation.Confirm = new AwaitableDelegateCommand(() => ConfirmCancelLocker.LockForDurationAsync(ConfirmCallback), () => ConfirmEnable());
            Navigation.Cancel  = new AwaitableDelegateCommand(() => ConfirmCancelLocker.LockForDurationAsync(CancelCallback), () => CancelEnable());

            Model.ErrorsChanged += Model_ErrorsChanged;

            _backForwardNavigator = new ExtendedNavigator <int>();
            SetUpNewNavigator();

            ConfirmCancelLocker.LockStatusChanged += (s, e) => {
                Navigation.New.RaiseCanExecuteChanged();
                Navigation.Duplicate.RaiseCanExecuteChanged();
                Navigation.Modify.RaiseCanExecuteChanged();
                Navigation.Confirm.RaiseCanExecuteChanged();
                Navigation.Cancel.RaiseCanExecuteChanged();
            };

            NewRecordCancelLocker.LockStatusChanged += (s, e) => {
                Navigation.Confirm.RaiseCanExecuteChanged();
                Navigation.Cancel.RaiseCanExecuteChanged();
            };

            OutsideModificationLocker.RequestLock(_modifyingToken);
            OutsideModificationLocker.LockStatusChanged += (s, e) => OnPropertyChanged(nameof(OutsideModificationAllowed));
        }
 /// <summary>
 /// Used to dispose of resources in use by the <see cref="AdminViewModel{TViewModel, TModel, TModelSearcher}"/>
 /// </summary>
 /// <param name="disposing"></param>
 protected override void Dispose(bool disposing)
 {
     if (!_disposedValue)
     {
         if (disposing)
         {
             ApplicationRestrictor.RequestUnlock(_adminToken);
             FamilialLocker.RequestUnlock(_adminToken);
             CriticalOperationType = CriticalOperationType.None;
             if (ModelSearcher != null)
             {
                 ModelSearcher.SelectedItems.CollectionChanged -= SelectedItems_CollectionChanged;
                 ModelSearcher.ExportId -= ModelSearcher_ExportId;
                 ModelSearcher.Cleared  -= ModelSearcher_Cleared;
                 ModelSearcher.RequestEnable(_adminToken);
             }
             Model.ErrorsChanged -= Model_ErrorsChanged;
             Model.Dispose();
             _newEnableCallback                               = null;
             _duplicateEnableCallback                         = null;
             _modifyEnableCallback                            = null;
             _backEnableCallback                              = null;
             _forwardEnableCallback                           = null;
             _performDeleteOnRecordEnableCallback             = null;
             _backForwardNavigator.CurrentItemChangedCallback = null;
             _backForwardNavigator?.Dispose();
             Navigation.Dispose();
             RecordChangeLocker.Dispose();
             ConfirmCancelLocker.Dispose();
             NewRecordCancelLocker.Dispose();
             NavigationalOverride.Dispose();
             OutsideModificationLocker.Dispose();
             DefaultModelCallback = null;
             Locators.ForEach(locator => {
                 locator.SearchToBegin   -= Locator_SearchToBegin;
                 locator.SearchComplete  -= Locator_SearchComplete;
                 locator.RecordRequested -= Locator_RecordRequested;
                 locator.RequestEnable(_adminToken);
             });
             Locators.Clear();
         }
         _disposedValue = true;
     }
     base.Dispose(disposing);
 }
Esempio n. 5
0
        protected override Task CancelCallback() =>
        OutsideModificationLocker.LockForDurationAsync(async() => {
            int oldId = Model.Id;

            await _interactor.CompleteCancel(Model);

            if (CriticalOperationType == CriticalOperationType.ModifyingRecord)
            {
                bool totalRefreshRequired = oldId != Model.Id;
                await RefreshModelInformation(Model.Id, totalRefreshRequired);
            }
            else
            {
                OnModelSearcherCleared();
            }

            CriticalOperationType = CriticalOperationType.None;
        });