private DocumentVM DocumentFromTS(DocumentVM documentVM)
        {
            // Create document in archive base from trading system
            Document newDocument = new Document()
            {
                name        = documentVM.Document.name,
                number      = documentVM.Document.number,
                description = "_",
                type        = 21,
                author      = "_",
                createdDate = documentVM.Document.createdDate,
                uploadDate  = DateTime.Now,
                company     = documentVM.Document.company.Replace("'", "")
            };

            // Create link
            var CurrentNode = TemporaryDataService.GetCurrentNodeVM();

            string url  = CurrentNode == null ? "" : GetNewPath(CurrentNode);
            string path = string.IsNullOrEmpty(url) ? "" : FolderService.GetFolderPath(1, CurrentNode.Node.Name, url) + string.Format("{0} {1}.{2}", "Договор", newDocument.number.Replace("/", "_").Replace("\\", "_"), documentVM.Document.exchange.Substring(documentVM.Document.exchange.LastIndexOf(".") + 1));

            int linkId = DocumentService.CreateDocumentLink(path, path.Substring(path.LastIndexOf(".") + 1));

            if (linkId > 0)
            {
                newDocument.linkId = linkId;
                string query = string.Format("{0}={1},{2}", CurrentNode.Node.Level_id, CurrentNode.Node.Name, presentTreeVM.GetParentValues(CurrentNode.Parent));

                // Create document in base
                int newDocId = DocumentService.CreateDocument(newDocument, 1, query);

                if (newDocId > 0)
                {
                    // Set archive serial number if archive presentation
                    DocumentService.UpdateDocumentWithASN(newDocId, 0);

                    // Copy attached file to destination
                    FileSystemService.CopyFile(documentVM.Document.exchange, path);

                    var newDoc = DocumentService.ReadDocument(newDocId);

                    if (newDoc == null)
                    {
                        return(null);
                    }

                    documentVM.Document = newDoc;

                    return(documentVM);
                }
            }

            return(null);
        }
        public void Copy(string sourcePath, string destinationPath)
        {
            string text = Path.Combine(RootDirectoryPath, PreparePath(sourcePath));
            string path = Path.Combine(RootDirectoryPath, PreparePath(destinationPath));

            if (FileSystemService.DirectoryExists(text))
            {
                string destinationPath2 = GenerateCopiedFileItemPath(path, Path.GetFileName(text), isDirectory: true);
                FileSystemService.CopyDirectory(text, destinationPath2);
            }
            else if (FileSystemService.FileExists(text))
            {
                string destinationFilePath = GenerateCopiedFileItemPath(path, Path.GetFileName(text), isDirectory: false);
                FileSystemService.CopyFile(text, destinationFilePath);
            }
            else
            {
                FileManagementExceptionExecutor.ThrowFileNotFound(destinationPath);
            }
        }
        private void Save()
        {
            if (IsAttach && !string.IsNullOrEmpty(SearchCompanyTxt) && !string.IsNullOrEmpty(DocumentNumber))
            {
                Document newDocument = FillDocument();

                // Get path from tree nodes
                string url = CurrentNode == null ? "" : GetNewPath(CurrentNode);

                // Check folder exist
                string path = string.IsNullOrEmpty(url) ? "" : FolderService.GetFolderPath((int)CurrentPresentation, CurrentNode.Node.Name, url) + string.Format("{0} {1}.{2}", SelectedDocumentType.descriptionRU, newDocument.number.Replace("/", "_").Replace("\\", "_"), AttachedDocument.Substring(AttachedDocument.LastIndexOf(".") + 1));

                if (document != null && document.id != null && document.id > 0) // Update
                {
                    // Update link if need
                    if (AttachedDocument != DocumentService.ReadDocumentLink(document.id))
                    {
                        if (!string.IsNullOrEmpty(path))
                        {
                            DocumentService.UpdateDocumentLink(path, path.Substring(path.LastIndexOf(".") + 1), (int)document.linkId);

                            // Copy attached file to destination
                            if (FileSystemService.CopyFile(AttachedDocument, path))
                            {
                                MessagesService.Show("РЕДАКТИРОВАНИЕ", "Файл удачно занесен в архив");
                            }
                        }
                        else
                        {
                            MessagesService.Show("РЕДАКТИРОВАНИЕ", "Изменение прикрепленного файла не возможно, так как не выбрана ветка пути.\nБудут изменены лишь основные данные.");
                        }
                    }

                    // Update document
                    DocumentService.UpdateDocument(newDocument, document.id);

                    // Update serial number
                    if (CurrentPresentation == PresentationEnum.Archive)
                    {
                        DocumentService.UpdateDocumentWithASN(document.id, DocumentSerialNumber);
                    }

                    // Update view
                    presentTreeVM.DetailsVM.SelectedDocument.Document = DocumentService.ReadDocument(document.id);

                    // Close panel
                    Cancel();
                }
                else // Create
                {
                    // Create link
                    int linkId = DocumentService.CreateDocumentLink(path, path.Substring(path.LastIndexOf(".") + 1));

                    if (linkId > 0)
                    {
                        newDocument.linkId = linkId;
                        string query = string.Format("{0}={1},{2}", CurrentNode.Node.Level_id, CurrentNode.Node.Name, presentTreeVM.GetParentValues(CurrentNode.Parent));

                        // Create document in base
                        int newDocId = DocumentService.CreateDocument(newDocument, (int)CurrentPresentation, query);

                        if (newDocId > 0)
                        {
                            // Set archive serial number if archive presentation
                            if (CurrentPresentation == PresentationEnum.Archive)
                            {
                                DocumentService.UpdateDocumentWithASN(newDocId, DocumentSerialNumber);
                            }

                            // Copy attached file to destination
                            if (FileSystemService.CopyFile(AttachedDocument, path))
                            {
                                MessagesService.Show("СОХРАНЕНИЕ", "Файл удачно занесен в архив");

                                // Update view
                                presentTreeVM.DetailsVM.Documents.Add(new DocumentVM(DocumentService.ReadDocument(newDocId)));

                                // Close panel
                                Cancel();
                            }
                            else
                            {
                                MessagesService.Show("СОХРАНЕНИЕ", "Произошла ошибка во время занесения файла в архив");
                            }
                        }
                        else
                        {
                            MessagesService.Show("СОХРАНЕНИЕ", "Произошла ошибка во время сохранения документа в базе");
                        }
                    }
                    else
                    {
                        MessagesService.Show("СОХРАНЕНИЕ", "Произошла ошибка во время сохранения пути");
                    }
                }
            }
            else
            {
                MessagesService.Show("СОХРАНЕНИЕ", "Нет прикрепленного документа или не все данные заполненны.");
            }
        }