Clean imported documents, first pass of Import form

This commit is contained in:
Jonathan Jenne
2021-12-20 16:39:23 +01:00
parent 3b0474e713
commit 9a3761acc0
27 changed files with 677 additions and 2135 deletions

View File

@@ -18,8 +18,11 @@ Namespace Documents
Public Function CleanImportedDocuments(pDocuments As List(Of Document)) As Boolean
Dim oResult = True
Dim oOutputDirectory = FileEx.GetDateDirectory(GeneralConfig.OutputXmlFileDirectory)
Dim oImportedDocuments = pDocuments.
Where(Function(doc) doc.Imported = True).
ToList()
For Each oDocument As Document In pDocuments
For Each oDocument As Document In oImportedDocuments
Try
Dim oFileinfo = New FileInfo(oDocument.FullName)
Dim oDestination = Path.Combine(oOutputDirectory, oFileinfo.Name)

View File

@@ -1,9 +1,14 @@
Imports DigitalData.Modules.Logging
Public Class Helpers
Inherits BaseClass
Private ReadOnly LogConfig As LogConfig
Private ReadOnly Logger As Logger
''' <summary>
''' This class needs to initialize the logger by itself!
''' </summary>
Public Sub New(pLogConfig As LogConfig)
MyBase.New(pLogConfig)
LogConfig = pLogConfig
Logger = pLogConfig.GetLogger
End Sub
End Class

View File

@@ -136,6 +136,7 @@
<Compile Include="Report\ReportHead.vb" />
<Compile Include="Report\ReportPosition.vb" />
<Compile Include="Report\ReportSource.vb" />
<Compile Include="Winline\Entities\Document.vb" />
<Compile Include="Winline\Entities\Response.vb" />
<Compile Include="Templates\Template.vb" />
<Compile Include="Templates\TemplateLoader.vb" />

View File

@@ -0,0 +1,9 @@
Namespace Winline.Entities
Public Class Document
Public Property Account As Account
Public Property RunningNumber As String
Public Property Number As String
Public Property [Date] As Date
End Class
End Namespace

View File

@@ -30,7 +30,7 @@ Namespace Winline
RaiseEvent WebServiceProgress(Me, pMessage)
End Sub
Public Async Function TransferDocumentToWinline(pDocument As Document, pMandator As Mandator, Optional pIsTest As Boolean = False) As Task(Of Boolean)
Public Async Function TransferDocumentToWinline(pDocument As Documents.Document, pMandator As Mandator, Optional pIsTest As Boolean = False) As Task(Of Boolean)
Dim oBytes As Byte() = GetBytesFromDocument(pDocument)
Dim oWS = Config
@@ -105,6 +105,10 @@ Namespace Winline
End Try
End Function
Async Function ExportDocumentFromWinline() As Task
'TODO: Implement export call to winline
End Function
Private Async Function HandleResponse(pResponse As HttpResponseMessage, pOutputPath As String, pBaseFileNAme As String) As Task
pResponse.EnsureSuccessStatusCode()
Dim oResponseBody As String = Await pResponse.Content.ReadAsStringAsync()
@@ -166,7 +170,7 @@ Namespace Winline
End Try
End Function
Private Function GetBytesFromDocument(pDocument As Document) As Byte()
Private Function GetBytesFromDocument(pDocument As Documents.Document) As Byte()
Using oStream As New IO.MemoryStream()
Dim w = XmlWriter.Create(oStream)

View File

@@ -29,6 +29,14 @@ Namespace Winline
MappingConfig = pMappingConfig
End Sub
Public Enum DocumentType
Offer = 1
Order = 2
DeliverySlip = 3
Invoice = 4
End Enum
Public Async Function LoadArticles(pMandator As Mandator) As Task
Logger.Info("Loading Articles for Mandator [{0}]", pMandator)
Dim oYear = Config.GetWinLineYear()
@@ -447,6 +455,95 @@ Namespace Winline
Return Nothing
End Function
Public Function GetDocuments(pMandator As Mandator, pDocumentType As DocumentType) As List(Of Document)
Try
Dim oYear As Integer = Config.GetWinLineYear()
Dim oDocumentType As Integer = pDocumentType
Dim oSql = $"
SELECT
c139 DOCUMENT_TYPE,
c021 ACCOUNT_NUMBER,
c022 RUNNING_NUMBER,
c043 OFFER_NUMBER,
c027 OFFER_DATE,
c044 ORDER_NUMBER,
c028 ORDER_DATE,
c045 DELIVERY_NUMBER,
c029 DELIVERY_DATE,
c055 INVOICE_NUMBER,
c032 INVOICE_DATE,
mesoyear
FROM [{pMandator.Database}].[dbo].[T025]
WHERE
c139 = {oDocumentType} AND
[mesocomp] = '{pMandator.Id}' AND [mesoyear] = {oYear}"
Dim oTable As DataTable = Database.GetDatatable(oSql)
Dim oDocuments As New List(Of Document)
For Each oRow As DataRow In oTable.Rows
Try
Dim oDocument = GetDocumentFromDataRow(oRow)
oDocuments.Add(oDocument)
Catch ex As Exception
Logger.Error(ex)
End Try
Next
Return oDocuments
Catch ex As Exception
Logger.Warn("Error while loading documents for mandator [{0}] and document type [{1}]", pMandator, pDocumentType)
Logger.Error(ex)
Return Nothing
End Try
End Function
Private Function GetDocumentFromDataRow(pDataRow As DataRow) As Document
Dim oAccountNumber = pDataRow.Item("ACCOUNT_NUMBER")
Dim oRunningNumber As String = pDataRow.Item("RUNNING_NUMBER")
Dim oDocumentType As Integer = pDataRow.Item("DOCUMENT_TYPE")
Dim oDocumentNumber As String = Nothing
Dim oDocumentDate As Date = Nothing
Dim oAccount = Accounts.
Where(Function(acc) acc.Id = oAccountNumber).
FirstOrDefault()
Select Case oDocumentType
Case 1
oDocumentNumber = pDataRow.Item("OFFER_NUMBER")
oDocumentDate = pDataRow.Item("OFFER_DATE")
Case 2
oDocumentNumber = pDataRow.Item("ORDER_NUMBER")
oDocumentDate = pDataRow.Item("ORDER_DATE")
Case 3
oDocumentNumber = pDataRow.Item("DELIVERY_NUMBER")
oDocumentDate = pDataRow.Item("DELIVERY_DATE")
Case 4
oDocumentNumber = pDataRow.Item("INVOICE_NUMBER")
oDocumentDate = pDataRow.Item("INVOICE_DATE")
End Select
Dim oDocument As New Document With {
.Account = oAccount,
.RunningNumber = oRunningNumber,
.Number = oDocumentNumber,
.[Date] = oDocumentDate
}
Return oDocument
End Function
''' <summary>
''' Turns a database info like "SQLCWLDATEN on SERVER\INSTANCE" into a Tuple of two strings
''' </summary>