Imports DevExpress.XtraEditors Imports DevExpress.XtraGrid.Views.Grid Imports DigitalData.GUIs.Common Imports DigitalData.Modules.Config Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports MultiTool.Shared Imports MultiTool.Shared.Templates Imports MultiTool.Shared.Exceptions Imports MultiTool.Shared.Winline Imports MultiTool.Shared.Winline.Entities Public Class frmExportMain Private ReadOnly LogConfig As LogConfig Private ReadOnly ConfigManager As ConfigManager(Of Config) Private ReadOnly CurrentTemplate As Template = Nothing Private Logger As Logger Private FormHelper As FormHelper Private Database As MSSQLServer Private WebService As WebServiceData Private Winline As WinlineData Private GridBuilder As GridBuilder Private FileEx As DigitalData.Modules.Filesystem.File Public Sub New(pLogConfig As LogConfig, pConfigManager As ConfigManager(Of Config), pTemplate As Template) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. LogConfig = pLogConfig ConfigManager = pConfigManager CurrentTemplate = pTemplate End Sub Private Sub frmExportMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try Text = String.Format(My.Resources.frmShared._0____WebService_Multitool_für_WinLine, CurrentTemplate.Name) Logger = LogConfig.GetLogger() FormHelper = New FormHelper(LogConfig, Me) ' Initialize Database Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString) Database = New MSSQLServer(LogConfig, oConnectionString) Dim oViews As New List(Of GridView) From { GridViewDocuments, lookupMandator.Properties.View, lookupAccount.Properties.View, lookupDocumentKind.Properties.View } GridBuilder = New GridBuilder(oViews) GridBuilder. WithDefaults(). WithReadOnlyOptions(). WithClipboardHandler() Winline = My.Winline FileEx = New DigitalData.Modules.Filesystem.File(LogConfig) WebService = New WebServiceData(LogConfig, 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 End Sub Private Sub frmExportMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown Try lookupMandator.Properties.DataSource = Winline.Mandators lookupMandator.ForceInitialize() lookupMandator.Properties.View.BestFitColumns() lookupAccount.Properties.DataSource = Winline.Accounts lookupAccount.ForceInitialize() lookupAccount.Properties.View.BestFitColumns() lookupDocumentKind.Properties.DataSource = Winline.DocumentKinds lookupDocumentKind.ForceInitialize() lookupDocumentKind.Properties.View.BestFitColumns() If ConfigManager.Config.LastUsedMandator <> "" Then lookupMandator.EditValue = Winline.Mandators. Where(Function(mandator) mandator.Id = ConfigManager.Config.LastUsedMandator). FirstOrDefault() End If Catch ex As Exception FormHelper.ShowError(ex, "Initialisierung der Form") End Try End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick SearchDocuments() End Sub Private Sub WebService_Progress(sender As Object, e As String) SplashScreenManager.SetWaitFormDescription(e) End Sub Private Sub lookupMandator_EditValueChanged(sender As Object, e As EventArgs) Handles lookupMandator.EditValueChanged Dim oMandator As Mandator = lookupMandator.EditValue lookupAccount.Properties.DataSource = Winline.Accounts.Where(Function(acc) acc.Mandator.Equals(oMandator)) lookupDocumentKind.Properties.DataSource = Winline.DocumentKinds.Where(Function(kind) kind.Mandator.Equals(oMandator)) ConfigManager.Config.LastUsedMandator = oMandator.Id ConfigManager.Save() End Sub Private Sub lookup_Properties_ButtonClick(sender As Object, e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) _ Handles lookupDocumentKind.Properties.ButtonClick, lookupAccount.Properties.ButtonClick Dim oLookup As GridLookUpEdit = sender If e.Button.Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Clear Then oLookup.EditValue = Nothing End If End Sub Private Sub SearchDocuments() Try Dim oMandator = lookupMandator.EditValue Dim oAccount = lookupAccount.EditValue Dim oKind = lookupDocumentKind.EditValue Dim oDateRanges = dateDocDate.SelectedRanges Dim oShowExported = chkShowExported.Checked If oMandator Is Nothing Then FormHelper.ShowWarning("Bitte einen Mandanten auswählen!") Exit Sub End If If oDateRanges.Count > 1 Then FormHelper.ShowWarning("Bitte nur einen Datumsbereich auswählen!") Exit Sub End If Dim oStartDate As Date = Nothing Dim oEndDate As Date = Nothing If oDateRanges.Count > 0 Then Dim oRange = oDateRanges.First() oStartDate = oRange.StartDate oEndDate = oRange.EndDate End If 'TODO: Make Document Type configurable Dim oDocuments = Winline.GetDocuments(oMandator, CurrentTemplate, WinlineData.DocumentType.Order, New WinlineData.GetDocumentArgs With { .Account = oAccount, .Kind = oKind, .DateFrom = oStartDate, .DateTo = oEndDate, .ShowExported = oShowExported }) GridControlDocuments.DataSource = oDocuments txtResults.Caption = String.Format("{0} Ergebnisse", oDocuments.Count) Catch ex As Exception FormHelper.ShowError(ex, "Laden der Daten") End Try End Sub Private Async Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick Try SplashScreenManager.ShowWaitForm() Dim oExportResult = False Dim oRowHandles = GridViewDocuments.GetSelectedRows() Dim oExportCount = 0 For Each oRowHandle In oRowHandles oExportCount += 1 Dim oDocument As Document = GridViewDocuments.GetRow(oRowHandle) Dim oMandator As Mandator = lookupMandator.EditValue Dim oMessage = String.Format("Beleg {0} exportieren.. ({1}/{2})", oDocument.Number, oExportCount, oRowHandles.Length) SplashScreenManager.SetWaitFormDescription(oMessage) Await WebService.ExportDocumentFromWinline(oDocument, CurrentTemplate, oMandator) Dim oFinalSqlResult = Await Winline.ExecuteFinalSQL(oDocument, CurrentTemplate, oMandator) If oFinalSqlResult = False Then Throw New DatabaseException("FinalSQL was not executed successfully!") End If oDocument.IsExported = True Next MsgBox($"{oExportCount} Dateien wurden erfolgreich exportiert!", MsgBoxStyle.Information, Text) Catch ex As MissingAttributeException FormHelper.ShowError(ex, "Exportieren der Daten") Catch ex As Exception FormHelper.ShowError(ex, "Exportieren der Daten") Finally SplashScreenManager.CloseWaitForm() End Try 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 BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick FormHelper.TryOpenDirectory(My.GeneralConfiguration.TemplateDirectory, My.Resources.frmImportMainExtra.Vorlagenverzeichnis) End Sub End Class