public static CreateDocumentOKResponse CreateDocument(ServiceHelper serviceHelper, DocumentInfo documentInfo, CaseInfo caseInfo, ProjectInfo projectInfo)
        {
            Byte[] bytes      = File.ReadAllBytes(@$ "{documentInfo.File_Path}");
            String base64file = Convert.ToBase64String(bytes);

            CreateDocumentArgsParameterFilesItem file = new CreateDocumentArgsParameterFilesItem()
            {
                Title  = documentInfo.File_Title,
                Format = documentInfo.File_Format,

                Base64Data = base64file
            };

            List <CreateDocumentArgsParameterFilesItem> files = new List <CreateDocumentArgsParameterFilesItem>();

            files.Add(file);

            CreateCaseWithProjectResponse createCaseWithProjectResponse = null;

            if (documentInfo.CreateCase)
            {
                createCaseWithProjectResponse = CreateCase(serviceHelper, caseInfo, projectInfo);

                documentInfo.CaseNumber = createCaseWithProjectResponse.createCaseOKResponse.CaseNumber;
            }

            CreateDocumentArgs createDocumentArgs = new CreateDocumentArgs(new CreateDocumentArgsParameter()
            {
                CaseNumber      = documentInfo.CaseNumber,
                Title           = documentInfo.Title,
                UnofficialTitle = documentInfo.UnofficialTitle,
                DocumentDate    = documentInfo.DocumentDate,
                JournalDate     = documentInfo.JournalDate,
                DispatchedDate  = documentInfo.DispatchedDate,
                Category        = documentInfo.Category,
                Status          = documentInfo.Status,
                Files           = files
            });

            CreateDocumentOKResponse createDocumentOKResponse = serviceHelper.DocumentService.CreateDocument(createDocumentArgs);

            CreateDocumentWithCaseResponse createDocumentWithFileStreamResponse = new CreateDocumentWithCaseResponse()
            {
                createDocumentOKResponse      = createDocumentOKResponse,
                createCaseWithProjectResponse = createCaseWithProjectResponse ?? new CreateCaseWithProjectResponse()
            };


            return(createDocumentOKResponse);
        }
        public static CreateDocumentWithFileUploadResponse CreateDocumentWithFileUpload(ServiceHelper serviceHelper, DocumentInfo documentInfo, CaseInfo caseInfo, ProjectInfo projectInfo)
        {
            Byte[] bytes = File.ReadAllBytes(@$ "{documentInfo.File_Path}");

            UploadArgs uploadArgsParameter = new UploadArgs(new UploadArgsParameter()
            {
                FileData = bytes.Select(b => b as object).ToList()
            });

            if (String.IsNullOrWhiteSpace(documentInfo.File_Format) == false)
            {
                uploadArgsParameter.Parameter.FileFormat = documentInfo.File_Format;
            }

            if (String.IsNullOrWhiteSpace(documentInfo.File_Title) == false)
            {
                uploadArgsParameter.Parameter.FileName = documentInfo.File_Title;
            }

            if (String.IsNullOrWhiteSpace(documentInfo.AdContextUser) == false)
            {
                uploadArgsParameter.Parameter.ADContextUser = documentInfo.AdContextUser;
            }

            if (String.IsNullOrWhiteSpace(documentInfo.User) == false)
            {
                uploadArgsParameter.Parameter.User = documentInfo.User;
            }

            UploadOKResponse uploadOKResponse = serviceHelper.FileService.Upload(uploadArgsParameter);

            CreateDocumentArgsParameterFilesItem file = new CreateDocumentArgsParameterFilesItem()
            {
                Title  = documentInfo.File_Title,
                Format = documentInfo.File_Format,
                UploadedFileReference = uploadOKResponse.FileReference
            };

            List <CreateDocumentArgsParameterFilesItem> files = new List <CreateDocumentArgsParameterFilesItem>();

            files.Add(file);

            CreateDocumentArgsParameterFilesFromTemplateItem template = null;

            if (String.IsNullOrWhiteSpace(documentInfo.TemplateId) == false &&
                String.IsNullOrWhiteSpace(documentInfo.TemplateTitle) == false)
            {
                template = new CreateDocumentArgsParameterFilesFromTemplateItem()
                {
                    TemplateId = documentInfo.TemplateId,
                    Title      = documentInfo.TemplateTitle
                };
            }

            CreateCaseWithProjectResponse createCaseWithProjectResponse = null;

            if (documentInfo.CreateCase)
            {
                createCaseWithProjectResponse = CreateCase(serviceHelper, caseInfo, projectInfo);

                documentInfo.CaseNumber = createCaseWithProjectResponse.createCaseOKResponse.CaseNumber;
            }

            CreateDocumentArgs createDocumentArgs = new CreateDocumentArgs(new CreateDocumentArgsParameter()
            {
                CaseNumber      = documentInfo.CaseNumber,
                Title           = documentInfo.Title,
                UnofficialTitle = documentInfo.UnofficialTitle,
                DocumentDate    = documentInfo.DocumentDate,
                JournalDate     = documentInfo.JournalDate,
                DispatchedDate  = documentInfo.DispatchedDate,
                Category        = documentInfo.Category,
                Status          = documentInfo.Status,
                Files           = files
            });

            if (template != null)
            {
                createDocumentArgs.Parameter.FilesFromTemplate = new[] { template };
            }

            CreateDocumentOKResponse createDocumentOKResponse = serviceHelper.DocumentService.CreateDocument(createDocumentArgs);

            CreateDocumentWithFileUploadResponse createDocumentWithFileStreamResponse = new CreateDocumentWithFileUploadResponse()
            {
                uploadOKResponse              = uploadOKResponse,
                createDocumentOKResponse      = createDocumentOKResponse,
                createCaseWithProjectResponse = createCaseWithProjectResponse ?? new CreateCaseWithProjectResponse()
            };

            return(createDocumentWithFileStreamResponse);
        }