Beispiel #1
0
        public JsonResult ExexcuteSql(string FinalSql = null)
        {
            string json = string.Empty;

            ToolsBase.ExecuteSql = FinalSql;
            ToolsModel        model     = new ToolsModel();
            List <ToolsModel> toolsList = new List <ToolsModel>();

            try
            {
                actionResult = toolsAction.ExecuteReport_Sql(ToolsBase);
                if (actionResult.IsSuccess)
                {
                    toolsList = (from DataRow row in actionResult.dtResult.Rows
                                 select new ToolsModel
                    {
                        ExecuteSql = row["Column1"] != DBNull.Value ? row["Column1"].ToString() : ""
                    }).ToList();
                }
                model.ExecuteSQlList = toolsList;
            }
            catch (Exception ex)
            {
            }
            return(Json(toolsList, JsonRequestBehavior.AllowGet));
        }
Beispiel #2
0
        /// <summary>
        /// Переименовывем папки в 'SyncRemoveFoldersExtension' на удаленом сервере - (если их нету на локальном)
        /// </summary>
        /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param>
        /// <param name="ListRemoteDirectoryToName">Список папок на удаленном сервере (имена)</param>
        /// <param name="SyncRemoveFoldersExtension">Расширение для удаленой папки</param>
        public static void RenameToRemoveDirectory(ToolsModel md, List <string> ListRemoteDirectoryToName, string SyncRemoveFoldersExtension)
        {
            bool IsErrorSync = false;

            Parallel.ForEach(ListRemoteDirectoryToName, new ParallelOptions {
                MaxDegreeOfParallelism = md.ActiveConnections
            }, RemoteDirectoryToName =>
            {
                // Пропускаем папки которые уже имею расширение 'SyncRemoveFoldersExtension'
                if (RemoteDirectoryToName.Contains(".SyncRemove"))
                {
                    return;
                }

                // Если папки нету на локальном сервере
                if (!Directory.Exists(md.LocalFolder + RemoteDirectoryToName))
                {
                    // Переименовываем папку на удаленном сервере, добовляя расширение 'SyncRemoveFoldersExtension'
                    if (!md.serv.Rename($"{md.RemoteFolder}{RemoteDirectoryToName}", $"{md.RemoteFolder}{RemoteDirectoryToName}{SyncRemoveFoldersExtension}"))
                    {
                        IsErrorSync = true;
                    }
                }
            });

            if (IsErrorSync)                                                                   // Если была ошибка
            {
                AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders);   // Добовляем папку в список папок с ошибкой синхронизаци
            }
        }
Beispiel #3
0
 private void SetSelected(ToolsModel sender)
 {
     A.SelectedItem = null;
     B.SelectedItem = null;
     A.SelectedItem = sender;
     B.SelectedItem = sender;
 }
Beispiel #4
0
        /// <summary>
        /// Переименовывем файлы в 'SyncRemoveFileAddExtension' на удаленом сервере - (если их нету на локальном)
        /// </summary>
        /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param>
        /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param>
        /// <param name="SyncRemoveFileAddExtension">Расширение для удаленого файла</param>
        public static void RenameToRemoveFiles(ToolsModel md, List <FileModel> ListRemoteFiles, string SyncRemoveFileAddExtension)
        {
            bool IsErrorSync = false;

            Parallel.ForEach(ListRemoteFiles, new ParallelOptions {
                MaxDegreeOfParallelism = md.ActiveConnections
            }, RemoteFile =>
            {
                // Пропускаем файлы которые уже имею расширение 'SyncRemoveFileAddExtension'
                if (RemoteFile.Name.Contains(".remove"))
                {
                    return;
                }

                // Если файла нету на локальном сервере
                if (!File.Exists(md.LocalFolder + Regex.Replace(RemoteFile.Name, @"\.sync\..*$", "")))
                {
                    // Переименовываем файл на удаленном сервере, добовляя расширение 'SyncRemoveFileAddExtension'
                    if (!md.serv.Rename($"{md.RemoteFolder}{RemoteFile.Name}", $"{md.RemoteFolder}{RemoteFile.Name}{SyncRemoveFileAddExtension}"))
                    {
                        IsErrorSync = true;
                    }
                }
            });

            if (IsErrorSync)                                                                   // Если была ошибка
            {
                AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders);   // Добовляем папку в список папок с ошибкой синхронизаци
            }
        }
