public FtpOutboundData QueueUploadItem(string fileData, string targetDirectory, string targetFileName, string ftpSettingsKey, EnumSettingSource ftpSettingsSource)
		{
			string attachmentID = Guid.NewGuid().ToString();

			using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
			{
				bool anyExistingItems = _documentSession.Query<FtpOutboundData>()
											.Customize(i => i.WaitForNonStaleResultsAsOfNow(TimeSpan.FromSeconds(120)))
											.Where(i=>i.TargetFileName == targetFileName)
											.Any();
				if (anyExistingItems)
				{
					throw new Exception(string.Format("FtpOutputData record for file name {0} already exists", targetFileName));
				}
				_ravenManager.SetAttachment(attachmentID, fileData);
				var newItem = new FtpOutboundData
				{
					AttachmentId = attachmentID,
					QueuedDateTimeUtc = DateTime.UtcNow,
					SettingKey = ftpSettingsKey,
					SettingSource = ftpSettingsSource,
					Status = EnumJobStatus.New,
					TargetDirectory = targetDirectory,
					TargetFileName = targetFileName
				};
				_documentSession.Store(newItem);
				_documentSession.SaveChanges();
				transaction.Complete();

				return newItem;
			}
		}
		public void MarkItemSuccessful(FtpOutboundData jobData)
		{
			jobData.Status = EnumJobStatus.Complete;
			_documentSession.SaveChanges();
		}
		public void MarkItemFailed(FtpOutboundData jobData, Exception err)
		{
			var errorObject = _eventReporter.ExceptionForObject(err, jobData);
			jobData.Status = EnumJobStatus.Error;
            jobData.AddException(err);
			jobData.ExceptionIdList.Add(errorObject.Id);
			_documentSession.SaveChanges();	
		}
		public void UploadFile(FtpOutboundData jobItem)
		{
			var settings = _settingsManager.Load<FtpConnectionSettings>(jobItem.SettingSource, jobItem.SettingKey);
			var attachmentData = _ravenManager.GetAttachment(jobItem.AttachmentId);
			_ftpCommunicator.UploadFile(jobItem.SettingSource, jobItem.SettingKey, jobItem.TargetFileName, jobItem.TargetDirectory, attachmentData);
		}