Beispiel #1
0
        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();
     }
 }