210 lines
10 KiB
C#
210 lines
10 KiB
C#
using Disco.BI.DocumentTemplateBI;
|
|
using Disco.Data.Repository;
|
|
using Disco.Models.Repository;
|
|
using Disco.Services.Logging;
|
|
using Disco.Services.Users;
|
|
using Exceptionless;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace Disco.BI.Extensions
|
|
{
|
|
public static class AttachmentExtensions
|
|
{
|
|
|
|
public static bool ImportPdfAttachment(this DocumentUniqueIdentifier UniqueIdentifier, DiscoDataContext Database, System.IO.Stream PdfContent, byte[] PdfThumbnail)
|
|
{
|
|
UniqueIdentifier.LoadComponents(Database);
|
|
DocumentTemplate documentTemplate = UniqueIdentifier.DocumentTemplate;
|
|
string filename;
|
|
string comments;
|
|
object attachment;
|
|
|
|
if (documentTemplate == null)
|
|
{
|
|
filename = string.Format("{0}_{1:yyyyMMdd-HHmmss}.pdf", UniqueIdentifier.DataId.Replace('\\', '_'), UniqueIdentifier.TimeStamp);
|
|
comments = string.Format("Uploaded: {0:s}", UniqueIdentifier.TimeStamp);
|
|
}
|
|
else
|
|
{
|
|
filename = string.Format("{0}_{1:yyyyMMdd-HHmmss}.pdf", UniqueIdentifier.TemplateTypeId, UniqueIdentifier.TimeStamp);
|
|
comments = string.Format("Generated: {0:s}", UniqueIdentifier.TimeStamp);
|
|
}
|
|
|
|
User creatorUser = UserService.GetUser(UniqueIdentifier.CreatorId, Database);
|
|
if (creatorUser == null)
|
|
{
|
|
// No Creator User (or Username invalid)
|
|
creatorUser = UserService.CurrentUser;
|
|
}
|
|
switch (UniqueIdentifier.DataScope)
|
|
{
|
|
case DocumentTemplate.DocumentTemplateScopes.Device:
|
|
Device d = (Device)UniqueIdentifier.Data;
|
|
attachment = d.CreateAttachment(Database, creatorUser, filename, DocumentTemplate.PdfMimeType, comments, PdfContent, documentTemplate, PdfThumbnail);
|
|
break;
|
|
case DocumentTemplate.DocumentTemplateScopes.Job:
|
|
Job j = (Job)UniqueIdentifier.Data;
|
|
attachment = j.CreateAttachment(Database, creatorUser, filename, DocumentTemplate.PdfMimeType, comments, PdfContent, documentTemplate, PdfThumbnail);
|
|
break;
|
|
case DocumentTemplate.DocumentTemplateScopes.User:
|
|
User u = (User)UniqueIdentifier.Data;
|
|
attachment = u.CreateAttachment(Database, creatorUser, filename, DocumentTemplate.PdfMimeType, comments, PdfContent, documentTemplate, PdfThumbnail);
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
|
|
if (documentTemplate != null && !string.IsNullOrWhiteSpace(documentTemplate.OnImportAttachmentExpression))
|
|
{
|
|
try
|
|
{
|
|
var expressionResult = documentTemplate.EvaluateOnAttachmentImportExpression(attachment, Database, creatorUser, UniqueIdentifier.TimeStamp);
|
|
DocumentsLog.LogImportAttachmentExpressionEvaluated(documentTemplate, UniqueIdentifier.Data, attachment, expressionResult);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SystemLog.LogException("Document Importer - OnImportAttachmentExpression", ex);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static string RepositoryFilename(this DeviceAttachment da, DiscoDataContext Database)
|
|
{
|
|
return Path.Combine(DataStore.CreateLocation(Database, "DeviceAttachments", da.Timestamp), string.Format("{0}_{1}_file", da.DeviceSerialNumber, da.Id));
|
|
}
|
|
public static string RepositoryFilename(this JobAttachment ja, DiscoDataContext Database)
|
|
{
|
|
return Path.Combine(DataStore.CreateLocation(Database, "JobAttachments", ja.Timestamp), string.Format("{0}_{1}_file", ja.JobId, ja.Id));
|
|
}
|
|
public static string RepositoryFilename(this UserAttachment ua, DiscoDataContext Database)
|
|
{
|
|
return Path.Combine(DataStore.CreateLocation(Database, "UserAttachments", ua.Timestamp), string.Format("{0}_{1}_file", ua.UserId.Replace('\\', '_'), ua.Id));
|
|
}
|
|
|
|
private static string RepositoryThumbnailFilenameInternal(string DirectoryPath, string Filename)
|
|
{
|
|
return Path.Combine(DirectoryPath, Filename);
|
|
}
|
|
public static string RepositoryThumbnailFilename(this DeviceAttachment da, DiscoDataContext Database)
|
|
{
|
|
return RepositoryThumbnailFilenameInternal(DataStore.CreateLocation(Database, "DeviceAttachments", da.Timestamp), string.Format("{0}_{1}_thumb.jpg", da.DeviceSerialNumber, da.Id));
|
|
}
|
|
public static string RepositoryThumbnailFilename(this JobAttachment ja, DiscoDataContext Database)
|
|
{
|
|
return RepositoryThumbnailFilenameInternal(DataStore.CreateLocation(Database, "JobAttachments", ja.Timestamp), string.Format("{0}_{1}_thumb.jpg", ja.JobId, ja.Id));
|
|
}
|
|
public static string RepositoryThumbnailFilename(this UserAttachment ua, DiscoDataContext Database)
|
|
{
|
|
return RepositoryThumbnailFilenameInternal(DataStore.CreateLocation(Database, "UserAttachments", ua.Timestamp), string.Format("{0}_{1}_thumb.jpg", ua.UserId.Replace('\\', '_'), ua.Id));
|
|
}
|
|
|
|
public static void RepositoryDelete(this DeviceAttachment da, DiscoDataContext Database)
|
|
{
|
|
RepositoryDelete(da.RepositoryFilename(Database), da.RepositoryThumbnailFilename(Database));
|
|
}
|
|
public static void RepositoryDelete(this JobAttachment ja, DiscoDataContext Database)
|
|
{
|
|
RepositoryDelete(ja.RepositoryFilename(Database), ja.RepositoryThumbnailFilename(Database));
|
|
}
|
|
public static void RepositoryDelete(this UserAttachment ua, DiscoDataContext Database)
|
|
{
|
|
RepositoryDelete(ua.RepositoryFilename(Database), ua.RepositoryThumbnailFilename(Database));
|
|
}
|
|
private static void RepositoryDelete(params string[] filePaths)
|
|
{
|
|
foreach (string filePath in filePaths)
|
|
{
|
|
if (File.Exists(filePath))
|
|
File.Delete(filePath);
|
|
}
|
|
}
|
|
|
|
public static string SaveAttachment(this DeviceAttachment da, DiscoDataContext Database, Stream FileContent)
|
|
{
|
|
string filePath = da.RepositoryFilename(Database);
|
|
SaveAttachment(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
public static string SaveAttachment(this JobAttachment ja, DiscoDataContext Database, Stream FileContent)
|
|
{
|
|
string filePath = ja.RepositoryFilename(Database);
|
|
SaveAttachment(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
public static string SaveAttachment(this UserAttachment ua, DiscoDataContext Database, Stream FileContent)
|
|
{
|
|
string filePath = ua.RepositoryFilename(Database);
|
|
SaveAttachment(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
public static string SaveThumbnailAttachment(this DeviceAttachment da, DiscoDataContext Database, byte[] FileContent)
|
|
{
|
|
string filePath = da.RepositoryThumbnailFilename(Database);
|
|
File.WriteAllBytes(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
public static string SaveThumbnailAttachment(this JobAttachment ja, DiscoDataContext Database, byte[] FileContent)
|
|
{
|
|
string filePath = ja.RepositoryThumbnailFilename(Database);
|
|
File.WriteAllBytes(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
public static string SaveThumbnailAttachment(this UserAttachment ua, DiscoDataContext Database, byte[] FileContent)
|
|
{
|
|
string filePath = ua.RepositoryThumbnailFilename(Database);
|
|
File.WriteAllBytes(filePath, FileContent);
|
|
return filePath;
|
|
}
|
|
private static void SaveAttachment(string FilePath, Stream FileContent)
|
|
{
|
|
using (FileStream sw = new FileStream(FilePath, FileMode.Create, FileAccess.Write, FileShare.None))
|
|
{
|
|
FileContent.CopyTo(sw);
|
|
sw.Flush();
|
|
sw.Close();
|
|
}
|
|
}
|
|
|
|
public static string GenerateThumbnail(this DeviceAttachment da, DiscoDataContext Database)
|
|
{
|
|
string filePath = da.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(da.RepositoryFilename(Database), da.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
public static string GenerateThumbnail(this JobAttachment ja, DiscoDataContext Database)
|
|
{
|
|
string filePath = ja.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(ja.RepositoryFilename(Database), ja.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
public static string GenerateThumbnail(this UserAttachment ua, DiscoDataContext Database)
|
|
{
|
|
string filePath = ua.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(ua.RepositoryFilename(Database), ua.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
public static string GenerateThumbnail(this DeviceAttachment da, DiscoDataContext Database, Stream SourceFile)
|
|
{
|
|
string filePath = da.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(SourceFile, da.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
public static string GenerateThumbnail(this JobAttachment ja, DiscoDataContext Database, Stream SourceFile)
|
|
{
|
|
string filePath = ja.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(SourceFile, ja.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
public static string GenerateThumbnail(this UserAttachment ua, DiscoDataContext Database, Stream SourceFile)
|
|
{
|
|
string filePath = ua.RepositoryThumbnailFilename(Database);
|
|
AttachmentBI.Utilities.GenerateThumbnail(SourceFile, ua.MimeType, filePath);
|
|
return filePath;
|
|
}
|
|
|
|
|
|
}
|
|
}
|