/// <summary>
        /// Start a document download
        /// </summary>
        /// <param name="logonId"></param>
        /// <param name="DocumentId"></param>
        /// <returns></returns>
        public StartDocumentDownloadReturnValue StartDocumentDownloadForMatter(Guid logonId, Guid projectId,
            int DocumentId)
        {
            StartDocumentDownloadReturnValue ReturnValue = new StartDocumentDownloadReturnValue();

            try
            {
                // Get the logged on user from the current logons and add their
                // ApplicationSettings the list of concurrent sessions.
                Host.LoadLoggedOnUser(logonId);

                try
                {
                    Functions.RestrictRekoopIntegrationUser(UserInformation.Instance.DbUid);
                    switch (UserInformation.Instance.UserType)
                    {
                        case DataConstants.UserType.Staff:
                            // Check permission
                            if (!UserSecuritySettings.GetUserSecuitySettings(9))
                                throw new Exception("You do not have sufficient permissions to carry out this request");
                            break;
                        case DataConstants.UserType.Client:
                        case DataConstants.UserType.ThirdParty:
                            if (!SrvMatterCommon.WebAllowedToAccessMatter(projectId))
                                throw new Exception("Access denied");

                            // Must check that document belongs to the matter
                            // (otherwise any docId could be passed and the matter security check above is meaningless)
                            this.CheckDocumentBelongsToMatter(projectId, DocumentId);

                            // if user is client or third party and the document is not public, throw an access denied exception
                            SrvDocument srvDoc = new SrvDocument();
                            srvDoc.Load(DocumentId);

                            if (!srvDoc.IsPublic)
                                throw new Exception("Access denied");
                            break;
                        default:
                            throw new Exception("Access denied");
                    }

                    string SourceFileName = string.Empty;
                    string downloadedFilePath = string.Empty;
                    string originalFilePath = string.Empty;
                    Common dmCommon = new Common();

                    try
                    {
                        originalFilePath = dmCommon.GetDownloadDocPath(DocumentId);
                        if (!string.IsNullOrEmpty(originalFilePath))
                        {
                            downloadedFilePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + Path.GetExtension(originalFilePath));
                            File.Copy(originalFilePath, downloadedFilePath, true);

                            // If originalFilePath is of Temp folder then that means the original file which was in encrypted format
                            // is now decrypted and stored in Temp folder.
                            // After copying the original file(decrypted) into the temp folder delete that file(decrypted).
                            string decryptedFilePath = Path.Combine(Path.GetTempPath(), new FileInfo(originalFilePath).Name);
                            if (File.Exists(decryptedFilePath))
                            {
                                File.Delete(decryptedFilePath);
                            }
                        }
                        else
                        {
                            throw new Exception("Download failed while contacting server for file.");
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    SourceFileName = downloadedFilePath;

                    FileDownloadInfo FileInfoData = FileTransfer.StartFileDownload(logonId, SourceFileName, true);

                    ReturnValue.TransferId = FileInfoData.TransferId;
                    //ReturnValue.FileName = FileInfoData.FileName;
                    ReturnValue.FileName = new FileInfo(originalFilePath).Name;
                    ReturnValue.Size = FileInfoData.Size;
                    ReturnValue.ModifiedDate = FileInfoData.ModifiedDate;
                    ReturnValue.Hash = FileInfoData.Hash;

                }
                finally
                {
                    // Remove the logged on user's ApplicationSettings from the
                    // list of concurrent sessions
                    Host.UnloadLoggedOnUser();
                }
            }
            catch (System.Data.SqlClient.SqlException)
            {
                ReturnValue.Success = false;
                ReturnValue.Message = Functions.SQLErrorMessage;
            }
            catch (Exception ex)
            {
                ReturnValue.Success = false;
                ReturnValue.Message = ex.Message;
            }

            return ReturnValue;
        }