public IEnumerable <IResult> DeleteTransaction(PostingRecord transactionRecord) { var openConfirmationResult = new OpenConfirmationResult(eventAggregator) { Message = string.Format(Resources.Strings.PostingViewModelBase_DeleteConfirmation_Message, transactionRecord.TransactionId), Title = Resources.Strings.PostingViewModelBase_DeleteConfirmation_Title, Options = MessageBoxOptions.Yes | MessageBoxOptions.Cancel, }; yield return(openConfirmationResult); if (openConfirmationResult.Selected == MessageBoxOptions.Yes) { // Load transaction from server (used below to determine if the deleted posting was transfer) var request = new GetPostingResult(AccountId, transactionRecord.TransactionId, eventAggregator); yield return(request); // Remove transaction on server var request2 = new DeleteTransactionResult(AccountId, transactionRecord.TransactionId); yield return(request2); // Update accounts balance accountsRepository.Download(AccountId); // Update category usage if (transactionRecord.Category != null) { categoriesRepository.Download(transactionRecord.Category.Id); } // For transfer the 2-nd account should also be updated if (request.Transaction is TransferDTO) { int secondAccountId = ((TransferDTO)request.Transaction).SecondAccountId.Value; accountsRepository.Download(secondAccountId); } // Remove transaction locally var transactionToDelete = TransactionRecords.Where(record => record.TransactionId == transactionRecord.TransactionId).Single(); var index = TransactionRecords.IndexOf(transactionToDelete); TransactionRecords.Remove(transactionToDelete); // Correct remained balance for following transactions if (TransactionRecords.Count > 0 && index < TransactionRecords.Count) { var deletedAmount = transactionToDelete.Income > 0 ? -transactionToDelete.Income : transactionToDelete.Expense; for (int i = index; i < TransactionRecords.Count; i++) { ((PostingRecord)TransactionRecords[i]).Balance += deletedAmount; } } } }
/// <summary> /// Delete category after confirmation. /// </summary> /// <returns>Result of async operation.</returns> public IEnumerable <IResult> Delete() { var openConfirmationResult = new OpenConfirmationResult(EventAggregator) { Message = string.Format(Resources.Strings.CategoryView_Delete_Confirmation_Message, Name), Title = Resources.Strings.CategoryView_Delete_Confirmation_Title, Options = MessageBoxOptions.Yes | MessageBoxOptions.Cancel, }; yield return(openConfirmationResult); if (openConfirmationResult.Selected == MessageBoxOptions.Yes) { Repository.Delete(Id); } }
/// <summary> /// Delete account after confirmation. /// </summary> /// <returns>Result of async operation.</returns> public IEnumerable <IResult> Delete() { yield return(Animation.Stop("ShowActionsPanel")); yield return(Animation.Stop("HideActionsPanel")); var openConfirmationResult = new OpenConfirmationResult(EventAggregator) { Message = string.Format(Resources.Strings.AccountView_Delete_Confirmation_Message, Name), Title = Resources.Strings.AccountView_Delete_Confirmation_Title, Options = MessageBoxOptions.Yes | MessageBoxOptions.Cancel, }; yield return(openConfirmationResult); if (openConfirmationResult.Selected == MessageBoxOptions.Yes) { AccountsRepository.Delete(Id); } }