/// <summary>
        /// тяестовой метод Получаем маасив пдв2 с данными клиента
        /// </summary>
        /// <param name="id"> id клиента.</param>
        /// <returns></returns>
        public ActionResult PrintPDF2(int id)
        {
            workingWord = new WorkingWord();

            // создание ссылок дирикторий(папок для документов). Корневая папка
            var originalDirectoryWordDoc = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents\\"));

            //Создается папка дл хранения дока
            var pathString3 = Path.Combine(originalDirectoryWordDoc.ToString(), "DocsClient\\" + id.ToString() + "\\Document\\");

            // путь к самому документу
            string TestSaveDoc = $@"{pathString3}Result_Client_{id}.pdf";

            //Создание новых документов ворд
            CreateDocWordOfPdf(id);

            string tempSTR = workingWord.ConverdToBase64String(TestSaveDoc);

            //убираем лишние ковычки из строки
            string tg = tempSTR.Trim("\"\"".ToCharArray());

            //TempData["R"] = tg;

            //TempData["SM"] = "Подготовка документа к печати!!";

            // return RedirectToAction("GetAllClients");
            return(Content(tg));
        }
        /// <summary>
        /// Создание документа Ворд и PDF при создании(редактровании) заявки
        /// </summary>
        /// <param name="id">ID нужного клиента</param>
        public void CreateDocWordOfPdf(int id)
        {
            workingWord = new WorkingWord(); // сохранение файлов на диске

            // создание ссылок дирикторий(папок для документов). Корневая папка
            var originalDirectory = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents\\"));

            ////Создается папка к кажому новому клиенту(по id).
            var pathString1 = Path.Combine(originalDirectory.ToString(), "DocsClient");
            var pathString2 = Path.Combine(originalDirectory.ToString(), "DocsClient\\" + id.ToString());

            //Создается папка дл хранения уменьшеной копии
            var pathString3 = Path.Combine(originalDirectory.ToString(), "DocsClient\\" + id.ToString() + "\\Document");

            //Проверяем наличие директории (если нет, создаем)
            if (!Directory.Exists(pathString1))
            {
                Directory.CreateDirectory(pathString1);
            }
            if (!Directory.Exists(pathString2))
            {
                Directory.CreateDirectory(pathString2);
            }
            if (!Directory.Exists(pathString3))
            {
                Directory.CreateDirectory(pathString3);
            }

            //Массив с готовыми данными о заявке
            var tempRezul = CreatingDataArray(id);

            //Запись(создание) в документ ворд
            workingWord.GetBoxCreateWordAndPdf(tempRezul, pathString3, id);
        }
        public ActionResult Index()
        {
            workingWord = new WorkingWord();

            //Получить  из БД список сущноситей ClientVM для ввывода их в представлении
            List <ClientVM> clientList;

            //Инициализируем список и заполняем данными из Бд
            using (DBContext db = new DBContext())
            {               // Выборку приводим в арей(массив), сортируем, и создаем на экземпляр обьекта ClientVM, приводим к листу и сохраняем в лист
                clientList = db.clients.ToArray().OrderBy(x => x.Id).Select(x => new ClientVM(x)).ToList();
            }
            // workingWord.GetBoxCreateWordAndPdf();
            return(View(clientList));
        }
        //****НУЖНО подумать как исправить
        /// <summary>
        /// Отправить клиенту отчет о заявке в формате Word
        /// </summary>
        /// <returns></returns>
        public FileResult DownloadResultDocument(int id)
        {
            workingWord = new WorkingWord(); // сохранение файлов на диске

            // создание ссылок дирикторий(папок для документов). Корневая папка
            var originalDirectory = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents\\"));

            ////Создается папка к кажому новому клиенту(по id).
            var pathString1 = Path.Combine(originalDirectory.ToString(), "DocsClient");
            var pathString2 = Path.Combine(originalDirectory.ToString(), "DocsClient\\" + id.ToString());

            //Создается папка дл хранения уменьшеной копии
            var pathString3 = Path.Combine(originalDirectory.ToString(), "DocsClient\\" + id.ToString() + "\\Document");

            //Проверяем наличие директории (если нет, создаем)
            if (!Directory.Exists(pathString1))
            {
                Directory.CreateDirectory(pathString1);
            }
            if (!Directory.Exists(pathString2))
            {
                Directory.CreateDirectory(pathString2);
            }
            if (!Directory.Exists(pathString3))
            {
                Directory.CreateDirectory(pathString3);
            }

            // Тип файла - content-type
            string file_type = "application/docx";
            // Имя файла - необязательно
            string TestSaveDoc = $@"{pathString3}\\Result_Client_{id}.docx";

            //Массив с данными
            var tempRezul = CreatingDataArray(id);

            //Запись в документ ворд
            workingWord.GetBoxCreateWordAndPdf(tempRezul, pathString3, id);

            //Отправляем готовый документ клиенту на скачку
            return(File(TestSaveDoc, file_type, $"Сustomer_card№{id}.docx"));
        }
        public async System.Threading.Tasks.Task <ActionResult> GetAllClients(int?page)
        {
            //лист для хранения клиентов
            List <ClientVM> listOfClientVM;

            workingWord = new WorkingWord(); // сохранение файлов на диске
            workMail    = new WorkMail();    // Метод для отправки почты

            // создание ссылок дирикторий(папок для картинки). Корневая папка
            var originalDirectory = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents"));


            //установить номер старницы
            var pageNumber = page ?? 1; // Если в  перемнной page Будет значение null. То по умолчанию устновится страница 1

            using (DBContext db = new DBContext())
            {
                //заполнить лист данными
                //listOfClientVM = db.clients.ToArray()
                //    .Where(x => catId == null || catId == 0 || x.Id);
                listOfClientVM = db.clients.ToArray().OrderBy(x => x.Id).Select(x => new ClientVM(x)).ToList();

                //сортировка (по id или имени???)
            }
            //устанавливаем постраничную навигацию. Номер страницы и количесто клиентов для отображения на одной странице
            var onePageOfClients = listOfClientVM.ToPagedList(pageNumber, 5);

            // через ViewBag отправляем в представления
            ViewBag.onePageOfClients = onePageOfClients;

            // Получаем имя директории
            string t = originalDirectory.ToString();

            // Возращаем представление с данными
            return(View(listOfClientVM));
        }
        public ActionResult EditClient(ClientVM model, HttpPostedFileBase file)
        {
            //Получаем  ID заявки будем использоовать для работы с изображением
            int id = model.Id;

            //Список изображений
            //Получаем все изображения из галереи
            model.GalleryImages = Directory.EnumerateFiles(Server.MapPath("~/Images/Uploads/Clients/" + id + "/Thumds"))
                                  .Select(fn => Path.GetFileName(fn));

            //проверяем модель на валидность
            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            #region поиск имени на уникальность
            //using(DBContext db  = new DBContext())
            //{
            //    //ищем В выборке все id кроме текущего. Проверяем на совпадения по фамилии
            //    if (db.clients.Where(x => x.Id != id).Any(x=> x.lastName == model.LastName))
            //    {
            //        //ModelState.AddModelError("","Данный клиент уже подовал заявку")
            // return View(model);
            //        //можно в дальнейшем реализовать историю заявок конкретного клиента
            //    }
            //}
            #endregion


            //обновляем продукт
            using (DBContext db = new DBContext())
            {
                //Загружаем старые(необновленные) данные заявки в БД
                Client dto = db.clients.Find(id);

                dto.firstName   = model.FirstName;
                dto.lastName    = model.LastName;
                dto.middleName  = model.MiddleName;
                dto.birthDate   = model.BirthDate;
                dto.dateRequest = DateTime.Now.ToString();
                dto.email       = model.Email;
                dto.image       = model.Image;

                db.SaveChanges();
            }

            //устанавливаем сообщение в темп дату
            //Сообщение пользователю. с помощью темп дата
            TempData["SM"] = "Заявка успешно отредактирована!";

            //загружаем обработанно изображение

            //ЗАГРУЗКА ИЗАБРАЖЕНИЯ
            #region Загрузка изображения на сервер

            // проверяем загружен ли файл
            if (file != null && file.ContentLength > 0)
            {
                //получить разширение файла
                string ext = file.ContentType.ToLower();

                // проверяем полученное разшерение файла
                if (ext != "image/jpg" &&
                    ext != "image/jpeg" &&
                    ext != "image/pjpeg" &&
                    ext != "image/gif" &&
                    ext != "image/png" &&
                    ext != "image/x-png")
                {
                    using (DBContext db = new DBContext())
                    {
                        //model.
                        ModelState.AddModelError("", "Не коректный формат !! Изображение не было загружено!");
                        //Сообщение пользователю. с помощью темп дата
                        TempData["SM"] = "Заявка успешно оформлена! Но без изображения!!!";
                        return(View(model));
                    }
                }

                //устанавливаем пути загрузки
                // создание ссылок дирикторий(папок для картинки). Корневая папка
                var originalDirectory  = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Images\\Uploads"));
                var originalDirectory2 = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents\\DocsClient"));


                ////путь к папке и кажому новому клиенту(по id).
                var pathString1 = Path.Combine(originalDirectory.ToString(), "Clients\\" + id.ToString());
                //Путь к  папка для хранения уменьшеной копии
                var pathString2 = Path.Combine(originalDirectory.ToString(), "Clients\\" + id.ToString() + "\\Thumds");

                // папки хранения документов Ворд
                var pathString3 = Path.Combine(originalDirectory2.ToString(), id.ToString());

                // папки хранения документов PDF
                var pathString4 = Path.Combine(originalDirectory2.ToString(), id.ToString());


                //удаляем существуешие старые файлы  и директории.
                DirectoryInfo dir1 = new DirectoryInfo(pathString1);
                DirectoryInfo dir2 = new DirectoryInfo(pathString2);
                DirectoryInfo dir3 = new DirectoryInfo(pathString3);
                DirectoryInfo dir4 = new DirectoryInfo(pathString4);

                //Удаляем подпапки
                foreach (var file2 in dir1.GetFiles())
                {
                    file2.Delete();
                }

                foreach (var file3 in dir2.GetFiles())
                {
                    file3.Delete();
                }

                foreach (var file4 in dir3.GetFiles())
                {
                    file4.Delete();
                }

                foreach (var file5 in dir4.GetFiles())
                {
                    file5.Delete();
                }

                ////сохраняем изображение
                string imageName = file.FileName;
                int    idDocWord = id;

                //сохраняемм оригинал и превью картинки
                //Назначить пути к оригинальному и уменьшеному изабражению
                var path  = string.Format($"{pathString1}\\{imageName}");
                var path2 = string.Format($"{pathString2}\\{imageName}"); // уменьшенное изображене
                var path3 = string.Format($"{pathString2}\\{idDocWord}"); // уменьшенное изображене

                //сохранить оригинальное изображение
                file.SaveAs(path);

                //создаем  и  сохраняем уменьшенную копиию
                //обьект WebImage позволяет работать с изображениями
                WebImage img = new WebImage(file.InputStream);
                img.Resize(200, 200); //Ширина, высота сохраненного изображения.
                img.Save(path2);      // Куда сохраняем уменьшенное изображение
                img.Save(path3);      // Куда сохраняем уменьшенное изображение для документа

                using (DBContext db = new DBContext())
                {
                    string tempPath = $"{path3}\\{imageName}";
                    Client dto      = db.clients.Find(id);
                    dto.image = imageName;

                    dto.imagePathInDoc = tempPath; // сохраняем путь к файлу
                    db.SaveChanges();              //save DB
                }
            }

            #endregion

            workingWord = new WorkingWord();
            // создание ссылок дирикторий(папок для документов). Корневая папка
            var originalDirectoryWordDoc = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Archive_Documents\\"));

            //Создается папка дл хранения дока
            var pathString6 = Path.Combine(originalDirectoryWordDoc.ToString(), "DocsClient\\" + id.ToString() + "\\Document\\");

            // путь к самому документу
            string TestSaveDoc = $@"{pathString6}Result_Client_{id}.pdf";

            //Создание отредактированых документов.
            CreateDocWordOfPdf(id);

            //Переодрeсовать пользователя
            return(RedirectToAction("EditClient"));
        }