MultiTool/EDIDocumentImport/frmRowEditor.vb
Jonathan Jenne 3fac097f46 WIP
2021-10-27 16:38:19 +02:00

168 lines
6.3 KiB
VB.net

Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraVerticalGrid.Rows
Imports ImporterShared.Documents
Imports ImporterShared.DocumentRow
Imports DevExpress.XtraEditors.Repository
Imports ImporterShared.Winline
Imports DigitalData.Modules.Language
Imports DevExpress.XtraEditors.Controls
Imports System.Globalization
Public Class frmRowEditor
Private ReadOnly _Columns As List(Of String)
Private ReadOnly _DataTable As New DataTable
Private ReadOnly _Accounts As List(Of Account)
Private ReadOnly _DocumentRow As ImporterShared.DocumentRow
Private ReadOnly DatePicker As New RepositoryItemDateEdit()
Private ReadOnly MultilineEditor As New RepositoryItemMemoEdit()
Private ReadOnly AccountPicker As New RepositoryItemSearchLookUpEdit
Private Const COL_KEY = "KEY"
Private Const COL_VALUE_ORIGINAL = "VALUE_ORIGINAL"
Private Const COL_VALUE_EXTERNAL = "VALUE_EXTERNAL"
Private Const COL_VALUE_FINAL = "VALUE_FINAL"
Public ReadOnly Property DocumentRow As ImporterShared.DocumentRow
Get
Return _DocumentRow
End Get
End Property
Public Sub New(pColumns As List(Of String), pDocumentRow As ImporterShared.DocumentRow, pAccounts As List(Of Account))
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
_Columns = pColumns
_Accounts = pAccounts
_DocumentRow = pDocumentRow
AccountPicker.DataSource = _Accounts
AccountPicker.DisplayMember = "Name"
AccountPicker.ValueMember = "Id"
'DatePicker.DisplayFormat.FormatString = "yyyy-MM-dd"
DatePicker.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime
'DatePicker.EditFormat.FormatString = "yyyy-MM-dd"
DatePicker.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime
'DatePicker.Mask.UseMaskAsDisplayFormat = True
'DatePicker.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.DateTime
' DatePicker.Mask.EditMask = "yyyy-MM-dd"
'AddHandler DatePicker.ParseEditValue, AddressOf DatePicker_ParseEditValue
End Sub
Private Sub DatePicker_ParseEditValue(sender As Object, e As ConvertEditValueEventArgs)
If TypeOf e.Value Is String Then
Try
Dim oDateTime = Date.ParseExact(e.Value.ToString, "yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture)
e.Value = oDateTime
e.Handled = True
Catch ex As Exception
End Try
End If
End Sub
Private Sub frmRowEditor_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim oDict = New Dictionary(Of String, FieldValue)
For Each oColumn As String In _Columns
Dim oField = _DocumentRow.Fields.
Where(Function(f) f.Key = oColumn).
SingleOrDefault()
If oField.Value Is Nothing Then
oDict.Add(oColumn, New FieldValue())
Else
oDict.Add(oColumn, oField.Value)
End If
Next
_DataTable.Columns.Clear()
_DataTable.Columns.Add(COL_KEY)
_DataTable.Columns.Add(COL_VALUE_ORIGINAL)
_DataTable.Columns.Add(COL_VALUE_EXTERNAL)
_DataTable.Columns.Add(COL_VALUE_FINAL)
For Each oKV In oDict
_DataTable.Rows.Add(oKV.Key, oKV.Value.Original, oKV.Value.External, oKV.Value.Final)
Next
GridControl1.DataSource = _DataTable
End Sub
Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
GridView1.CloseEditor()
For Each oRow As DataRow In _DataTable.Rows
Dim oField = _DocumentRow.Fields.
Where(Function(f) f.Key = oRow.Item(COL_KEY)).
SingleOrDefault()
If oField.Key Is Nothing Then
oField = New KeyValuePair(Of String, FieldValue)(oRow.Item(COL_KEY), New FieldValue())
End If
Dim oFieldValue As FieldValue = oField.Value
Dim oGridValue = Utils.NotNull(oRow.Item(COL_VALUE_FINAL), String.Empty)
If Not oFieldValue.Final.Equals(oGridValue) Then
oFieldValue.Final = Utils.NotNull(oRow.Item(COL_VALUE_FINAL), String.Empty)
If _DocumentRow.Fields.ContainsKey(oField.Key) Then
_DocumentRow.Fields.Item(oField.Key) = oFieldValue
Else
_DocumentRow.Fields.Add(oField.Key, oFieldValue)
End If
End If
Next
DialogResult = DialogResult.OK
Close()
End Sub
Private Sub btnApplyFromWinline_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnApplyFromWinline.ItemClick
Dim oSelectedRow As DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle)
If oSelectedRow Is Nothing Then
Exit Sub
End If
oSelectedRow.Item(COL_VALUE_FINAL) = oSelectedRow.Item(COL_VALUE_EXTERNAL)
oSelectedRow.AcceptChanges()
End Sub
Private Sub btnApplyFromOriginal_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnApplyFromOriginal.ItemClick
Dim oSelectedRow As DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle)
If oSelectedRow Is Nothing Then
Exit Sub
End If
oSelectedRow.Item(COL_VALUE_FINAL) = oSelectedRow.Item(COL_VALUE_ORIGINAL)
oSelectedRow.AcceptChanges()
End Sub
Private Sub GridView1_CustomRowCellEdit(sender As Object, e As CustomRowCellEditEventArgs) Handles GridView1.CustomRowCellEdit
Dim oDataRow As DataRow = GridView1.GetDataRow(e.RowHandle)
If e.Column.FieldName = COL_VALUE_ORIGINAL Or e.Column.FieldName = COL_VALUE_FINAL Then
If oDataRow.Item(COL_KEY) = "Datum_Auftrag-Bestellung" Then
e.RepositoryItem = DatePicker
ElseIf e.CellValue.ToString.Length > 100 Then
e.RepositoryItem = MultilineEditor
ElseIf oDataRow.Item(COL_KEY) = "Fakt_Kontonummer" Or oDataRow.Item(COL_KEY) = "Lief_Kontonummer" Then
e.RepositoryItem = AccountPicker
End If
End If
End Sub
End Class