Beispiel #5
0
        // public async Task<IActionResult> Tool()
        // {
        //     var tools = await _context.Tool.ToArrayAsync();

        //     return View(tools);
        // }

        public IActionResult Tools()
        {
            List <ToolsModel> toolsList = new List <ToolsModel>();

            var query = _context.ToolDetail.Join(
                _context.ToolClassification,
                toolDetail => toolDetail.ToolClassificationId,
                toolClass => toolClass.ToolClassificationId,
                (toolDetail, toolClass) => new
            {
                Type      = toolClass.ToolClassification1,
                Brand     = toolDetail.ToolBrand,
                TradeName = toolDetail.TradeName
            });

            foreach (var item in query)
            {
                ToolsModel model = new ToolsModel();

                model.Type      = item.Type;
                model.Brand     = item.Brand;
                model.TradeName = item.TradeName;

                toolsList.Add(model);
            }

            return(View(toolsList));
        }
Beispiel #6
0
        public JsonResult LoadDataTablesTree(string GroupName = null)
        {
            string            json      = "";
            ToolsModel        model     = new ToolsModel();
            List <ToolsModel> toolsList = new List <ToolsModel>();

            ToolsBase.GroupName = GroupName;
            try
            {
                actionResult = toolsAction.LoadDataTablesTree_ReportDesign(ToolsBase);
                if (actionResult.IsSuccess)
                {
                    toolsList = (from DataRow row in actionResult.dtResult.Rows
                                 select new ToolsModel
                    {
                        TableName = row["TableName"] != DBNull.Value ? row["TableName"].ToString() : "",
                        DisplayName = row["DisplayName"] != DBNull.Value ? row["DisplayName"].ToString() : ""
                    }).ToList();
                }
                model.LoadDataTablesTreeList = toolsList;
            }
            catch (Exception ex)
            {
            }
            return(Json(model, JsonRequestBehavior.AllowGet));
        }
