public void Remove(ModelBase obj) { if (obj is Account) { Accounts.Remove(obj as Account); var transactionIds = Transactions.SelectMany(t => t.Details).Where(t => t.AccountId == ((Account)obj).Id).Select(t => t.TransactionId); foreach (var transId in transactionIds) { Remove(Transactions.FirstOrDefault(t => t.Id == transId)); } foreach (var schedTrans in ScheduledTransactions.Where(t => t.FromAccountId == ((Account)obj).Id || t.ToAccountId == ((Account)obj).Id).ToList()) { Remove(schedTrans); } } else if (obj is Transaction) { Transactions.Remove(obj as Transaction); foreach (var detail in TransactionDetails.Where(t => t.TransactionId == ((Transaction)obj).Id).ToList()) { Remove(detail); } } else if (obj is TransactionDetail) { TransactionDetails.Remove(obj as TransactionDetail); } else if (obj is Receipt) { Receipts.Remove(obj as Receipt); } else if (obj is ScheduledTransaction) { ScheduledTransactions.Remove(obj as ScheduledTransaction); foreach (var detail in ScheduledTransactionDetails.Where(t => t.ScheduledTransactionId == ((ScheduledTransaction)obj).Id).ToList()) { Remove(detail); } } else if (obj is ScheduledTransactionDetail) { ScheduledTransactionDetails.Remove(obj as ScheduledTransactionDetail); } else if (obj is Category) { Categories.Remove(obj as Category); } else if (obj is Product) { Products.Remove(obj as Product); } }
/// <summary> /// Обновляет поступления ОСП. /// </summary> /// <param name="ospReceipts">Новый список поступлений</param> public void UpdateReceipts(IEnumerable <ReceiptDTO> ospReceipts) { // Если список не пустой. if (ospReceipts.Count() > 0) { // Получить новые объекты. ReceiptDTO[] added = ospReceipts.Except(Receipts, new ReceiptDTOComparer()).ToArray(); // Получить удаленные объекты ReceiptDTO[] removed = Receipts.Except(ospReceipts, new ReceiptDTOComparer()).ToArray(); // Получить существующие объекты. ReceiptDTO[] existing = Receipts.Intersect(ospReceipts, new ReceiptDTOComparer()).ToArray(); // Добавить в список новые объекты. if (added.Any()) { for (int i = 0; i < added.Count(); i++) { Receipts.Add(added[i]); } } // Убрать из списка удаленные объекты. if (removed.Any()) { for (int i = 0; i < removed.Count(); i++) { Receipts.Remove(removed[i]); } } // Обновить свойства существующим объектам. if (existing.Any()) { foreach (var exist in existing) { UpdateReceipt(exist); } } } // Если список новых пустой очистить список поступлений. else { Receipts.Clear(); } }