public IEnumerable <IResult> DeleteTransaction(int transactionId) { yield return(Show.Busy(new BusyScreen { Message = "Deleting..." })); // Remove transaction on server var request = new DeleteTransactionResult(userId, CurrentAccount.Id, transactionId); yield return(request); // Remove transaction locally var transactionToDelete = TransactionRecords.Where(record => record.TransactionId == 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++) { TransactionRecords[i].Balance += deletedAmount; } } yield return(Show.NotBusy()); }
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; } } } }