Beispiel #7
0
        /// <summary>
        /// Загружаем файлы на удаленный сервер - (если файла нету на сервере)
        /// </summary>
        /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param>
        /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param>
        /// <param name="ListLocalFilesToName">Список файлов на локальном сервере</param>
        /// <param name="EncryptionAES">Использовать шифрование файлов AES 256</param>
        /// <param name="PasswdAES">Пароль для шифрования файлов</param>
        /// <param name="CountUploadToFilesOK">Количиство успешно загруженых файлов на уделеный сервер</param>
        /// <param name="CountUploadToFilesAll">Общее количиство файлов, которые нужно было загрузить на удаленый сервер</param>
        /// <param name="CountUploadToBytes">Общий размер переданых файлов в byte</param>
        public static void UploadToFiles(ToolsModel md, List <FileModel> ListRemoteFiles, List <string> ListLocalFilesToName, bool EncryptionAES, string PasswdAES,
                                         ref int CountUploadToFilesOK, ref int CountUploadToFilesAll, ref long CountUploadToBytes)
        {
            long CountUploadToBytesTmp = 0;
            int  CountUploadToFilesOKTmp = 0, CountUploadToFilesAllTmp = 0;

            Parallel.ForEach(ListLocalFilesToName, new ParallelOptions {
                MaxDegreeOfParallelism = md.ActiveConnections
            }, FileName =>
            {
                string LocalFile          = $"{md.LocalFolder}{FileName}";                                                    // Полный путь к локальному файлу
                FileInfo InfoLocalFile    = new FileInfo(LocalFile);                                                          // Данные локального файла, 'LastWriteTime' и 'Length'
                string SyncExtension      = $".sync{(EncryptionAES ? ".aes" : "")}.{InfoLocalFile.LastWriteTime.ToBinary()}"; // Расширение файла синхронизации
                string SyncExtensionCheck = $"{SyncExtension}{(EncryptionAES ? "" : $".{InfoLocalFile.Length}")}";            // Расширение файла синхронизации для проверки

                // Если локального файла нету на удаленом сервере
                if (!ListRemoteFiles.Exists(i => i.Name.Contains($"{FileName}{SyncExtensionCheck}")))
                {
                    // Загружаем файл на сервер
                    if (md.serv.UploadFile(LocalFile, $"{md.RemoteFolder}{FileName}{SyncExtension}.{InfoLocalFile.Length}", EncryptionAES, PasswdAES))
                    {
                        CountUploadToFilesOKTmp++;
                        CountUploadToBytesTmp += InfoLocalFile.Length;
                    }
                    CountUploadToFilesAllTmp++;
                }
            });
Beispiel #8
0
        public JsonResult BindReportSql(int ReportID = 0)
        {
            string json = string.Empty;

            ToolsBase.ReportID = ReportID;
            ToolsModel        model        = new ToolsModel();
            List <ToolsModel> QuerySQLList = new List <ToolsModel>();

            try
            {
                actionResult = toolsAction.ReportSQL_Load(ToolsBase);
                if (actionResult.IsSuccess)
                {
                    QuerySQLList = (from DataRow row in actionResult.dtResult.Rows
                                    select new ToolsModel
                    {
                        QuerySQL = row["QuerySQL"] != DBNull.Value ? row["QuerySQL"].ToString() : ""
                    }).ToList();
                }
                model.QuerySQLList = QuerySQLList;
            }
            catch (Exception ex)
            {
            }
            return(Json(QuerySQLList, JsonRequestBehavior.AllowGet));
        }
Beispiel #9
0
        public JsonResult bindReportData(int ReportID = 0)
        {
            string json = string.Empty;

            ToolsBase.ReportID = ReportID;
            ToolsModel        model            = new ToolsModel();
            List <ToolsModel> ReportLayoutList = new List <ToolsModel>();

            try
            {
                actionResult = toolsAction.ReportLayout_Load(ToolsBase);
                if (actionResult.IsSuccess)
                {
                    ReportLayoutList = (from DataRow row in actionResult.dtResult.Rows
                                        select new ToolsModel
                    {
                        ReportLayout = row["ReportLayout"] != DBNull.Value ? row["ReportLayout"].ToString() : "",
                        WholeLayout = row["WholeLayout"] != DBNull.Value ? row["WholeLayout"].ToString() : ""
                    }).ToList();
                }
                model.ReportLayoutList = ReportLayoutList;
            }
            catch (Exception ex)
            {
            }
            return(Json(ReportLayoutList, JsonRequestBehavior.AllowGet));
        }
Beispiel #10
0
        public JsonResult LoadTableColumnsTreeNode(string TableName = null)
        {
            string            json      = "";
            ToolsModel        model     = new ToolsModel();
            List <ToolsModel> toolsList = new List <ToolsModel>();

            ToolsBase.TableName = TableName;
            try
            {
                actionResult = toolsAction.LoadTableColumnsTreeNode_ReportDesign(ToolsBase);
                if (actionResult.IsSuccess)
                {
                    toolsList = (from DataRow row in actionResult.dtResult.Rows
                                 select new ToolsModel
                    {
                        column_name = row["column_name"] != DBNull.Value ? row["column_name"].ToString() : "",
                        data_type = row["data_type"] != DBNull.Value ? row["data_type"].ToString() : ""
                    }).ToList();
                }
                model.LoadTableColumnsTreeNodeList = toolsList;
            }
            catch (Exception ex)
            {
            }
            return(Json(model, JsonRequestBehavior.AllowGet));
        }
Beispiel #11
0
 public ToolsModule()
 {
     Get["/tools"] = x =>
     {
         ToolsModel model = new ToolsModel();
         return(View["tools", model]);
     };
 }
 public static object CreatePageLinks(ToolsModel toolsModel, int pageOffset = 0)
 {
     return(new
     {
         @Page = toolsModel.Page + pageOffset,
         @SortType = toolsModel.SortType,
         @Filter = toolsModel.Filter,
         @Search = toolsModel.Search,
         @Reversed = toolsModel.Reversed
     });
 }
 public static object CreateFilterLinks(ToolsModel toolsModel, string filter)
 {
     return(new
     {
         @Page = 1,
         @SortType = toolsModel.SortType,
         @Filter = filter,
         @Search = toolsModel.Search,
         @Reversed = toolsModel.Reversed
     });
 }
 public static object CreateSortLinks(ToolsModel toolsModel, string sortType, bool reversed)
 {
     return(new
     {
         @Page = toolsModel.Page,
         @SortType = sortType,
         @Filter = toolsModel.Filter,
         @Search = toolsModel.Search,
         @Reversed = reversed
     });
 }
Beispiel #15
0
        /// <summary>
        /// Создает папки на удаленом сервере
        /// Папки есть на локальном но нету на удаленом сервере
        /// </summary>
        /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param>
        /// <param name="ListRemoteDirectoryToName">Список папок на удаленном сервере (имена)</param>
        /// <param name="ListLocalDirectoryToName">Список папок на локальном сервере (имена)</param>
        /// <param name="CountCreateToDirectoryOK">Количиство успешно созданных папок</param>
        /// <param name="CountCreateToDirectoryAll">Общее количиство папок, которые нужно было создать</param>
        /// <param name="ListNewLocalFolders">Список новых папок - (обновляет список)</param>
        public static List <string> CreateToDirectory(ToolsModel md, List <string> ListRemoteDirectoryToName, List <string> ListLocalDirectoryToName,
                                                      ref int CountCreateToDirectoryOK, ref int CountCreateToDirectoryAll, List <string> ListNewLocalFolders)
        {
            List <string> CreateFolders = new List <string>();
            int           CountCreateToDirectoryOKTmp = 0, CountCreateToDirectoryAllTmp = 0;

            // Считываем список папок на локальном сервере
            Parallel.ForEach(ListLocalDirectoryToName, new ParallelOptions {
                MaxDegreeOfParallelism = md.ActiveConnections
            }, LocalDirectoryName =>
            {
                // Проверяем есть ли имя локальной папки на удаленом сервере
                if (!ListRemoteDirectoryToName.Contains(LocalDirectoryName))
                {
                    #region Создаем папку на сервере и обновляем NewListErrorLocalFolders
                    // Создаем папку в папке 'RemoteFolders' на удаленом сервере
                    if (md.serv.CreateDirectory($"{md.RemoteFolder}{LocalDirectoryName}"))
                    {
                        // Список созданных папок
                        CreateFolders.Add($"{md.LocalFolder}{LocalDirectoryName} => {md.RemoteFolder}{LocalDirectoryName}");
                        CountCreateToDirectoryOKTmp++;
                    }
                    else
                    {
                        // Папка не создана, добовляем основную папку 'LocalFolders/LocalDirectoryName' в список папок с ошибкой синхронизации
                        AddToListErrorLocalFolders($"{md.LocalFolder}{LocalDirectoryName}", ref md.NewListErrorLocalFolders);
                    }
                    #endregion

                    // Сумируем общее количиство папок, которые нужно было создать
                    CountCreateToDirectoryAllTmp++;

                    // Добовляем новую папку в лист
                    string NewFolder = $"{md.LocalFolder}{LocalDirectoryName}";             // Полный путь к локальной папке
                    if (!ListNewLocalFolders.Exists(i => NewFolder.Contains(i)))            // Если 'NewFolder' нету в списке новых папок
                    {
                        ListNewLocalFolders.Add(NewFolder);
                    }
                }
            });

            CountCreateToDirectoryOK  += CountCreateToDirectoryOKTmp;
            CountCreateToDirectoryAll += CountCreateToDirectoryAllTmp;

            // Список созданных папок
            return(CreateFolders);
        }
        public ToolsViewModel(ToolsModel theModel, IEventAggregator theEventAggregator, IRegionManager theManager,
                              IUnityContainer theContainer)
        {
            Cursor            = Cursors.Arrow;
            myCanExitApp      = true;
            myEventAggregator = theEventAggregator;
            myRegionManager   = theManager;
            myContainer       = theContainer;
            myModel           = theModel;

            AppExitCommand     = new RelayCommand(CanExitApp, AppExitEvent);
            SettingsCommand    = new RelayCommand(CanOpenSettings, OpenSettings);
            StopRecordCommand  = new RelayCommand(CanStopRecording, StopRecording);
            StartRecordCommand = new RelayCommand(CanStartRecording, StartRecording);
            mySettingsView     = myContainer.Resolve <SettingsView>();
            IsSettingsEnabled  = true;
        }
Beispiel #17
0
        public ActionResult ReportDesign()
        {
            ToolsModel        model          = new ToolsModel();
            List <ToolsModel> toolsList      = new List <ToolsModel>();
            List <ToolsModel> ReportNameList = new List <ToolsModel>();
            List <ToolsModel> RoleNameList   = new List <ToolsModel>();

            actionResult = toolsAction.Data_Group();
            if (actionResult.IsSuccess)
            {
                toolsList = (from DataRow row in actionResult.dtResult.Rows
                             select new ToolsModel
                {
                    GroupName = row["GroupName"] != DBNull.Value ? row["GroupName"].ToString() : ""
                }).ToList();
            }
            model.toolsList = toolsList;

            actionResult = toolsAction.LoadReportNames_ReportDesigner();
            if (actionResult.IsSuccess)
            {
                ReportNameList.Add(new ToolsModel {
                    ReportID = 0, ReportName = "Select"
                });
                ReportNameList = (from DataRow row in actionResult.dtResult.Rows
                                  select new ToolsModel
                {
                    ReportID = row["ReportID"] != DBNull.Value ? Convert.ToInt32(row["ReportID"]) : 0,
                    ReportName = row["ReportName"] != DBNull.Value ? row["ReportName"].ToString() : ""
                }).ToList();
            }
            actionResult = toolsAction.SecurityFunctions_LoadAll();
            if (actionResult.IsSuccess)
            {
                RoleNameList = (from DataRow row in actionResult.dtResult.Rows
                                select new ToolsModel
                {
                    RoleName = row["RoleName"] != DBNull.Value ? row["RoleName"].ToString() : ""
                }).ToList();
            }
            model.RoleNameList   = RoleNameList;
            model.toolsList      = toolsList;
            model.ReportNameList = ReportNameList;
            return(View(model));
        }
Beispiel #18
0
        public static NewsPostAdminCollection GenerateNewsPostAdminCollection(ToolsModel model)
        {
            var adminService   = AdminHelper.AdminService;
            var commentService = CommentHelper.CommentService;

            var businessModel = model.ConvertToOptions();
            var newsPosts     = NewsPostService.GetNewsPostsWithAdminTools(businessModel);

            var newsPostAdminViews = new List <NewsPostAdminView>();

            foreach (NewsPost newsPost in newsPosts)
            {
                string newsPostAuthorName = adminService.GetAdmin(newsPost.AuthorId).Login;
                int    commentCount       = commentService.GetCommentCountByPostId(newsPost.Id);
                newsPostAdminViews.Add(new NewsPostAdminView(newsPost, newsPostAuthorName, commentCount));
            }
            model.Pages = businessModel.Pages;
            return(new NewsPostAdminCollection(newsPostAdminViews, model));
        }
Beispiel #19
0
        public void SetSelected(ToolsModel e)
        {
            Attr.Template = null;
            switch (e)
            {
            case ClipModel clip:
                Attr.Template    = ClipAttr;
                Attr.DataContext = e;
                break;

            case PenModel pen:
                Attr.Template    = PenAttr;
                Attr.DataContext = e;
                break;

            case Pen9Model pen9:
                Attr.Template    = Pen9Attr;
                Attr.DataContext = e;
                break;

            case TxEditModel text:
                Attr.Template    = TextAttr;
                Attr.DataContext = e;
                break;

            case FillModel fill:
                Attr.Template    = FillAttr;
                Attr.DataContext = e;
                break;

            case PickerModel pick:
            case BuckerModel buck:
                Attr.Template    = PickAttr;
                Attr.DataContext = e;
                break;

            default:
                break;
            }
        }
Beispiel #20
0
        /// <summary>
        /// Удаляем файлы которые не до конца загружены
        /// </summary>
        /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param>
        /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param>
        /// <param name="SyncRemoveFileAddExtension">Расширение для удаленого файла</param>
        public static void DeleteFilesToErrorUpload(ToolsModel md, ref List <FileModel> ListRemoteFiles, string SyncRemoveFileAddExtension)
        {
            // Список файлов которые нужно удалить из листа 'ListRemoteFiles'
            var ListRemoteFilesToDeleteItem = new List <FileModel>();

            bool IsErrorSync = false;

            Parallel.ForEach(ListRemoteFiles, new ParallelOptions {
                MaxDegreeOfParallelism = md.ActiveConnections
            }, RemoteFile =>
            {
                // Если у файла есть размер
                // Сравниваем имя файла с полученым размером, если размеры разные то удаляем файл
                if (RemoteFile.FileSize != -1 && !Regex.IsMatch(RemoteFile.Name, $"\\.{RemoteFile.FileSize}({SyncRemoveFileAddExtension})?$"))
                {
                    // Удаляем файл на удаленом сервере
                    if (md.serv.DeleteFile($"{md.RemoteFolder}{RemoteFile.Name}"))
                    {
                        // Заносим данные во временное хранилише 'ListRemoteFilesToDeleteItem'
                        ListRemoteFilesToDeleteItem.Add(RemoteFile);
                    }
                    else
                    {
                        IsErrorSync = true;
                    }
                }
            });

            if (IsErrorSync)                                                                   // Если была ошибка
            {
                AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders);   // Добовляем папку в список папок с ошибкой синхронизаци
            }

            // Удаляем плохие файлы с листа
            foreach (var item in ListRemoteFilesToDeleteItem)
            {
                ListRemoteFiles.Remove(item);
            }
        }
