Imports System.IO Imports System.Net.Http Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraReports.UI Imports DigitalData.GUIs.Common Imports DigitalData.Modules.Config Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports MultiTool.Shared Imports MultiTool.Shared.Documents Imports MultiTool.Shared.Templates Imports MultiTool.Shared.Winline Imports MultiTool.Shared.Winline.Entities Imports MultiTool.Shared.Constants Imports MultiTool.Shared.Exceptions Imports MultiTool.Shared.Documents.Document Public Class frmImportMain Public LogConfig As LogConfig Public ConfigManager As ConfigManager(Of Config) Private Logger As Logger Private Database As MSSQLServer Private Winline As WinlineData Private FileEx As DigitalData.Modules.Filesystem.File Private WebService As WebServiceData Private DocumentLoader As Documents.DocumentLoader Private DocumentCleaner As Documents.DocumentCleaner Private ReportGenerator As ReportGenerator(Of OrderReport) Private FormHelper As FormHelper Private Grids As List(Of GridControl) Private GridLoader As GridLoader Private GridBuilder As GridBuilder Private ReadOnly CurrentTemplate As Template = Nothing ' Runtime variables Private CurrentGrid As GridControl = Nothing Private CurrentDocument As Document = Nothing Public Sub New(pLogConfig As LogConfig, pConfigManager As ConfigManager(Of Config), pTemplate As Template) InitializeComponent() LogConfig = pLogConfig ConfigManager = pConfigManager CurrentTemplate = pTemplate End Sub Private Sub frmImportMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try Logger = LogConfig.GetLogger() FormHelper = New FormHelper(LogConfig, Me) ' Initialize Database Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString) Database = New MSSQLServer(LogConfig, oConnectionString) GridBuilder = New GridBuilder(GridViewFiles) GridBuilder.WithDefaults.WithReadOnlyOptions.WithClipboardHandler() GridViewFiles.OptionsView.ShowAutoFilterRow = False Winline = My.Winline FileEx = New DigitalData.Modules.Filesystem.File(LogConfig) WebService = New WebServiceData(LogConfig, Database, Winline, My.GeneralConfiguration.Webservice, My.GeneralConfiguration) AddHandler WebService.WebServiceProgress, AddressOf WebService_Progress Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Initialisieren_der_Anwendungs_Daten) End Try Text = String.Format(My.Resources.frmShared._0____WebService_Multitool_für_WinLine, CurrentTemplate.Name) End Sub Private Sub frmImportMain_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown btnLoadFiles.Enabled = False SplashScreenManager.ShowWaitForm() Try SplashScreenManager.SetWaitFormDescription(My.Resources.frmImportMainExtra.Lade_Oberfläche) lookupMandator.Properties.DataSource = Winline.Mandators lookupMandator.ForceInitialize() lookupMandator.Properties.View.BestFitColumns() DocumentLoader = New Documents.DocumentLoader(LogConfig, Winline, My.MappingConfiguration, My.TemplateConfiguration) DocumentCleaner = New Documents.DocumentCleaner(LogConfig, CurrentTemplate) GridLoader = New GridLoader(LogConfig) ReportGenerator = New ReportGenerator(Of OrderReport)(LogConfig, Database, My.TemplateConfiguration, My.GeneralConfiguration) SplashScreenManager.SetWaitFormDescription(My.Resources.frmImportMainExtra.Lade_Vorlagen) Grids = CreateGridsAndColumns(CurrentTemplate) For Each oGrid As GridControl In Grids AddHandler oGrid.GotFocus, AddressOf Grid_Focus Next Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Laden_der_Winline_Daten) Finally SplashScreenManager.CloseWaitForm() btnLoadFiles.Enabled = True End Try End Sub Private Sub frmImportMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Try DocumentCleaner.CleanImportedDocuments(DocumentLoader.Files) Catch ex As Exception FormHelper.ShowError(ex, "Beenden der Anwendung") End Try End Sub Private Sub Grid_Focus(sender As GridControl, e As EventArgs) CurrentGrid = sender End Sub Private Sub Grid_MouseDoubleClick(sender As Object, e As MouseEventArgs) Dim oGrid As GridControl = DirectCast(sender, GridControl) Dim oView As GridView = DirectCast(oGrid.FocusedView, GridView) Dim oHitInfo = oView.CalcHitInfo(e.Location) If Not oHitInfo.InDataRow Then Exit Sub End If Dim oRow As DataRow = oView.GetFocusedDataRow() Dim oModifiedRow = EditRow(oRow, oView) If oModifiedRow IsNot Nothing Then ReloadRow(oModifiedRow) End If End Sub Private Sub btnEditRow_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditRow.ItemClick Dim oGrid As GridControl = DirectCast(CurrentGrid, GridControl) Dim oView As GridView = DirectCast(oGrid.FocusedView, GridView) Dim oRow As DataRow = oView.GetFocusedDataRow() If oRow Is Nothing Then Exit Sub End If Dim oModifiedRow = EditRow(oRow, oView) If oModifiedRow IsNot Nothing Then ReloadRow(oModifiedRow) End If End Sub Private Function EditRow(pRow As DataRow, pView As GridView) As DocumentRow Try Dim oColumns = pView.Columns.Select(Function(c) c.FieldName).ToList() Dim oDocumentRow = CurrentDocument.Rows. Where(Function(r) r.Id.ToString = pRow.Item(COLUMN_GUID)). SingleOrDefault() Dim oTemplateTable = CurrentTemplate.Tables. Where(Function(t) t.Name = pView.GridControl.Name). SingleOrDefault() Dim oForm As New frmRowEditor( LogConfig, oColumns, oDocumentRow, CurrentDocument.Mandator, Winline, oTemplateTable ) If oForm.ShowDialog() = DialogResult.OK Then Return oForm.DocumentRow Else Return Nothing End If Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Laden_der_Detailzeilen) Return Nothing End Try End Function Private Async Function btnLoadFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) As Task Handles btnLoadFiles.ItemClick Await LoadFiles() End Function Private Async Function frmImportMain_KeyDown(sender As Object, e As KeyEventArgs) As Task Handles MyBase.KeyDown If e.KeyCode = Keys.F5 Then Await LoadFiles() End If End Function Private Async Sub btnReloadFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnReloadFile.ItemClick Dim oCurrentMandator As Mandator = TryCast(lookupMandator.EditValue, Mandator) If oCurrentMandator Is Nothing Then MsgBox(My.Resources.frmImportMainExtra.Bitte_wählen_Sie_einen_Mandanten_aus__bevor_Sie_fortfahren, MsgBoxStyle.Exclamation, Text) Exit Sub End If Dim oMessage = String.Format(My.Resources.frmImportMainExtra.Wollen_Sie_wirklich_die_aktuelle_Datei_neu_laden, oCurrentMandator) Dim oResult As DialogResult = MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) Try BeginLoadingUI() If oResult = DialogResult.Yes Then Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) Dim oNewDocument = Await DocumentLoader.LoadFile(oDocument.File, CurrentTemplate, lookupMandator.EditValue) Dim oIndex = DocumentLoader.Files.IndexOf(oDocument) DocumentLoader.Files.Item(oIndex) = oNewDocument LoadDocument(oNewDocument) End If Catch ex As NoMandatorException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Neuladen_des_Dokuments, My.Resources.frmImportMainExtra.Es_konnte_kein_passender_Mandant_ermittelt_werden) Catch ex As MissingAttributeException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Neuladen_des_Dokuments, "Ein benötigtes Attribut wurde nicht gefunden.") Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Neuladen_des_Dokuments) Finally EndLoadingUI() End Try End Sub Private Sub GridViewFiles_FocusedRowChanged(sender As Object, e As Views.Base.FocusedRowChangedEventArgs) Handles GridViewFiles.FocusedRowChanged Try SplitContainerMain.Panel2.Enabled = True Dim oDocument As Document = GridViewFiles.GetRow(e.FocusedRowHandle) If oDocument Is Nothing Then Exit Sub End If If oDocument.Mandator Is Nothing Then lookupMandator.EditValue = Nothing SplitContainerMain.Panel2.Enabled = False For Each oGrid In Grids oGrid.DataSource = Nothing Next MsgBox("Für die aktuelle Datei konnte kein Mandant zugeordnet werden! Bitte wählen Sie einen aus und laden Sie dann die Datei erneut.", MsgBoxStyle.Exclamation, Text) Exit Sub End If lookupMandator.EditValue = oDocument.Mandator LoadDocument(oDocument) Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Laden_des_Dokuments) End Try End Sub Private Sub WebService_Progress(sender As Object, e As String) SplashScreenManager.SetWaitFormDescription(e) End Sub Private Sub btnOpenInputDirectory_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnOpenInputDirectory.ItemClick FormHelper.TryOpenDirectory(CurrentTemplate.InputDirectory, My.Resources.frmImportMainExtra.Eingangsverzeichnis) End Sub Private Sub btnOpenOutputDirectory_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnOpenOutputDirectory.ItemClick FormHelper.TryOpenDirectory(CurrentTemplate.OutputDirectory, My.Resources.frmImportMainExtra.Ausgabeverzeichnis) End Sub Private Sub btnOpenSchemaDirectory_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnOpenSchemaDirectory.ItemClick FormHelper.TryOpenDirectory(My.GeneralConfiguration.TemplateDirectory, My.Resources.frmImportMainExtra.Vorlagenverzeichnis) End Sub Private Sub btnShowXml_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnShowXml.ItemClick Dim oForm As New frmXmlEditor With {.FileName = CurrentDocument.FullName} oForm.Show() End Sub Private Sub txtCurrentFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles txtCurrentFile.ItemClick If CurrentDocument IsNot Nothing Then TryOpenFile(CurrentDocument.FullName, My.Resources.frmImportMainExtra.Aktuelle_Datei) End If End Sub Private Sub btnRemoveRow_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnRemoveRow.ItemClick If CurrentGrid Is Nothing Then Exit Sub End If Dim oMessage As String = My.Resources.frmImportMainExtra.Wollen_Sie_die_ausgewählte_Zeile_wirklich_löschen_ If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then ' Get GUID of currently selected row Dim oView As GridView = CurrentGrid.FocusedView Dim oRow As DataRowView = oView.GetRow(oView.FocusedRowHandle) Dim oGuid = oRow.Row.Item(COLUMN_GUID) ' Get currently selected document Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) Dim oNewRows = oDocument.Rows. Where(Function(r) r.Id.ToString <> oGuid). ToList() oDocument.Rows = oNewRows Dim oIndex = DocumentLoader.Files.IndexOf(oDocument) DocumentLoader.Files.Item(oIndex) = oDocument lookupMandator.EditValue = oDocument.Mandator LoadDocument(oDocument) End If End Sub Private Sub btnOpenReport_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnOpenReport.ItemClick Try SplashScreenManager.ShowWaitForm() SplashScreenManager.SetWaitFormDescription(My.Resources.frmImportMainExtra.Erstellen_der_Berichtsvorschau) SetDocumentButtonsEnabled(False) GridControlFiles.Enabled = False btnLoadFiles.Enabled = False SplitContainerGrids.Enabled = False Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) Dim oReportGenerator = New ReportGenerator(Of OrderReport)(LogConfig, Database, My.TemplateConfiguration, My.GeneralConfiguration) Dim oReport As OrderReport = oReportGenerator.GenerateReport(oDocument, CurrentTemplate) Dim oPrintTool As New ReportPrintTool(oReport) oPrintTool.Report.CreateDocument(False) oPrintTool.ShowPreview() SplitContainerGrids.Enabled = True btnLoadFiles.Enabled = True GridControlFiles.Enabled = True SetDocumentButtonsEnabled(True) SplashScreenManager.CloseWaitForm() Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Erstellen_der_Berichtsvorschau) End Try End Sub Private Sub GridViewFiles_CustomDrawCell(sender As Object, e As Views.Base.RowCellCustomDrawEventArgs) Handles GridViewFiles.CustomDrawCell Dim oDocument As Document = GridViewFiles.GetRow(e.RowHandle) If oDocument.HasErrors Then e.Appearance.Options.UseBackColor = True e.Appearance.BackColor = Color.LightCoral End If If oDocument.Imported Then e.Appearance.Options.UseBackColor = True e.Appearance.BackColor = Color.LightGreen End If End Sub Private Sub GridView_CustomDrawCell(sender As Object, e As Views.Base.RowCellCustomDrawEventArgs) Dim oView As GridView = sender If e.RowHandle < 0 Or CurrentDocument Is Nothing Then Exit Sub End If Dim oObject As DataRowView = oView.GetRow(e.RowHandle) Dim oGuid = oObject.Row.Item(COLUMN_GUID) Dim oRow As DocumentRow = CurrentDocument.Rows. Where(Function(r) r.Id.ToString = oGuid). SingleOrDefault() If oRow Is Nothing Then Exit Sub End If If oRow.HasErrors Then Dim oColumName = e.Column.FieldName Dim oErrorField = oRow.Fields.Where(Function(field) field.Value.HasError).FirstOrDefault() If Not IsNothing(oErrorField) AndAlso oColumName = oErrorField.Key Then e.Appearance.Options.UseBackColor = True e.Appearance.BackColor = Color.LightCoral End If End If End Sub Private Async Sub btnTestTransferFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnTestTransferFile.ItemClick Try BeginLoadingUI() ' Get the document Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) ' Check for errors and abort If oDocument.HasErrors = True Then FormHelper.ShowWarning("Diese Datei kann noch nicht übertragen werden, da sie noch Fehler oder fehlende Werte enthält.") Exit Sub End If Dim oResult = Await TransferFile(oDocument, pIsTest:=True) If oResult = True Then MsgBox(My.Resources.frmImportMainExtra.Datei_erfolgreich_in_die_WinLine_übertragen, MsgBoxStyle.Information, Text) End If Catch ex As HttpRequestException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine, My.Resources.frmImportMainExtra.Die_Verbindung_zum_WinLine_Server_ist_fehlgeschlagen) Catch ex As TaskCanceledException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine, My.Resources.frmImportMainExtra.Die_Verbindung_zum_WinLine_Server_ist_fehlgeschlagen) Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine) Finally EndLoadingUI() End Try End Sub Private Async Sub btnTransferFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnTransferFile.ItemClick Try BeginLoadingUI() ' Get the document Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) ' Check for errors and abort If oDocument.HasErrors = True Then FormHelper.ShowWarning("Diese Datei kann noch nicht übertragen werden, da sie noch Fehler oder fehlende Werte enthält.") Exit Sub End If Dim oResult = Await TransferFile(oDocument, pIsTest:=False) If oResult = True Then MsgBox(My.Resources.frmImportMainExtra.Datei_erfolgreich_in_die_WinLine_übertragen, MsgBoxStyle.Information, Text) End If Catch ex As HttpRequestException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine, My.Resources.frmImportMainExtra.Die_Verbindung_zum_WinLine_Server_ist_fehlgeschlagen) Catch ex As TaskCanceledException FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine, My.Resources.frmImportMainExtra.Die_Verbindung_zum_WinLine_Server_ist_fehlgeschlagen) Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine) Finally EndLoadingUI() End Try End Sub Private Async Sub btnTransferAllFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnTransferAllFiles.ItemClick Try BeginLoadingUI() ' Get the documents Dim oSelectedRows = GridViewFiles.GetSelectedRows() If oSelectedRows.Length = 0 Then Exit Sub End If Dim oDocuments As List(Of Document) = oSelectedRows. Select(Of Document)(Function(rowHandle) GridViewFiles.GetRow(rowHandle)). ToList() Dim oFailedDocuments As New List(Of String) Dim oSuccessfulDocuments As Integer = 0 For Each oDocument As Document In oDocuments Try Await TransferFile(oDocument) Catch ex As Exception Logger.Error(ex) oFailedDocuments.Add(ex.Message) End Try Next oSuccessfulDocuments = oDocuments.Count - oFailedDocuments.Count If oSuccessfulDocuments > 0 Then Dim oMessage = String.Format(My.Resources.frmImportMainExtra._0__Dateien_erfolgreich_in_die_Winline_übertragen_, oSuccessfulDocuments) MsgBox(oMessage, MsgBoxStyle.Information, Text) End If If oFailedDocuments.Count > 0 Then Dim oErrorMessages = String.Join(vbNewLine, oFailedDocuments) Dim oMessage = String.Format("Für {0} Dateien ist die Übertragung in die Winline fehlgeschlagen. Folgende Fehler sind aufgetreten: {2}{1}", oFailedDocuments.Count, oErrorMessages, vbNewLine) MsgBox(oMessage, MsgBoxStyle.Exclamation, Text) End If Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Übertragung_zur_WinLine) Finally EndLoadingUI() End Try End Sub Private Sub btnDebugExportReport_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDebugExportReport.ItemClick ' Get the document Dim oDocument As Document = GridViewFiles.GetRow(GridViewFiles.FocusedRowHandle) ' Generate the report Dim oReport = ReportGenerator.GenerateReport(oDocument, CurrentTemplate) Dim oFilePath = ReportGenerator.GetReportFilePath(oDocument, CurrentTemplate) ' Export it to pdf oReport.ExportToPdf(oFilePath) End Sub #Region "Methods" Private Sub LoadDocument(pDocument As Document) Try Dim oDatasources As New Dictionary(Of String, DataTable) ' Reset datasource so that all data will be refreshed For Each oGrid In Grids oGrid.DataSource = Nothing Next ' Create initial Datatable for each Root Element For Each oTable In CurrentTemplate.Tables Dim oDataTable As New DataTable() ' This is makes it possible to fetch the DocumentRow later oDataTable.Columns.Add(New DataColumn(COLUMN_GUID)) For Each oColumn In oTable.Columns oDataTable.Columns.Add(New DataColumn(oColumn.Name)) Next oDatasources.Add(oTable.Name, oDataTable) Next ' List of Root Elements in XML For Each oRow In pDocument.Rows ' Grab grid for the current DocumentRow Dim oGrid As GridControl = Grids. Where(Function(g) g.Name = oRow.TableName). SingleOrDefault() ' Grab table for the current DocumentRow and create new row Dim oDataTable As DataTable = oDatasources.Item(oRow.TableName) Dim oDataRow = oDataTable.NewRow() ' Assign the Guid of the DocumentRow oDataRow.Item(COLUMN_GUID) = oRow.Id.ToString ' Set values for the current row For Each oField In oRow.Fields If oDataTable.Columns.Contains(oField.Key) Then oDataRow.Item(oField.Key) = oField.Value Else Logger.Warn("Element [{0}] from files does not exist in Schema. Skipping.", oField.Key) End If Next ' Add row to the current table oDataTable.Rows.Add(oDataRow) oDataTable.AcceptChanges() ' Finally load data into grid oGrid.DataSource = oDataTable Next txtCurrentFile.Caption = String.Format(My.Resources.frmImportMainExtra.Aktuelle_Datei___0_, pDocument.FileName) CurrentDocument = pDocument SetDocumentButtonsEnabled(True) If CurrentDocument.HasErrors = True Then btnCalculatePrices.Enabled = False Else btnCalculatePrices.Enabled = True End If Catch ex As Exception SetDocumentButtonsEnabled(False) Logger.Error(ex) Throw ex End Try End Sub Private Sub ReloadRow(pRow As DocumentRow) Dim oModifiedRow = pRow Dim oIndex = CurrentDocument.Rows.IndexOf(oModifiedRow) CurrentDocument.Rows.Item(oIndex) = oModifiedRow LoadDocument(CurrentDocument) ' Refresh Files to update Row color GridViewFiles.RefreshData() End Sub Private Async Function LoadFiles() As Task Try BeginLoadingUI() AddHandler DocumentLoader.FileLoadComplete, Sub(_sender As Object, _e As Documents.DocumentLoader.FileLoadInfo) Dim oMessage = String.Format("Lade Dateien ({0}/{1})", _e.FilesLoaded, _e.FilesTotal) SplashScreenManager.SetWaitFormDescription(oMessage) End Sub If Await DocumentLoader.LoadFiles(CurrentTemplate, lookupMandator.EditValue) Then GridControlFiles.DataSource = Nothing GridControlFiles.DataSource = DocumentLoader.Files txtFilesLoaded.Caption = String.Format(My.Resources.frmImportMainExtra._0__Dateien_geladen, DocumentLoader.Files.Count) End If Catch ex As NoMandatorException MsgBox(My.Resources.frmImportMainExtra.Es_konnte_kein_passender_Mandant_ermittelt_werden, MsgBoxStyle.Information, Text) Catch ex As Exception FormHelper.ShowError(ex, My.Resources.frmImportMainExtra.Laden_der_Dokumente) Finally EndLoadingUI() End Try End Function Private Async Function TransferFile(pDocument As Document, Optional pIsTest As Boolean = False) As Task(Of Boolean) ' Check for errors and abort If pDocument.HasErrors = True Then FormHelper.ShowWarning("Diese Datei kann noch nicht übertragen werden, da sie noch Fehler oder fehlende Werte enthält.") Return False End If Dim oResult = Await WebService.TransferDocumentToWinline(pDocument, CurrentTemplate, lookupMandator.EditValue, pIsTest) If oResult = True Then ' If this was only a test, we are done. If pIsTest = True Then Return True End If WebService.RaiseWebServiceProgress("Bericht erzeugen") ' Generate the report Dim oReport = ReportGenerator.GenerateReport(pDocument, CurrentTemplate) Dim oFilePath = ReportGenerator.GetReportFilePath(pDocument, CurrentTemplate) WebService.RaiseWebServiceProgress("Bericht exportieren") ' Export it to pdf oReport.ExportToPdf(oFilePath) WebService.RaiseWebServiceProgress("Datei archivieren") ' Mark Document as Imported, will be moved on Form Close pDocument.Imported = True Return True Else Return False End If End Function Private Function CreateGridsAndColumns(pTemplate As Templates.Template) As List(Of GridControl) Dim oGrids As New List(Of GridControl) Dim oTableCounter = 0 For Each oTable In pTemplate.Tables If oTableCounter = 0 Then Dim oGrid = GridLoader.GetGridFromElement(GridControl1, oTable) AddHandler oGrid.DoubleClick, AddressOf Grid_MouseDoubleClick AddHandler GridView1.CustomDrawCell, AddressOf GridView_CustomDrawCell oGrids.Add(oGrid) End If If oTableCounter = 1 Then Dim oGrid = GridLoader.GetGridFromElement(GridControl2, oTable) AddHandler oGrid.DoubleClick, AddressOf Grid_MouseDoubleClick AddHandler GridView2.CustomDrawCell, AddressOf GridView_CustomDrawCell oGrids.Add(oGrid) End If If oTableCounter = 2 Then Dim oGrid = GridLoader.GetGridFromElement(GridControl3, oTable) AddHandler oGrid.DoubleClick, AddressOf Grid_MouseDoubleClick AddHandler GridView3.CustomDrawCell, AddressOf GridView_CustomDrawCell oGrids.Add(oGrid) End If If oTableCounter = 3 Then Dim oGrid = GridLoader.GetGridFromElement(GridControl4, oTable) AddHandler oGrid.DoubleClick, AddressOf Grid_MouseDoubleClick AddHandler GridView4.CustomDrawCell, AddressOf GridView_CustomDrawCell oGrids.Add(oGrid) End If If oTableCounter > 3 Then MsgBox(My.Resources.frmImportMainExtra.Zur_Zeit_werden_nur_bis_zu_4_Tabellen_unterstützt_, MsgBoxStyle.Exclamation, Text) End If oTableCounter += 1 Next If oTableCounter < 3 Then SplitContainerGrids.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1 End If Return oGrids End Function Private Sub TryOpenDirectory(pPath As String, pDisplayName As String) If Directory.Exists(pPath) Then Process.Start(pPath) Else Dim oMessage = String.Format(My.Resources.frmImportMainExtra._0__nicht_konfiguriert_oder_nicht_gefunden, pDisplayName) MsgBox(oMessage, MsgBoxStyle.Exclamation, Text) End If End Sub Private Sub TryOpenFile(pPath As String, pDisplayName As String) If IO.File.Exists(pPath) Then Process.Start(pPath) Else Dim oMessage = String.Format(My.Resources.frmImportMainExtra._0__nicht_konfiguriert_oder_nicht_gefunden, pDisplayName) MsgBox(oMessage, MsgBoxStyle.Exclamation, Text) End If End Sub Private Sub BeginLoadingUI() SplashScreenManager.ShowWaitForm() SetDocumentButtonsEnabled(False) GridControlFiles.Enabled = False SplitContainerGrids.Enabled = False RibbonPageGroupLoad.Enabled = False RibbonPageGroupEdit.Enabled = False RibbonPageGroupReport.Enabled = False RibbonPageGroupTransfer.Enabled = False End Sub Private Sub EndLoadingUI() RibbonPageGroupLoad.Enabled = True RibbonPageGroupEdit.Enabled = True RibbonPageGroupReport.Enabled = True RibbonPageGroupTransfer.Enabled = True SplitContainerGrids.Enabled = True GridControlFiles.Enabled = True SetDocumentButtonsEnabled(True) SplashScreenManager.CloseWaitForm() End Sub Private Sub SetDocumentButtonsEnabled(pEnabled As Boolean) btnShowXml.Enabled = pEnabled btnReloadFile.Enabled = pEnabled btnTransferFile.Enabled = pEnabled btnRemoveRow.Enabled = pEnabled btnOpenReport.Enabled = pEnabled btnTransferAllFiles.Enabled = pEnabled btnEditRow.Enabled = pEnabled End Sub Private Async Sub btnCalculatePrices_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnCalculatePrices.ItemClick Dim oCurrentMandator As Mandator = TryCast(lookupMandator.EditValue, Mandator) If oCurrentMandator Is Nothing Then MsgBox(My.Resources.frmImportMainExtra.Bitte_wählen_Sie_einen_Mandanten_aus__bevor_Sie_fortfahren, MsgBoxStyle.Exclamation, Text) Exit Sub End If BeginLoadingUI() SplashScreenManager.SetWaitFormDescription("Lade Preisinformationen..") Dim oStopWatch As New Stopwatch() Try oStopWatch.Start() Dim oNewDocument = Await DocumentLoader.MaybeApplyPriceFunctions(CurrentDocument, oCurrentMandator, CurrentTemplate) oStopWatch.Stop() DocumentLoader.ReplaceDocument(oNewDocument) LoadDocument(oNewDocument) Catch ex As Exception FormHelper.ShowError(ex, "Laden der Preisinformationen") Finally EndLoadingUI() Logger.Debug("Loading Priceinfo took [{0}] ms", oStopWatch.ElapsedMilliseconds) End Try End Sub Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick FormHelper.TryOpenDirectory(LogConfig.LogDirectory, My.Resources.frmImportMainExtra.Logverzeichnis) End Sub #End Region End Class