2021-08-04 16:16:12 +02:00

184 lines
7.2 KiB
VB.net

Imports System.IO
Imports System.Globalization
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraRichEdit
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Config
Imports DigitalData.Controls.SQLConfig
Imports DigitalData.GUIs.Common
Imports EDIDocumentImport.DocumentInfo
Imports EDIDocumentImport.DocumentPositions
Public Class frmMain
Public LogConfig As LogConfig
Public Logger As Logger
Public ConfigManager As ConfigManager(Of Config)
Public DocumentLoader As DocumentLoader
Public Database As MSSQLServer
Public FileLoader As FileLoader
Public GridBuilder As GridBuilder
Public Winline As WinLineInfo
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "EDI Document Importer")
ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath)
Logger = LogConfig.GetLogger()
' If ConnectionString does not exist, show SQL Config Form
If ConfigManager.Config.ConnectionString = String.Empty Then
Dim oForm As New frmSQLConfig(LogConfig) With {
.FormTitle = "EDI Document Importer"
}
Dim oResult = oForm.ShowDialog()
If oResult = DialogResult.OK Then
ConfigManager.Config.ConnectionString = oForm.ConnectionString
ConfigManager.Save()
End If
End If
' Initialize Database
Database = New MSSQLServer(LogConfig, ConfigManager.Config.ConnectionString)
Winline = New WinLineInfo(LogConfig, Database)
' Initialize Grids
GridBuilder = New GridBuilder(New List(Of GridView) From {GridViewFiles, GridViewPositions})
GridBuilder.
WithDefaults().
WithReadOnlyOptions(GridViewFiles)
' Construct classes related to the xml data
FileLoader = New FileLoader(LogConfig, ConfigManager.Config)
DocumentLoader = New DocumentLoader(LogConfig)
Catch ex As Exception
Logger.Error(ex)
MsgBox(ex.Message, MsgBoxStyle.Critical, Text)
End Try
End Sub
Private Sub btnLoadDocuments_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnLoadDocuments.ItemClick
Try
If FileLoader.LoadFiles() = True Then
GridControlFiles.DataSource = FileLoader.Files
txtFilesLoaded.Caption = $"{FileLoader.Files.Count} Dokumente geladen"
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, Text)
End Try
End Sub
Private Sub GridViewFiles_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles GridViewFiles.FocusedRowChanged
Dim oFile As FileInfo = GridViewFiles.GetRow(e.FocusedRowHandle)
If oFile Is Nothing Then
Exit Sub
End If
RichEditXml.LoadDocument(oFile.FullName, DocumentFormat.PlainText)
Try
Dim oResult As Tuple(Of Object, DocumentType) = FileLoader.LoadFile(oFile.FullName)
Select Case oResult.Item2
Case DocumentType.Order
ShowDocument(oResult.Item1)
End Select
Catch ex As Xml.XmlException
Dim oMessage As String = $"Fehler beim Verarbeiten des Dokuments {oFile.Name}:{vbNewLine}{ex.Message}"
MsgBox(oMessage, MsgBoxStyle.Critical, Text)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, Text)
End Try
End Sub
Private Sub ShowDocument(pDocument As Orders.MESOWebService)
' ====== Head Data ======
Dim oHead As Orders.MESOWebServiceEXIMVRG_ordersT025 = pDocument.Items.
Where(Function(i) TypeOf i Is Orders.MESOWebServiceEXIMVRG_ordersT025).
FirstOrDefault()
txtBELEGKEY.Text = oHead.BELEGKEY
txtRunningNumber.Text = oHead.Laufnummer
txtMandator.Text = oHead.Fakt_Kontonummer
txtOrderIssuer.Text = oHead.Fakt_Ansprechpartner
txtOrderNumber.Text = oHead.AuftragsBestellnummer
dateOrderDate.EditValue = oHead.Datum_AuftragBestellung
' ====== Position Data ======
Dim oPositions As List(Of Orders.MESOWebServiceEXIMVRG_ordersT026) = pDocument.Items.
Where(Function(i) TypeOf i Is Orders.MESOWebServiceEXIMVRG_ordersT026).
Select(Of Orders.MESOWebServiceEXIMVRG_ordersT026)(Function(i) i).
ToList()
Dim oPositionList As New List(Of OrderPosition)
For Each oPosition In oPositions
oPositionList.Add(New OrderPosition With {
.ArticleNumber = oPosition.Artikelnummer,
.RowNumber = oPosition.Zeilennummer,
.ArticleDescription = oPosition.Bezeichnung,
.ArticleNumberVendor = oPosition.Lieferantenartikelnummer,
.EDIPrice = oPosition.Einzelpreis,
.WinLinePrice = 0,
.Price = 0,
.Amount = oPosition.Menge_bestellt
})
Next
LoadViewAndColumns(GridViewPositions, DocumentType.Order)
GridControlPositions.DataSource = oPositionList
End Sub
Public Sub LoadViewAndColumns(pView As GridView, pDocumentType As DocumentType)
Dim oColumns As List(Of GridColumn)
Select Case pDocumentType
Case DocumentType.Order
oColumns = New List(Of GridColumn) From {
ColumnRowNumber,
ColumnArticleNumber,
ColumnArticleNumberVendor,
ColumnArticleDescription,
ColumnEDIPrice,
ColumnWinLinePrice,
ColumnPrice
}
Case Else
oColumns = New List(Of GridColumn)
End Select
pView.GridControl.DataSource = Nothing
pView.GridControl.ForceInitialize()
pView.Columns.AddRange(oColumns.ToArray())
pView.BestFitColumns()
End Sub
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
Process.Start(ConfigManager.Config.InputDirectory)
End Sub
Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
Process.Start(ConfigManager.Config.OutputDirectory)
End Sub
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
Dim oUserConfigDirectory = New FileInfo(ConfigManager.UserConfigPath).Directory
Process.Start(oUserConfigDirectory.FullName)
End Sub
Private Sub checkShowXml_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkShowXml.CheckedChanged
SplitContainerControl3.Collapsed = Not checkShowXml.Checked
End Sub
End Class