Beispiel #21
0
        public static NewsPostSimplifiedCollection GenerateNewsPostSimplifiedCollection(ToolsModel model)
        {
            var commentService = CommentHelper.CommentService;

            var businessModel = model.ConvertToOptions();
            var newsPosts     = NewsPostService.GetNewsPostsWithTools(businessModel);

            var newsPostSimplifiedViews = new List <NewsPostSimplifiedView>();

            foreach (NewsPost newsPost in newsPosts)
            {
                int commentCount = commentService.GetCommentCountByPostId(newsPost.Id);
                newsPostSimplifiedViews.Add(new NewsPostSimplifiedView(newsPost, commentCount));
            }
            model.Pages = businessModel.Pages;
            return(new NewsPostSimplifiedCollection(newsPostSimplifiedViews, model));
        }
Beispiel #22
0
 public AppController(ToolRentalSystemDBContext context)
 {
     _context   = context;
     toolsModel = new ToolsModel();
 }
Beispiel #23
0
        public ActionResult Index(ToolsModel model)
        {
            NewsPostAdminCollection result = NewsPostHelper.GenerateNewsPostAdminCollection(model);

            return(View(result));
        }
 public NewsPostSimplifiedCollection(ICollection <NewsPostSimplifiedView> newsPostSimplifiedViews, ToolsModel toolBarModel) : base(toolBarModel)
 {
     NewsPostSimpliedViews = newsPostSimplifiedViews;
     Page++;
 }
 public NewsPostAdminCollection(ICollection <NewsPostAdminView> newsPostAdminViews, ToolsModel toolBarModel) : base(toolBarModel)
 {
     NewsPostAdminViews = newsPostAdminViews;
     Page++;
 }
