/// <summary>
 /// Добавляет новое ОСП в общий список.
 /// </summary>
 /// <param name="newOsp">Новое ОСП</param>
 public void AddNewOsp(OspDTO newOsp)
 {
     if (newOsp != null)
     {
         Osps.Add(newOsp);
     }
 }
        /// <summary>
        /// Обновляет одно ОСП.
        /// </summary>
        /// <param name="editedOsp">Отредактированное ОСП</param>
        public void UpdateOsp(OspDTO editedOsp)
        {
            // Найти ОСП, равное редактированному, в текущем списке всех ОСП.
            OspDTO osp = Osps.FirstOrDefault(x => x.Id == editedOsp.Id);

            // Если ОСП найден.
            if (osp != null)
            {
                // Присвоить значения свойств отредактированного ОСП текущему.
                foreach (var prop in osp.GetType().GetProperties())
                {
                    prop.SetValue(osp, prop.GetValue(editedOsp));
                }
                // Если отредактированное ОСП является текущиим для пользователя.
                if (editedOsp.Id == CurrentUser.Osp.Id)
                {
                    // Присвоить значения свойств отредактированного ОСП текущему ОСП пользователя.
                    foreach (var prop in CurrentUser.Osp.GetType().GetProperties())
                    {
                        prop.SetValue(CurrentUser.Osp, prop.GetValue(editedOsp));
                    }
                }
            }
        }
        public OspDataDTO GetOspData(int userId, int ospId)
        {
            // Период получения документов в ОСА (30 дней).
            DateTime startPeriod = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(-30);
            DateTime endPeriod   = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            // Получить общие списки.
            ICollection <AccessDTO>    allAccesses = Accesses.GetAll();
            ICollection <UserDTO>      allUsers    = Users.GetAll();
            ICollection <CartridgeDTO> allCarts    = Cartridges.GetAll();
            ICollection <PrinterDTO>   allPrints   = Printers.GetAll();
            ICollection <OspDTO>       allOsps     = Osps.GetAll();
            // Получить данные по ОСП.
            ICollection <BalanceDTO>  balances     = Balance.Find(x => x.Osp.Id == ospId);
            ICollection <EmailDTO>    emails       = Emails.Find(x => x.Osp.Id == ospId);
            ICollection <ProviderDTO> providers    = Providers.Find(x => x.Osp.Id == ospId);
            ICollection <ReceiptDTO>  receipts     = Receipts.Find(u => u.Osp.Id == ospId && u.Date >= startPeriod && u.Date <= endPeriod);
            ICollection <ExpenseDTO>  expenses     = Expenses.Find(u => u.Osp.Id == ospId && u.Date >= startPeriod && u.Date <= endPeriod);
            ICollection <ExpenseDTO>  userExpenses = Expenses.Find(u => u.User.Id == userId && u.Osp.Id == ospId && u.Date >= startPeriod && u.Date <= endPeriod);
            // Создать объект данных для пользователя.
            var userDataDTO = new OspDataDTO()
            {
                Accesses     = new ObservableCollection <AccessDTO>(allAccesses),
                Osps         = new ObservableCollection <OspDTO>(allOsps),
                Cartridges   = new ObservableCollection <CartridgeDTO>(allCarts),
                Printers     = new ObservableCollection <PrinterDTO>(allPrints),
                Balance      = new ObservableCollection <BalanceDTO>(balances),
                Expenses     = new ObservableCollection <ExpenseDTO>(expenses),
                UserExpenses = new ObservableCollection <ExpenseDTO>(userExpenses),
                Providers    = new ObservableCollection <ProviderDTO>(providers),
                Receipts     = new ObservableCollection <ReceiptDTO>(receipts),
                Emails       = new ObservableCollection <EmailDTO>(emails),
                Users        = new ObservableCollection <UserDTO>(allUsers)
            };

            return(userDataDTO);
        }