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 Database As MSSQLServer Public DocumentLoader As DocumentLoader Public GridBuilder As GridBuilder Public Winline As WinLineInfo Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try txtVersion.Caption = String.Format(txtVersion.Caption, Application.ProductVersion) LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "EDI Document Importer") ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath) ConfigManager.Save() 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 Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString) Database = New MSSQLServer(LogConfig, oConnectionString) Winline = New WinLineInfo(LogConfig, Database) ' Load WinLine Data Winline.Mandators.Clear() Winline.LoadMandators() Winline.LoadEconomicYears() For Each oMandator In Winline.Mandators Winline.LoadAccounts(oMandator) Next ' Load data for UI Fields cmbMandator.Properties.DataSource = Winline.Mandators cmbCustomer.Properties.DataSource = Winline.Accounts cmbDeliveryAddress.Properties.DataSource = Winline.Accounts cmbYears.Properties.Items.AddRange(Winline.Years) cmbYears.SelectedItem = Now.Year ' Initialize Grids GridBuilder = New GridBuilder(New List(Of GridView) From {GridViewFiles, GridViewPositions}) GridBuilder. WithDefaults(). WithReadOnlyOptions(GridViewFiles) ' Construct classes related to the xml data DocumentLoader = New DocumentLoader(LogConfig, ConfigManager.Config) 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 DocumentLoader.LoadFiles() = True Then GridControlFiles.DataSource = DocumentLoader.Files txtFilesLoaded.Caption = $"{DocumentLoader.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 Document = GridViewFiles.GetRow(e.FocusedRowHandle) If oFile Is Nothing Then Exit Sub End If RichEditXml.LoadDocument(oFile.FullName, DocumentFormat.PlainText) Try Select Case oFile.Type Case DocumentType.Order 'ShowDocument(oFile.Data) 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) Logger.Error(ex) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, Text) Logger.Error(ex) 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 txtOrderIssuer.Text = oHead.Fakt_Ansprechpartner txtOrderNumber.Text = oHead.AuftragsBestellnummer dateOrderDate.EditValue = oHead.Datum_AuftragBestellung cmbMandator.EditValue = Winline.Mandators. Where(Function(m) m.Id = "SIVT"). SingleOrDefault() cmbCustomer.EditValue = Winline.Accounts. Where(Function(m) m.Id = oHead.Fakt_Kontonummer). SingleOrDefault() ' ====== 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 Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem4.ItemClick MsgBox("Mach et!") End Sub End Class