Beispiel #26
0
        /// <summary>
        /// Сихронизация задания
        /// </summary>
        /// <param name="task">Задания</param>
        /// <param name="serv">Удаленный сервер</param>
        /// <param name="WorkNoteNotation">Текущее задание в WorkNote</param>
        /// <param name="NameAndValue">Колекция для ответа в журнал</param>
        /// <param name="IsOk">Выполнено задание или нет</param>
        private static void Sync(Task task, RemoteServer serv, Notation WorkNoteNotation, out List <More> NameAndValue, ref bool IsOk)
        {
            #region Ошибка подключения
            if (!serv.IsConnected)
            {
                NameAndValue = new List <More>()
                {
                    new More("Состояние", $"Ошибка подключения к {task.TypeSunc.ToString()}")
                };
                return;
            }
            #endregion

            try
            {
                #region Получаем список папок в которых были ошибки при синхронизации
                string PathSyncToErrorLocalFolder = $"{Folders.Sync}/tk-{task.Id}.ErrorLocalFolders.json";
                var    NewListErrorLocalFolders   = new List <string>(); // Новый список папок с ошибкой синхронизации
                var    oldListErrorLocalFolders   = new List <string>(); // Текущий список папок с ошибкой синхронизации
                if (File.Exists(PathSyncToErrorLocalFolder))
                {
                    oldListErrorLocalFolders = JsonConvert.DeserializeObject <List <string> >(File.ReadAllText(PathSyncToErrorLocalFolder));
                }
                #endregion

                #region Переменные
                // Список новых папок
                var ListNewLocalFolders = new List <string>();

                // Время старта задания
                var TimeStartTask = DateTime.Now;

                // Количиство созданных папок и загруженых файлов
                int CountUploadToFilesOK = 0, CountUploadToFilesAll = 0, CountCreateToDirectoryOk = 0, CountCreateToDirectoryAll = 0;

                // Количиство провереных обьектов - (папок/файлов)
                int CountToCheckedObject = 0;

                // Общий размер переданых файлов в byte
                long CountUploadToBytes = 0;

                // Отчет созданных папок
                string       ReportNameToCreateFolders = $"tk-{task.Id}_{DateTime.Now.ToString("dd-MM-yyy_HH-mm")}-{Generate.Passwd(6)}.folders.txt";
                StreamWriter ReportToCreateFolders     = new StreamWriter($"{Folders.ReportSync}/{ReportNameToCreateFolders}", false, Encoding.UTF8);

                // Отчет загруженных файлов
                string       ReportNameToUploadFiles = $"tk-{task.Id}_{DateTime.Now.ToString("dd-MM-yyy_HH-mm")}-{Generate.Passwd(6)}.files.txt";
                StreamWriter ReportToUploadFiles     = new StreamWriter($"{Folders.ReportSync}/{ReportNameToUploadFiles}", false, Encoding.UTF8);
                #endregion

                // Получаем список всех папок
                foreach (var LocalFolder in SearchDirectory.Get(task.Whence))
                {
                    CountToCheckedObject++;

                    // Если папка в списке игнорируемых папок
                    if (task.IgnoreFileOrFolders.Exists(i => Regex.IsMatch(LocalFolder, i.Patch.Replace("\\", "/"), RegexOptions.IgnoreCase)))
                    {
                        continue;
                    }

                    // Проверяем папку, нужно ее синхронизировать или нет
                    if (CacheLastWriteTimeToFiles(LocalFolder, task.CacheSync, ref CountToCheckedObject) ||          // Если дата изменения любого файла внутри папки LocalFolder выше чем CacheSync
                        Directory.GetCreationTime(LocalFolder) > task.CacheSync ||                                   // Если дата создания папки выше CacheSync
                        Directory.GetLastWriteTime(LocalFolder) > task.CacheSync ||                                  // Если дата изменения в папке выше CacheSync
                        ListNewLocalFolders.Exists(i => LocalFolder.Contains(i)) ||                                  // Если эта папка является новой, нужно сихронизировать все включая все подпапки в ней
                        oldListErrorLocalFolders.Exists(i => LocalFolder == i))                                      // Список папок в котрых в прошлый раз была ошибка при синхронизации
                    {
                        #region Переменные
                        // Количиство потоков
                        int ActiveConnections = 1;
                        switch (task.TypeSunc)
                        {
                        case TypeSunc.OneDrive:
                            ActiveConnections = 10;
                            break;

                        case TypeSunc.SFTP:
                            ActiveConnections = task.FTP.ActiveConnections;
                            break;
                        }

                        // Расширения файлов и папок
                        string SyncRemoveFileAddExtension = ".remove";
                        string SyncRemoveFoldersExtension = $".SyncRemove.{DateTime.Now.ToBinary()}";
                        #endregion

                        #region Локальный метод - "GetRemoteFolder"
                        string GetRemoteFolder()
                        {
                            // Удаленный каталог
                            string where = Tools.ConvertPatchToUnix(task.Where);

                            // Локальный каталог
                            string whence = Tools.ConvertPatchToUnix(task.Whence);

                            // Результат
                            return(LocalFolder.Replace(whence, where));
                        }
                        #endregion

                        // Папка на удаленном сервере Linux
                        string RemoteFolder = GetRemoteFolder();

                        // Создаем папку на удаленом сервере
                        serv.CreateDirectory(RemoteFolder, NotReport: true);

                        // Список файлов и папок
                        var ListRemoteServer         = serv.ListDirectoryAndFiles(RemoteFolder);
                        var ListLocalDirectoryToName = Directory.GetDirectories(LocalFolder, "*", SearchOption.TopDirectoryOnly).Select(i => Path.GetFileName(i)).ToList();
                        var ListLocalFilesToName     = Directory.GetFiles(LocalFolder, "*", SearchOption.TopDirectoryOnly).
                                                       Where(dir => !task.IgnoreFileOrFolders.Exists(i => Regex.IsMatch(dir, i.Patch, RegexOptions.IgnoreCase))).
                                                       Select(dir => Path.GetFileName(dir)).ToList();

                        // Модель Tools
                        ToolsModel md = new ToolsModel()
                        {
                            serv = serv,
                            ActiveConnections        = ActiveConnections,
                            LocalFolder              = LocalFolder,
                            RemoteFolder             = RemoteFolder,
                            NewListErrorLocalFolders = NewListErrorLocalFolders
                        };

                        // Переименовывем папки в 'SyncRemoveFoldersExtension' на удаленом сервере - (если их нету на локальном)
                        Tools.RenameToRemoveDirectory(md, ListRemoteServer.Directory, SyncRemoveFoldersExtension);

                        // Переименовывем файлы в 'SyncRemoveFileAddExtension' на удаленом сервере - (если их нету на локальном)
                        Tools.RenameToRemoveFiles(md, ListRemoteServer.Files, SyncRemoveFileAddExtension);

                        // Создаем папки на удаленом сервере - (папки есть на локальном но нету на удаленом сервере)
                        foreach (string createFolder in Tools.CreateToDirectory(md, ListRemoteServer.Directory, ListLocalDirectoryToName, ref CountCreateToDirectoryOk, ref CountCreateToDirectoryAll, ListNewLocalFolders))
                        {
                            // Сохраняем список созданных папок
                            ReportToCreateFolders.WriteLine(createFolder);
                        }

                        // Удаляем файлы которые не до конца загружены
                        Tools.DeleteFilesToErrorUpload(md, ref ListRemoteServer.Files, SyncRemoveFileAddExtension);

                        // Загружаем файлы на удаленный сервер - (если файла нету на сервере)
                        foreach (string uploadFile in Tools.UploadToFiles(md, ListRemoteServer.Files, ListLocalFilesToName, task.EncryptionAES, task.PasswdAES, ref CountUploadToFilesOK, ref CountUploadToFilesAll, ref CountUploadToBytes))
                        {
                            // Сохраняем список загруженных файлов
                            ReportToUploadFiles.WriteLine(uploadFile);
                        }

                        #region Очистка старых бекапов
                        if (task.CountActiveBackup >= 1)
                        {
                            if (task.CountActiveBackup == 1)
                            {
                                // Удаляем все папки и файлы с пометкй "SyncRemoveFoldersExtension или SyncRemoveFoldersExtension"
                                Tools.DeleteFilesOrDirectoryToRemove(md);
                            }

                            // Удаляем старые бекапы
                            Tools.DeleteFilesToActiveBackup(md, task.CountActiveBackup);
                        }

                        // Удаляем старые по времени бекапы
                        if (task.CountActiveDayBackup > 0)
                        {
                            Tools.DeleteFilesToActiveDayBackup(md, task.CountActiveDayBackup);
                        }
                        #endregion

                        #region Обновляем WorkNote
                        WorkNoteNotation.More = new List <More>
                        {
                            new More("Состояние", $"Выполняется {GetToWorkTime("")}"),
                            new More("Проверено объектов", $"{CountToCheckedObject:N0}")
                        };

                        if (CountUploadToFilesOK > 0)
                        {
                            WorkNoteNotation.More.Add(new More("Передано данных", ToSize(CountUploadToBytes)));
                            WorkNoteNotation.More.Add(new More("Загружено файлов", $"{CountUploadToFilesOK:N0}"));
                        }

                        if (CountCreateToDirectoryOk > 0)
                        {
                            WorkNoteNotation.More.Add(new More("Создано папок", $"{CountCreateToDirectoryOk:N0}"));
                        }
                        #endregion
                    }
                }

                // Закрываем потоки
                ReportToCreateFolders.Dispose();
                ReportToUploadFiles.Dispose();

                // Сохраняем новый список папок с ошибками, вместо старого
                File.WriteAllText(PathSyncToErrorLocalFolder, JsonConvert.SerializeObject(NewListErrorLocalFolders));

                #region Локальный метод GetToWorkTime
                string GetToWorkTime(string arg)
                {
                    var WorkTime = (DateTime.Now - TimeStartTask);

                    if (WorkTime.TotalSeconds <= 60)
                    {
                        return("");
                    }

                    if (WorkTime.TotalMinutes <= 60)
                    {
                        return($"{arg}{(int)WorkTime.TotalMinutes} {EndOfText.get("минуту", "минуты", "минут", (int)WorkTime.TotalMinutes)}");
                    }

                    return($"{arg}{(int)WorkTime.TotalHours} {EndOfText.get("час", "часа", "часов", (int)WorkTime.TotalHours)}");
                }
                #endregion

                #region Локальный метод ToSize
                string ToSize(double bytes)
                {
                    string[] Suffix = { "Byte", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
                    int      index  = 0;

                    while (bytes >= 1024)
                    {
                        bytes /= 1024;
                        index++;
                    }

                    return($"{bytes:N3} {Suffix[index]}");
                }
                #endregion

                #region Выполнено
                NameAndValue = new List <More>()
                {
                    new More("Состояние", $"Выполнено {GetToWorkTime("за ")}"),
                    new More("Проверено объектов", $"{CountToCheckedObject:N0}")
                };

                if (CountCreateToDirectoryAll > 0)
                {
                    NameAndValue.Add(new More("Создано папок", $"<a href='/reports/sync/{ReportNameToCreateFolders}' target='_blank'>{CountCreateToDirectoryOk:N0} из {CountCreateToDirectoryAll:N0}</a>"));
                }

                if (CountUploadToFilesAll > 0)
                {
                    NameAndValue.Add(new More("Загружено файлов", $"<a href='/reports/sync/{ReportNameToUploadFiles}' target='_blank'>{CountUploadToFilesOK:N0} из {CountUploadToFilesAll:N0}</a>"));
                    NameAndValue.Add(new More("Передано данных", ToSize(CountUploadToBytes)));
                }
                #endregion

                IsOk = true;
            }
            catch (Exception ex)
            {
                NameAndValue = new List <More>()
                {
                    new More("Состояние", "Ошибка при выполнении задания"),
                    new More("Код", ex.ToString())
                };
            }

            // Отключаемся от сервера
            serv.Disconnect();
        }
        public ActionResult Index(ToolsModel model)
        {
            var newsPostSimplifiedCollection = NewsPostHelper.GenerateNewsPostSimplifiedCollection(model);

            return(View(newsPostSimplifiedCollection));
        }