/// <summary>
        /// Открыть пользовательские настройки
        /// </summary>
        public static bool OpenUserSettings()
        {
            if (_login == string.Empty)
            {
                return(false);
            }

            FileSettings fileSettings = new FileSettings(_login, _md5);

            try
            {
                fileSettings.Read();

                //Проверка существования базы данных в виде файла
                if (fileSettings.FindDatabaseFile())
                {
                    IsDatabaseContextCreated = true;
                }

                User = fileSettings.User;
                User.Change();
            }
            catch (NirsException exception)
            {
                fileSettings.Delete();
                ErrorManager.ExecuteException(exception);
                User = new User
                {
                    Changer = true
                };
                User.Change();
                return(false);
            }

            if (User == null)
            {
                User = new User();
            }
            User.Change();

            if (User.DateLastEditDatabase != DateTime.MinValue)
            {
                IsDatabaseContextCreated = true;
            }
            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Асинхронный запрос на сервер, с целью получения необходимого файла
        /// </summary>
        /// <param name="fileExt">Тип файла</param>
        /// <param name="name">Название файла для сохранения</param>
        public static async Task <bool> GetFileFromServerAsync(FileToUpload fileExt, string name)
        {
            using (var client = new HttpClient())
            {
                //Формирование строки запроса
                string query = ProgramSettings.AdressServer + "Server/GetFile?";
                query += "Login="******"&";
                query += "File=";

                string dir = string.Empty;

                switch (fileExt)
                {
                case FileToUpload.Backup:
                    dir = "Backup";
                    break;

                case FileToUpload.Document:
                    dir = "Document";
                    break;

                case FileToUpload.Photo:
                    dir = "Photo";
                    break;

                case FileToUpload.Database:
                    dir = "Database";
                    break;

                case FileToUpload.Settings:
                    dir = "Settings";
                    break;
                }

                query += dir + "&Name=" + name;

                //Выполнение запроса
                HttpResponseMessage message = client.GetAsync(query).Result;

                if (!message.IsSuccessStatusCode)
                {
                    return(false);
                }

                //Сохранение файла
                string path = Environment.CurrentDirectory + "\\data\\" + _login;
                if (fileExt == FileToUpload.Settings || fileExt == FileToUpload.Database)
                {
                    path += "\\" + name;
                }
                else
                {
                    path += "\\" + dir + "s\\" + name;
                }

                FileInfo fileE = new FileInfo(path);
                if (fileE.Exists)
                {
                    fileE.Delete();
                }

                using (FileStream file = new FileStream(path, FileMode.Create))
                {
                    await message.Content.CopyToAsync(file);
                }

                //Изменение пути к БД
                if (fileExt == FileToUpload.Settings)
                {
                    try
                    {
                        FileSettings fileSettings = new FileSettings(_login, _md5);
                        fileSettings.Read();

                        string newPathDB = Environment.CurrentDirectory + "\\data\\" + _login + "\\database";
                        if (fileSettings.User.DBMSName == "MS SQL Express")
                        {
                            newPathDB += ".mdf";
                        }
                        else
                        {
                            newPathDB += ".db";
                        }
                        if (fileSettings.User.DBMSName == "SQLite")
                        {
                            fileSettings.User.ConnectionString = @"Data Source=" + newPathDB + ";pooling=false;";
                        }
                        fileSettings.Write();
                    }
                    catch (ErrorManager.NirsException e)
                    {
                        ErrorManager.ExecuteException(e);
                    }
                }
            }
            return(true);
        }
        /// <summary>
        /// Добавление элемента в базу данных
        /// </summary>
        /// <param name="obj">Любой преобразованный элемент из моделей БД</param>
        public static void AddObject(object obj)
        {
            ClientDatabaseContext context = null;

            try
            {
                if (User.DBMSName == "SQLite")
                {
                    context = new ClientDatabaseContext(User.ConnectionString, true);
                }
                else
                {
                    context = new ClientDatabaseContext(User.ConnectionString);
                }

                if (obj is Organization)
                {
                    context.Organizations.Add((Organization)obj);
                }
                if (obj is Faculty)
                {
                    context.Faculties.Add((Faculty)obj);
                }
                if (obj is Department)
                {
                    context.Departments.Add((Department)obj);
                }
                if (obj is Group)
                {
                    context.Groups.Add((Group)obj);
                }
                if (obj is Position)
                {
                    context.Positions.Add((Position)obj);
                }
                if (obj is AcademicDegree)
                {
                    context.AcademicDegrees.Add((AcademicDegree)obj);
                }
                if (obj is Author)
                {
                    context.Authors.Add((Author)obj);
                }
                if (obj is Journal)
                {
                    context.Journals.Add((Journal)obj);
                }
                if (obj is Conference)
                {
                    context.Conferences.Add((Conference)obj);
                }
                if (obj is Work)
                {
                    context.Works.Add((Work)obj);
                }
                if (obj is Direction)
                {
                    context.Directions.Add((Direction)obj);
                }
                if (obj is Reward)
                {
                    context.Rewards.Add((Reward)obj);
                }
                if (obj is CoAuthor)
                {
                    context.CoAuthors.Add((CoAuthor)obj);
                }
                if (obj is DirectionWork)
                {
                    context.DirectionWorks.Add((DirectionWork)obj);
                }
                if (obj is RewardWork)
                {
                    context.RewardWorks.Add((RewardWork)obj);
                }
                context.SaveChanges();
                IsDatabaseContextCreated  = true;
                User.DateLastEditDatabase = DateTime.Now;
                ChangeDatabase?.Invoke();
            }
            catch (Exception e)
            {
                ErrorManager.ExecuteException(new ErrorManager.NirsException("Ошибка при добавлении элемента",
                                                                             "База данных", "Работа с базой данных"));
            }
            finally
            {
                context?.Dispose();
            }
        }
        /// <summary>
        /// Удаление элемента
        /// </summary>
        /// <param name="obj">Любой преобразованный элемент из моделей БД</param>
        public static void DeleteObject(object obj)
        {
            if (!IsDatabaseContextCreated)
            {
                return;
            }
            ClientDatabaseContext context = null;

            try
            {
                if (User.DBMSName == "SQLite")
                {
                    context = new ClientDatabaseContext(User.ConnectionString, true);
                }
                else
                {
                    context = new ClientDatabaseContext(User.ConnectionString);
                }

                if (obj is Organization org)
                {
                    var query = context.Organizations.FirstOrDefault(u => u.OrganizationId == org.OrganizationId);
                    if (query != null)
                    {
                        context.Organizations.Remove(query);
                    }
                }
                if (obj is Faculty fac)
                {
                    var query = context.Faculties.FirstOrDefault(u => u.FacultyId == fac.FacultyId);
                    if (query != null)
                    {
                        context.Faculties.Remove(query);
                    }
                }
                if (obj is Department dep)
                {
                    var query = context.Departments.FirstOrDefault(u => u.DepartmentId == dep.DepartmentId);
                    if (query != null)
                    {
                        context.Departments.Remove(query);
                    }
                }
                if (obj is Group gro)
                {
                    var query = context.Groups.FirstOrDefault(u => u.GroupId == gro.GroupId);
                    if (query != null)
                    {
                        context.Groups.Remove(query);
                    }
                }
                if (obj is Position pos)
                {
                    var query = context.Positions.FirstOrDefault(u => u.PositionId == pos.PositionId);
                    if (query != null)
                    {
                        context.Positions.Remove(query);
                    }
                }
                if (obj is AcademicDegree aca)
                {
                    var query = context.AcademicDegrees.FirstOrDefault(u => u.AcademicDegreeId == aca.AcademicDegreeId);
                    if (query != null)
                    {
                        context.AcademicDegrees.Remove(query);
                    }
                }
                if (obj is Author aut)
                {
                    var query = context.Authors.FirstOrDefault(u => u.AuthorId == aut.AuthorId);
                    if (query != null)
                    {
                        context.Authors.Remove(query);
                    }
                }
                if (obj is Journal jou)
                {
                    var query = context.Journals.FirstOrDefault(u => u.JournalId == jou.JournalId);
                    if (query != null)
                    {
                        context.Journals.Remove(query);
                    }
                }
                if (obj is Conference con)
                {
                    var query = context.Conferences.FirstOrDefault(u => u.ConferenceId == con.ConferenceId);
                    if (query != null)
                    {
                        context.Conferences.Remove(query);
                    }
                }
                if (obj is Work wor)
                {
                    var query = context.Works.FirstOrDefault(u => u.WorkId == wor.WorkId);
                    if (query != null)
                    {
                        context.Works.Remove(query);
                    }
                }
                if (obj is Direction dir)
                {
                    var query = context.Directions.FirstOrDefault(u => u.DirectionId == dir.DirectionId);
                    if (query != null)
                    {
                        context.Directions.Remove(query);
                    }
                }
                if (obj is Reward rew)
                {
                    var query = context.Rewards.FirstOrDefault(u => u.RewardId == rew.RewardId);
                    if (query != null)
                    {
                        context.Rewards.Remove(query);
                    }
                }
                if (obj is CoAuthor coa)
                {
                    var query = context.CoAuthors.FirstOrDefault(u => u.CoAuthorId == coa.CoAuthorId);
                    if (query != null)
                    {
                        context.CoAuthors.Remove(query);
                    }
                }
                if (obj is DirectionWork diw)
                {
                    var query = context.DirectionWorks.FirstOrDefault(u => u.DirectionWorkId == diw.DirectionWorkId);
                    if (query != null)
                    {
                        context.DirectionWorks.Remove(query);
                    }
                }
                if (obj is RewardWork elem)
                {
                    var query = context.RewardWorks.FirstOrDefault(u => u.RewardWorkId == elem.RewardWorkId);
                    if (query != null)
                    {
                        context.RewardWorks.Remove(query);
                    }
                }
                context.SaveChanges();
                User.DateLastEditDatabase = DateTime.Now;
                ChangeDatabase?.Invoke();
            }
            catch (Exception)
            {
                ErrorManager.ExecuteException(new ErrorManager.NirsException("Ошибка при удалении элемента",
                                                                             "База данных", "Работа с базой данных"));
            }
            finally
            {
                context?.Dispose();
            }
        }
        /// <summary>
        /// Получение списка объектов
        /// </summary>
        /// <typeparam name="T">Тип модели базы данных</typeparam>
        /// <returns></returns>
        public static object GetListObject <T>()
        {
            if (!IsDatabaseContextCreated)
            {
                return(null);
            }
            ClientDatabaseContext context = null;

            try
            {
                if (User.DBMSName == "SQLite")
                {
                    context = new ClientDatabaseContext(User.ConnectionString, true);
                }
                else
                {
                    context = new ClientDatabaseContext(User.ConnectionString);
                }

                if (typeof(T) == typeof(Organization))
                {
                    return(context.Organizations.ToList());
                }
                if (typeof(T) == typeof(Faculty))
                {
                    return(context.Faculties.ToList());
                }
                if (typeof(T) == typeof(Department))
                {
                    return(context.Departments.ToList());
                }
                if (typeof(T) == typeof(Group))
                {
                    return(context.Groups.ToList());
                }
                if (typeof(T) == typeof(Position))
                {
                    return(context.Positions.ToList());
                }
                if (typeof(T) == typeof(AcademicDegree))
                {
                    return(context.AcademicDegrees.ToList());
                }
                if (typeof(T) == typeof(Author))
                {
                    return(context.Authors.ToList());
                }
                if (typeof(T) == typeof(Journal))
                {
                    return(context.Journals.ToList());
                }
                if (typeof(T) == typeof(Conference))
                {
                    return(context.Conferences.ToList());
                }
                if (typeof(T) == typeof(Work))
                {
                    return(context.Works.ToList());
                }
                if (typeof(T) == typeof(Direction))
                {
                    return(context.Directions.ToList());
                }
                if (typeof(T) == typeof(Reward))
                {
                    return(context.Rewards.ToList());
                }
                if (typeof(T) == typeof(CoAuthor))
                {
                    return(context.CoAuthors.ToList());
                }
                if (typeof(T) == typeof(DirectionWork))
                {
                    return(context.DirectionWorks.ToList());
                }
                if (typeof(T) == typeof(RewardWork))
                {
                    return(context.RewardWorks.ToList());
                }
            }
            catch (Exception)
            {
                ErrorManager.ExecuteException(new ErrorManager.NirsException("Ошибка при выборке данных",
                                                                             "База данных", "Работа с базой данных"));
            }
            finally
            {
                context?.Dispose();
            }
            return(null);
        }