114 lines
4.5 KiB
VB.net
114 lines
4.5 KiB
VB.net
Imports System.Collections.Generic
|
|
Imports System.IO
|
|
Imports System.Linq
|
|
Imports DigitalData.Modules.Base
|
|
Imports DigitalData.Modules.Database
|
|
Imports DigitalData.Modules.Interfaces
|
|
Imports DigitalData.Modules.Logging
|
|
Imports Microsoft.VisualBasic.FileIO
|
|
|
|
Namespace ZUGFeRD
|
|
Public Class FileFunctions
|
|
Private ReadOnly _logConfig As LogConfig
|
|
Private ReadOnly _logger As Logger
|
|
Private ReadOnly _mssql As MSSQLServer
|
|
Private ReadOnly _filesystem As FilesystemEx
|
|
|
|
Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer)
|
|
_logConfig = LogConfig
|
|
_logger = _logConfig.GetLogger()
|
|
_mssql = MSSQL
|
|
_filesystem = New FilesystemEx(LogConfig)
|
|
End Sub
|
|
|
|
Public Sub MoveFiles(
|
|
Args As WorkerArgs,
|
|
MessageId As String,
|
|
Files As List(Of FileInfo),
|
|
AttachmentFiles As List(Of FileInfo),
|
|
EmbeddedAttachments As List(Of PDFEmbeds.EmbeddedFile),
|
|
MoveDirectory As String,
|
|
IsSuccess As Boolean)
|
|
|
|
Dim oFinalMoveDirectory As String = MoveDirectory
|
|
Dim oDateSubDirectoryName As String = Now.ToString("yyyy\\MM\\dd")
|
|
Dim oAttachmentDirectory As String = Path.Combine(oFinalMoveDirectory, Args.AttachmentsSubDirectory, oDateSubDirectoryName)
|
|
|
|
' Files will be moved to a subfolder for the current day if they are rejected
|
|
If Not IsSuccess Then
|
|
oFinalMoveDirectory = Path.Combine(oFinalMoveDirectory, oDateSubDirectoryName)
|
|
End If
|
|
|
|
' Create directories if they don't exist
|
|
If Not Directory.Exists(oFinalMoveDirectory) Then
|
|
Try
|
|
Directory.CreateDirectory(oFinalMoveDirectory)
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
End Try
|
|
End If
|
|
|
|
If Not Directory.Exists(oAttachmentDirectory) And AttachmentFiles.Count > 0 Then
|
|
Try
|
|
Directory.CreateDirectory(oAttachmentDirectory)
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
End Try
|
|
End If
|
|
|
|
' Filter out Attachments from `Files`
|
|
Dim oInvoiceFiles As List(Of FileInfo) = Files.Except(AttachmentFiles).ToList()
|
|
|
|
' Move PDF/A Files
|
|
For Each oFile In oInvoiceFiles
|
|
Try
|
|
Dim oFilePath = _filesystem.GetVersionedFilename(Path.Combine(oFinalMoveDirectory, oFile.Name))
|
|
|
|
_filesystem.MoveTo(oFile.FullName, oFilePath, oFinalMoveDirectory)
|
|
|
|
_logger.Info("File moved to {0}", oFilePath)
|
|
Catch ex As Exception
|
|
_logger.Warn("Could not move file {0}", oFile.FullName)
|
|
_logger.Error(ex)
|
|
End Try
|
|
Next
|
|
|
|
' Move non-PDF/A Email Attachments/Files
|
|
For Each oFile In AttachmentFiles
|
|
Try
|
|
Dim oFilePath = _filesystem.GetVersionedFilename(Path.Combine(oAttachmentDirectory, oFile.Name))
|
|
|
|
_filesystem.MoveTo(oFile.FullName, oFilePath, oAttachmentDirectory)
|
|
_logger.Info("Attachment moved to {0}", oFilePath)
|
|
Catch ex As Exception
|
|
_logger.Warn("Could not move attachment {0}", oFile.FullName)
|
|
_logger.Error(ex)
|
|
End Try
|
|
Next
|
|
|
|
' Write Embedded Files to disk
|
|
For Each oResult In EmbeddedAttachments
|
|
Try
|
|
Dim oFileName As String = $"{MessageId}~{oResult.FileName}"
|
|
Dim oFilePath As String = Path.Combine(oAttachmentDirectory, oFileName)
|
|
|
|
If Not File.Exists(oAttachmentDirectory) Then
|
|
Directory.CreateDirectory(oAttachmentDirectory)
|
|
End If
|
|
|
|
Using oWriter As New FileStream(oFilePath, FileMode.Create)
|
|
oWriter.Write(oResult.FileContents, 0, oResult.FileContents.Length)
|
|
_logger.Info("Embedded Attachment moved to {0}", oFilePath)
|
|
End Using
|
|
Catch ex As Exception
|
|
_logger.Warn("Could not save embedded attachment {0}", oResult.FileName)
|
|
_logger.Error(ex)
|
|
End Try
|
|
Next
|
|
|
|
_logger.Info("Finished moving files")
|
|
End Sub
|
|
End Class
|
|
|
|
End Namespace
|