diff --git a/EDIDocumentImport/CREATE_DATABASE.sql b/EDIDocumentImport/CREATE_DATABASE.sql new file mode 100644 index 0000000..c4cfc99 --- /dev/null +++ b/EDIDocumentImport/CREATE_DATABASE.sql @@ -0,0 +1,156 @@ +USE [DD_ECM] +GO + +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +/* TBEDI_XML_TEMPLATES */ + +DROP TABLE [dbo].[TBEDI_XML_TEMPLATES] + +CREATE TABLE [dbo].[TBEDI_XML_TEMPLATES]( + [GUID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [NAME] [nvarchar](20) NOT NULL, + [DESCRIPTION] [nvarchar](max) NULL +) ON [PRIMARY] +GO + +INSERT INTO [dbo].[TBEDI_XML_TEMPLATES] (NAME, DESCRIPTION) VALUES ('EXIM-VRG_orders', 'Schaum EDI Aufträge') + +/* TBEDI_XML_TYPES */ + +DROP TABLE [dbo].[TBEDI_XML_TYPES] + +CREATE TABLE [dbo].[TBEDI_XML_TYPES]( + [GUID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [NAME] [nvarchar](20) NOT NULL +) ON [PRIMARY] +GO + +INSERT INTO [dbo].[TBEDI_XML_TYPES] (NAME) VALUES ('STRING') +INSERT INTO [dbo].[TBEDI_XML_TYPES] (NAME) VALUES ('INTEGER') +INSERT INTO [dbo].[TBEDI_XML_TYPES] (NAME) VALUES ('DATE') +INSERT INTO [dbo].[TBEDI_XML_TYPES] (NAME) VALUES ('BOOLEAN') +INSERT INTO [dbo].[TBEDI_XML_TYPES] (NAME) VALUES ('DECIMAL') + +/* TBEDI_XML_NODES */ + +DROP TABLE [dbo].[TBEDI_XML_FUNCTIONS] + +CREATE TABLE [dbo].[TBEDI_XML_FUNCTIONS]( + [GUID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [NAME] [nvarchar](max) NOT NULL, + [DESCRIPTION] [nvarchar](max) NOT NULL, + [PARAMETERS] [nvarchar](max) NULL, +) ON [PRIMARY] +GO + +INSERT INTO [dbo].[TBEDI_XML_FUNCTIONS] (NAME, DESCRIPTION) VALUES ('GLN', 'Finds an WinLine Account Number by GLN') +INSERT INTO [dbo].[TBEDI_XML_FUNCTIONS] (NAME, DESCRIPTION) VALUES ('EAN', 'Finds an WinLine Article Number by EAN') + +/* TBEDI_XML_NODES */ + +DROP TABLE [dbo].[TBEDI_XML_NODES] + +CREATE TABLE [dbo].[TBEDI_XML_NODES]( + [GUID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [NAME] [nvarchar](max) NOT NULL, + [TEMPLATE_ID] [int] NOT NULL, + [IS_HEAD] [bit] NOT NULL +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBEDI_XML_NODES] + ADD CONSTRAINT DF_TBEDI_XML_NODES_IS_HEAD + DEFAULT 0 FOR IS_HEAD + +INSERT INTO [dbo].[TBEDI_XML_NODES] (NAME, IS_HEAD, TEMPLATE_ID) VALUES ('EXIM-VRG_ordersT025', 1, 1) +INSERT INTO [dbo].[TBEDI_XML_NODES] (NAME, IS_HEAD, TEMPLATE_ID) VALUES ('EXIM-VRG_ordersT026', 0, 1) + +/* TBEDI_XML_ITEMS */ + +DROP TABLE [dbo].[TBEDI_XML_ITEMS] + +CREATE TABLE [dbo].[TBEDI_XML_ITEMS]( + [GUID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [XML_NAME] [nvarchar](50) NOT NULL, + [XML_NODE_ID] [int] NOT NULL, + [XML_TYPE_ID] [int] NOT NULL, + [READ_ONLY] [bit] NOT NULL, + [FUNCTION_ID] [int] NULL +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBEDI_XML_ITEMS] + ADD CONSTRAINT FK_TBEDI_XML_TYPES FOREIGN KEY (XML_TYPE_ID) + REFERENCES [dbo].[TBEDI_XML_ITEMS] (GUID) + +ALTER TABLE [dbo].[TBEDI_XML_ITEMS] + ADD CONSTRAINT FK_TBEDI_XML_NODES FOREIGN KEY (XML_NODE_ID) + REFERENCES [dbo].[TBEDI_XML_ITEMS] (GUID) + +ALTER TABLE [dbo].[TBEDI_XML_ITEMS] + ADD CONSTRAINT DF_TBEDI_XML_ITEMS_READ_ONLY + DEFAULT 0 FOR READ_ONLY + + +DROP VIEW [dbo].[VWEDI_XML_ITEMS] +GO + +CREATE VIEW [dbo].[VWEDI_XML_ITEMS] +AS + SELECT DISTINCT + [TBITEMS].[XML_NAME] + ,[TBNODES].[NAME] [XML_ROOT] + ,[TBTEMPLATES].[NAME] [TEMPLATE_NAME] + ,[TBTYPES].[NAME] [DATA_TYPE] + ,[TBNODES].[IS_HEAD] [IS_HEAD] + ,[TBFUNCTIONS].[GUID] [FUNCTION_ID] + ,[TBFUNCTIONS].[NAME] [FUNCTION_NAME] + ,[TBFUNCTIONS].[PARAMETERS] [FUNCTION_PARAMETERS] + ,[TBITEMS].[READ_ONLY] + FROM + [dbo].[TBEDI_XML_ITEMS] [TBITEMS] + INNER JOIN [dbo].[TBEDI_XML_NODES] [TBNODES] ON [TBITEMS].[XML_NODE_ID] = [TBNODES].[GUID] + INNER JOIN [dbo].[TBEDI_XML_TYPES] [TBTYPES] ON [TBITEMS].[XML_TYPE_ID] = [TBTYPES].[GUID] + INNER JOIN [dbo].[TBEDI_XML_TEMPLATES] [TBTEMPLATES] ON [TBNODES].[TEMPLATE_ID] = [TBTEMPLATES].[GUID] + LEFT OUTER JOIN [dbo].[TBEDI_XML_FUNCTIONS] [TBFUNCTIONS] ON [TBITEMS].[FUNCTION_ID] = [TBFUNCTIONS].[GUID] + +GO + + +/* Kopfdaten */ + +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('BELEGKEY', 1, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Fakt_Kontonummer', 1, 1, 1, 1) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Laufnummer', 1, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Bestellt_von', 1, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Lief_Kontonummer', 1, 1, 1, 1) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Belegart', 1, 2, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Datum_Auftrag-Bestellung', 1, 3, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Auftrags-Bestellnummer', 1, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Leistungsdatum', 1, 3, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Infotext', 1, 1, 1, NULL) + +/* Positionsdaten */ + +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('BELEGKEY', 2, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Zeilennummer', 2, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Datentyp', 2, 2, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Artikelnummer', 2, 1, 1, 2) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Bezeichnung', 2, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Lieferantenartikelnummer', 2, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Menge_bestellt', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Menge_geliefert', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Colli', 2, 1, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Einzelpreis', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Zeilenrabatt1', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Zeilenrabatt2', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Zeilenrabatt3', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Zeilenrabatt4', 2, 5, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('Umsatzsteuerprozent_Zeile', 2, 2, 1, NULL) +INSERT [dbo].[TBEDI_XML_ITEMS] (XML_NAME, XML_NODE_ID, XML_TYPE_ID, READ_ONLY, FUNCTION_ID) VALUES ('EDI_Infotext', 2, 1, 1, NULL) + diff --git a/EDIDocumentImport/ImporterForm.vbproj b/EDIDocumentImport/ImporterForm.vbproj index aa1db3f..d526d0c 100644 --- a/EDIDocumentImport/ImporterForm.vbproj +++ b/EDIDocumentImport/ImporterForm.vbproj @@ -259,7 +259,11 @@ + + + + diff --git a/EDIDocumentImport/My Project/Resources.Designer.vb b/EDIDocumentImport/My Project/Resources.Designer.vb index 9bf3520..8074d1a 100644 --- a/EDIDocumentImport/My Project/Resources.Designer.vb +++ b/EDIDocumentImport/My Project/Resources.Designer.vb @@ -60,6 +60,16 @@ Namespace My.Resources End Set End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ DevExpress.Utils.Svg.SvgImage. + ''' + Friend ReadOnly Property actions_arrow4down() As DevExpress.Utils.Svg.SvgImage + Get + Dim obj As Object = ResourceManager.GetObject("actions_arrow4down", resourceCulture) + Return CType(obj,DevExpress.Utils.Svg.SvgImage) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ DevExpress.Utils.Svg.SvgImage. ''' @@ -160,6 +170,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ DevExpress.Utils.Svg.SvgImage. + ''' + Friend ReadOnly Property resetview() As DevExpress.Utils.Svg.SvgImage + Get + Dim obj As Object = ResourceManager.GetObject("resetview", resourceCulture) + Return CType(obj,DevExpress.Utils.Svg.SvgImage) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ DevExpress.Utils.Svg.SvgImage. + ''' + Friend ReadOnly Property save() As DevExpress.Utils.Svg.SvgImage + Get + Dim obj As Object = ResourceManager.GetObject("save", resourceCulture) + Return CType(obj,DevExpress.Utils.Svg.SvgImage) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ DevExpress.Utils.Svg.SvgImage. ''' diff --git a/EDIDocumentImport/My Project/Resources.resx b/EDIDocumentImport/My Project/Resources.resx index 2a3122c..e7c0114 100644 --- a/EDIDocumentImport/My Project/Resources.resx +++ b/EDIDocumentImport/My Project/Resources.resx @@ -133,6 +133,9 @@ ..\Resources\import.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + ..\Resources\save.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + ..\Resources\tableproperties.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a @@ -148,6 +151,12 @@ ..\Resources\wraptext.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + ..\Resources\open21.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + ..\Resources\actions_arrow4down.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + ..\Resources\open2.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a @@ -160,7 +169,7 @@ ..\Resources\showallfieldcodes.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - ..\Resources\open21.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + ..\Resources\resetview.svg;DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/EDIDocumentImport/Resources/actions_arrow4down.svg b/EDIDocumentImport/Resources/actions_arrow4down.svg new file mode 100644 index 0000000..3209063 --- /dev/null +++ b/EDIDocumentImport/Resources/actions_arrow4down.svg @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/EDIDocumentImport/Resources/resetview.svg b/EDIDocumentImport/Resources/resetview.svg new file mode 100644 index 0000000..1b6c0f6 --- /dev/null +++ b/EDIDocumentImport/Resources/resetview.svg @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/EDIDocumentImport/Resources/save.svg b/EDIDocumentImport/Resources/save.svg new file mode 100644 index 0000000..fb4f9a1 --- /dev/null +++ b/EDIDocumentImport/Resources/save.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/EDIDocumentImport/frmImportMain.Designer.vb b/EDIDocumentImport/frmImportMain.Designer.vb index 3a3a29d..0c5a2de 100644 --- a/EDIDocumentImport/frmImportMain.Designer.vb +++ b/EDIDocumentImport/frmImportMain.Designer.vb @@ -20,7 +20,8 @@ Partial Class frmImportMain Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() - Dim UnboundSourceProperty1 As DevExpress.Data.UnboundSourceProperty = New DevExpress.Data.UnboundSourceProperty() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmImportMain)) + Dim UnboundSourceProperty4 As DevExpress.Data.UnboundSourceProperty = New DevExpress.Data.UnboundSourceProperty() Me.RibbonControl = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.txtVersion = New DevExpress.XtraBars.BarStaticItem() Me.txtFilesLoaded = New DevExpress.XtraBars.BarStaticItem() @@ -145,7 +146,7 @@ Partial Class frmImportMain ' 'GridViewFiles ' - Me.GridViewFiles.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn1, Me.GridColumn2, Me.GridColumn3}) + Me.GridViewFiles.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn1, Me.GridColumn2}) Me.GridViewFiles.GridControl = Me.GridControlFiles Me.GridViewFiles.Name = "GridViewFiles" ' @@ -155,7 +156,7 @@ Partial Class frmImportMain Me.GridColumn1.FieldName = "Name" Me.GridColumn1.Name = "GridColumn1" Me.GridColumn1.Visible = True - Me.GridColumn1.VisibleIndex = 0 + Me.GridColumn1.VisibleIndex = 1 ' 'GridColumn2 ' @@ -163,15 +164,18 @@ Partial Class frmImportMain Me.GridColumn2.FieldName = "FullName" Me.GridColumn2.Name = "GridColumn2" Me.GridColumn2.Visible = True - Me.GridColumn2.VisibleIndex = 1 + Me.GridColumn2.VisibleIndex = 2 ' 'GridColumn3 ' - Me.GridColumn3.Caption = "GridColumn3" Me.GridColumn3.FieldName = "Selected" + Me.GridColumn3.ImageOptions.SvgImage = CType(resources.GetObject("GridColumn3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.GridColumn3.ImageOptions.SvgImageSize = New System.Drawing.Size(16, 16) Me.GridColumn3.Name = "GridColumn3" + Me.GridColumn3.UnboundType = DevExpress.Data.UnboundColumnType.[Boolean] Me.GridColumn3.Visible = True - Me.GridColumn3.VisibleIndex = 2 + Me.GridColumn3.VisibleIndex = 0 + Me.GridColumn3.Width = 30 ' 'SplitContainerControl2 ' @@ -213,9 +217,9 @@ Partial Class frmImportMain ' 'UnboundSource1 ' - UnboundSourceProperty1.DisplayName = Nothing - UnboundSourceProperty1.Name = "Property0" - Me.UnboundSource1.Properties.Add(UnboundSourceProperty1) + UnboundSourceProperty4.DisplayName = Nothing + UnboundSourceProperty4.Name = "Property0" + Me.UnboundSource1.Properties.Add(UnboundSourceProperty4) ' 'frmImportMain ' diff --git a/EDIDocumentImport/frmImportMain.resx b/EDIDocumentImport/frmImportMain.resx index 6b625b7..08949af 100644 --- a/EDIDocumentImport/frmImportMain.resx +++ b/EDIDocumentImport/frmImportMain.resx @@ -117,6 +117,25 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHICAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz + OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp + dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkNoZWNrQ2lyY2xlZCI+DQogICAgPHBhdGggZD0iTTE2 + LDRDOS40LDQsNCw5LjQsNCwxNmMwLDYuNiw1LjQsMTIsMTIsMTJzMTItNS40LDEyLTEyQzI4LDkuNCwy + Mi42LDQsMTYsNHogTTE0LDIybC02LTZsMi0ybDQsNGw4LThsMiwyICAgTDE0LDIyeiIgY2xhc3M9Ikdy + ZWVuIiAvPg0KICA8L2c+DQo8L3N2Zz4L + + 17, 17 diff --git a/EDIDocumentImport/frmImportMain.vb b/EDIDocumentImport/frmImportMain.vb index 48ca67b..62c0f5d 100644 --- a/EDIDocumentImport/frmImportMain.vb +++ b/EDIDocumentImport/frmImportMain.vb @@ -27,6 +27,7 @@ Public Class frmImportMain Private Grids As List(Of GridControl) Private CurrentSchema As String + Private CurrentDocument As Document Private Sub frmImportMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load txtVersion.Caption = String.Format(txtVersion.Caption, Application.ProductVersion) @@ -65,6 +66,7 @@ Public Class frmImportMain Winline.LoadMandators() Winline.LoadEconomicYears() Winline.LoadDocumentKinds(Winline.Mandators) + Winline.LoadTemplateConfiguration() For Each oMandator In Winline.Mandators Winline.LoadAccounts(oMandator) Next @@ -135,8 +137,11 @@ Public Class frmImportMain Dim oView As GridView = DirectCast(oGrid.FocusedView, GridView) Dim oRow As DataRow = oView.GetDataRow(oView.FocusedRowHandle) Dim oColumns = oView.Columns.Select(Function(c) c.FieldName).ToList() + Dim oDocumentRow = CurrentDocument.Rows. + Where(Function(r) r.Id.ToString = oRow.Item("GUID")). + SingleOrDefault() - Dim oForm As New frmRowEditor(oRow, oColumns) + Dim oForm As New frmRowEditor(oColumns, oDocumentRow) oForm.Showdialog() End Sub @@ -151,17 +156,22 @@ Public Class frmImportMain Dim oDocument As Document = GridViewFiles.GetRow(e.FocusedRowHandle) Dim oDatasources As New Dictionary(Of String, DataTable) + ' List of Root Elements in XML For Each oRow In oDocument.Rows Dim oGrid As GridControl = Grids. Where(Function(g) g.Name = oRow.Name). SingleOrDefault() + ' Create initial Datatable if none exists for this Root Element If Not oDatasources.ContainsKey(oRow.Name) Then Dim oTable As New DataTable() - For Each ofield In oRow.Fields - oTable.Columns.Add(New DataColumn(ofield.Key)) + oTable.Columns.Add(New DataColumn("GUID")) + + For Each oField In oRow.Fields + oTable.Columns.Add(New DataColumn(oField.Key)) Next + oDatasources.Add(oRow.Name, oTable) oGrid.DataSource = oTable @@ -170,6 +180,8 @@ Public Class frmImportMain Dim oDataTable = oDatasources.Item(oRow.Name) Dim oDataRow = oDataTable.NewRow() + oDataRow.Item("GUID") = oRow.Id.ToString + For Each oField In oRow.Fields oDataRow.Item(oField.Key) = oField.Value Next @@ -177,6 +189,8 @@ Public Class frmImportMain oDataTable.Rows.Add(oDataRow) oDataTable.AcceptChanges() Next + + CurrentDocument = oDocument End Sub Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick @@ -196,9 +210,9 @@ Public Class frmImportMain For Each oRow In oDocument.Rows w.WriteStartElement(oRow.Name) - For Each oField As KeyValuePair(Of String, String) In oRow.Fields + For Each oField As KeyValuePair(Of String, DocumentRow.FieldValue) In oRow.Fields w.WriteStartElement(oField.Key) - w.WriteValue(oField.Value) + w.WriteValue(oField.Value.Final) w.WriteEndElement() ' Field Next diff --git a/EDIDocumentImport/frmRowEditor.Designer.vb b/EDIDocumentImport/frmRowEditor.Designer.vb index 3ee719e..614ee1d 100644 --- a/EDIDocumentImport/frmRowEditor.Designer.vb +++ b/EDIDocumentImport/frmRowEditor.Designer.vb @@ -21,14 +21,19 @@ Partial Class frmRowEditor Private Sub InitializeComponent() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() + Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem() + Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.GridControl1 = New DevExpress.XtraGrid.GridControl() Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView() - Me.KEY = New DevExpress.XtraGrid.Columns.GridColumn() - Me.VALUE = New DevExpress.XtraGrid.Columns.GridColumn() + Me.Key = New DevExpress.XtraGrid.Columns.GridColumn() + Me.ValueOriginal = New DevExpress.XtraGrid.Columns.GridColumn() + Me.ValueExternal = New DevExpress.XtraGrid.Columns.GridColumn() + Me.ValueFinal = New DevExpress.XtraGrid.Columns.GridColumn() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -38,9 +43,9 @@ Partial Class frmRowEditor ' Me.RibbonControl1.CommandLayout = DevExpress.XtraBars.Ribbon.CommandLayout.Simplified Me.RibbonControl1.ExpandCollapseItem.Id = 0 - Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1}) + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1, Me.BarButtonItem2, Me.BarButtonItem3}) Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl1.MaxItemId = 2 + Me.RibbonControl1.MaxItemId = 4 Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] @@ -52,11 +57,26 @@ Partial Class frmRowEditor ' Me.BarButtonItem1.Caption = "Save" Me.BarButtonItem1.Id = 1 + Me.BarButtonItem1.ImageOptions.SvgImage = Global.ImporterForm.My.Resources.Resources.save Me.BarButtonItem1.Name = "BarButtonItem1" ' + 'BarButtonItem2 + ' + Me.BarButtonItem2.Caption = "Aus Winline übernehmen" + Me.BarButtonItem2.Id = 2 + Me.BarButtonItem2.ImageOptions.SvgImage = Global.ImporterForm.My.Resources.Resources.actions_arrow4down + Me.BarButtonItem2.Name = "BarButtonItem2" + ' + 'BarButtonItem3 + ' + Me.BarButtonItem3.Caption = "Zurücksetzen" + Me.BarButtonItem3.Id = 3 + Me.BarButtonItem3.ImageOptions.SvgImage = Global.ImporterForm.My.Resources.Resources.resetview + Me.BarButtonItem3.Name = "BarButtonItem3" + ' 'RibbonPage1 ' - Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1}) + Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2}) Me.RibbonPage1.Name = "RibbonPage1" Me.RibbonPage1.Text = "RibbonPage1" ' @@ -66,6 +86,13 @@ Partial Class frmRowEditor Me.RibbonPageGroup1.Name = "RibbonPageGroup1" Me.RibbonPageGroup1.Text = "RibbonPageGroup1" ' + 'RibbonPageGroup2 + ' + Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem2) + Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem3) + Me.RibbonPageGroup2.Name = "RibbonPageGroup2" + Me.RibbonPageGroup2.Text = "RibbonPageGroup2" + ' 'RibbonStatusBar1 ' Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 589) @@ -91,31 +118,55 @@ Partial Class frmRowEditor ' 'GridView1 ' - Me.GridView1.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.KEY, Me.VALUE}) + Me.GridView1.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.Key, Me.ValueOriginal, Me.ValueExternal, Me.ValueFinal}) Me.GridView1.GridControl = Me.GridControl1 Me.GridView1.Name = "GridView1" ' - 'KEY + 'Key ' - Me.KEY.AppearanceCell.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) - Me.KEY.AppearanceCell.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.KEY.AppearanceCell.Options.UseBackColor = True - Me.KEY.AppearanceCell.Options.UseFont = True - Me.KEY.Caption = "KEY" - Me.KEY.FieldName = "KEY" - Me.KEY.Name = "KEY" - Me.KEY.OptionsColumn.AllowEdit = False - Me.KEY.OptionsColumn.ReadOnly = True - Me.KEY.Visible = True - Me.KEY.VisibleIndex = 0 + Me.Key.AppearanceCell.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) + Me.Key.AppearanceCell.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Key.AppearanceCell.Options.UseBackColor = True + Me.Key.AppearanceCell.Options.UseFont = True + Me.Key.Caption = "Schlüssel" + Me.Key.FieldName = "KEY" + Me.Key.Name = "Key" + Me.Key.OptionsColumn.AllowEdit = False + Me.Key.OptionsColumn.ReadOnly = True + Me.Key.Visible = True + Me.Key.VisibleIndex = 0 ' - 'VALUE + 'ValueOriginal ' - Me.VALUE.Caption = "VALUE" - Me.VALUE.FieldName = "VALUE" - Me.VALUE.Name = "VALUE" - Me.VALUE.Visible = True - Me.VALUE.VisibleIndex = 1 + Me.ValueOriginal.AppearanceCell.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.ValueOriginal.AppearanceCell.Options.UseBackColor = True + Me.ValueOriginal.Caption = "Original Wert" + Me.ValueOriginal.FieldName = "VALUE_ORIGINAL" + Me.ValueOriginal.Name = "ValueOriginal" + Me.ValueOriginal.OptionsColumn.AllowEdit = False + Me.ValueOriginal.OptionsColumn.ReadOnly = True + Me.ValueOriginal.Visible = True + Me.ValueOriginal.VisibleIndex = 1 + ' + 'ValueExternal + ' + Me.ValueExternal.AppearanceCell.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(192, Byte), Integer)) + Me.ValueExternal.AppearanceCell.Options.UseBackColor = True + Me.ValueExternal.Caption = "Winline Wert" + Me.ValueExternal.FieldName = "VALUE_EXTERNAL" + Me.ValueExternal.Name = "ValueExternal" + Me.ValueExternal.OptionsColumn.AllowEdit = False + Me.ValueExternal.OptionsColumn.ReadOnly = True + Me.ValueExternal.Visible = True + Me.ValueExternal.VisibleIndex = 2 + ' + 'ValueFinal + ' + Me.ValueFinal.Caption = "Finaler Wert" + Me.ValueFinal.FieldName = "VALUE_FINAL" + Me.ValueFinal.Name = "ValueFinal" + Me.ValueFinal.Visible = True + Me.ValueFinal.VisibleIndex = 3 ' 'frmRowEditor ' @@ -145,6 +196,11 @@ Partial Class frmRowEditor Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem Friend WithEvents GridControl1 As DevExpress.XtraGrid.GridControl Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView - Friend WithEvents KEY As DevExpress.XtraGrid.Columns.GridColumn - Friend WithEvents VALUE As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents Key As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents ValueOriginal As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents ValueFinal As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents ValueExternal As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents BarButtonItem3 As DevExpress.XtraBars.BarButtonItem + Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup End Class diff --git a/EDIDocumentImport/frmRowEditor.vb b/EDIDocumentImport/frmRowEditor.vb index a2732a4..46aa7ff 100644 --- a/EDIDocumentImport/frmRowEditor.vb +++ b/EDIDocumentImport/frmRowEditor.vb @@ -5,41 +5,42 @@ Imports ImporterShared.Documents Public Class frmRowEditor Private Row As DataRow + Private DocumentRow As ImporterShared.DocumentRow Private Columns As List(Of String) - Public Sub New(pRow As DataRow, pColumns As List(Of String)) + Public Sub New(pColumns As List(Of String), pDocumentRow As ImporterShared.DocumentRow) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. - Row = pRow Columns = pColumns + DocumentRow = pDocumentRow End Sub Private Sub frmRowEditor_Load(sender As Object, e As EventArgs) Handles Me.Load - If Row Is Nothing Then - Exit Sub - End If - Dim oDataTable As New DataTable() - Dim oDict = New Dictionary(Of String, String) + Dim oDict = New Dictionary(Of String, ImporterShared.DocumentRow.FieldValue) For Each oColumn As String In Columns - Dim oValue - Try - oValue = Row.Item(oColumn) - Catch ex As Exception - oValue = String.Empty - End Try + Dim oField = DocumentRow.Fields. + Where(Function(f) f.Key = oColumn). + SingleOrDefault() + + If oField.Value Is Nothing Then + oDict.Add(oColumn, New ImporterShared.DocumentRow.FieldValue()) + Else + oDict.Add(oColumn, oField.Value) + End If - oDict.Add(oColumn, oValue) Next oDataTable.Columns.Add("KEY") - oDataTable.Columns.Add("VALUE") + oDataTable.Columns.Add("VALUE_ORIGINAL") + oDataTable.Columns.Add("VALUE_EXTERNAL") + oDataTable.Columns.Add("VALUE_FINAL") For Each oKV In oDict - oDataTable.Rows.Add(oKV.Key, oKV.Value) + oDataTable.Rows.Add(oKV.Key, oKV.Value.Original, oKV.Value.External, oKV.Value.Final) Next GridControl1.DataSource = oDataTable diff --git a/ImporterShared/Constants.vb b/ImporterShared/Constants.vb new file mode 100644 index 0000000..6ac6291 --- /dev/null +++ b/ImporterShared/Constants.vb @@ -0,0 +1,6 @@ +Public Class Constants + Public Enum XmlFunction + GLN = 1 + EAN = 2 + End Enum +End Class diff --git a/ImporterShared/Documents/Document.vb b/ImporterShared/Documents/Document.vb index e8cf6f4..9aeecd6 100644 --- a/ImporterShared/Documents/Document.vb +++ b/ImporterShared/Documents/Document.vb @@ -7,11 +7,22 @@ Namespace Documents Public Type As DocumentType Public Selected As Boolean = False + ''' + ''' TODO: Set before submitting to web services + ''' + Public CreatedAt As Date + + Public TemplateName As String Public TemplateType As Integer Public [Option] As Integer Public PrintVoucher As Integer + ''' + ''' Original Values, read-only + ''' + Public Property Rows As New List(Of DocumentRow) + Public ReadOnly Property FullName As String Get Return File?.FullName @@ -24,7 +35,6 @@ Namespace Documents End Get End Property - Public Rows As New List(Of DocumentRow) ' Public Type As DocumentType ' Public Data As Object diff --git a/ImporterShared/Documents/DocumentLoader.vb b/ImporterShared/Documents/DocumentLoader.vb index 235b819..90d80cd 100644 --- a/ImporterShared/Documents/DocumentLoader.vb +++ b/ImporterShared/Documents/DocumentLoader.vb @@ -18,6 +18,7 @@ Namespace Documents Public Files As New List(Of Document) + Public Sub New(pLogConfig As LogConfig, pWinline As Winline.Data) MyBase.New(pLogConfig, pLogConfig.GetLogger()) Winline = pWinline @@ -40,6 +41,7 @@ Namespace Documents Files = oFiles. Select(AddressOf WrapFileInfo). Select(AddressOf LoadDocumentData2). + Select(Function(d) MatchDataFromWinLine(d, Winline.Mandators)). ToList() Return True @@ -67,12 +69,15 @@ Namespace Documents Dim oRows As New List(Of DocumentRow) For Each oElement As XElement In oRowElements - Dim oFields As New Dictionary(Of String, String) + Dim oFields As New Dictionary(Of String, DocumentRow.FieldValue) Dim oSubElements = oElement.Descendants().ToList() For Each oSubElement As XElement In oSubElements - oFields.Add(oSubElement.Name.ToString, oSubElement.Value) + oFields.Add(oSubElement.Name.ToString, New DocumentRow.FieldValue With { + .Original = oSubElement.Value, + .Final = oSubElement.Value + }) Next Dim oRow = New DocumentRow With { @@ -91,68 +96,104 @@ Namespace Documents Return pDocument End Function - 'Private Function MatchDataFromWinLine(pDocument As Document, pMandators As List(Of Winline.Mandator)) As Document - ' Dim oMandators As List(Of Winline.Mandator) = pMandators. - ' Where(Function(m) m.IsWhitelisted = True). - ' OrderBy(Function(m) m.Order). - ' ToList() - ' If TypeOf pDocument.Data Is Schemas.Orders.Input.MESOWebService Then - ' Dim oMandator = Winline.FindMatchingMandatorFromOrder(pDocument.Data) - ' Dim oData As Schemas.Orders.Input.MESOWebService = MatchOrderData(pDocument.Data, oMandator) - ' If oMandator Is Nothing Then - ' Logger.Warn("Mandator not found for File [{0}]", pDocument.File.Name) - ' End If + Private Function MatchDataFromWinLine(pDocument As Document, pMandators As List(Of Winline.Mandator)) As Document + Dim oMandators As List(Of Winline.Mandator) = pMandators. + Where(Function(m) m.IsWhitelisted = True). + OrderBy(Function(m) m.Order). + ToList() - ' pDocument.Mandator = oMandator.Id - ' pDocument.Data = oData - ' End If + Dim oMandator = Winline.FindMatchingMandatorFromOrder(pDocument) - ' Return pDocument - 'End Function + If oMandator Is Nothing Then + Logger.Warn("Mandator not found for File [{0}]", pDocument.File.Name) + End If - Private Function MatchOrderData(pData As Input.MESOWebService, pMandator As Winline.Mandator) As Input.MESOWebService + pDocument = MatchOrderData(pDocument, oMandator) + pDocument.Mandator = oMandator.Id + + + 'If TypeOf pDocument.Data Is Schemas.Orders.Input.MESOWebService Then + ' Dim oMandator = Winline.FindMatchingMandatorFromOrder(pDocument.Data) + ' Dim oData As Schemas.Orders.Input.MESOWebService = MatchOrderData(pDocument.Data, oMandator) + + ' If oMandator Is Nothing Then + ' Logger.Warn("Mandator not found for File [{0}]", pDocument.File.Name) + ' End If + + ' pDocument.Mandator = oMandator.Id + ' pDocument.Data = oData + 'End If + + Return pDocument + End Function + + Private Function MatchOrderData(pDocument As Document, pMandator As Winline.Mandator) As Document Dim oYear = Winline.GetWinLineYear() If pMandator Is Nothing Then - Return pData + Return pDocument End If - Dim oHead As Input.MESOWebServiceEXIMVRG_ordersT025 = pData.Items. - Where(Function(h) TypeOf h Is Input.MESOWebServiceEXIMVRG_ordersT025). - SetValue(Sub(h As Input.MESOWebServiceEXIMVRG_ordersT025) - Dim oAccount = Winline.TryGetAccount(h.Fakt_Kontonummer, pMandator) + Dim oHead As DocumentRow = pDocument.Rows. + Where(Function(r) r.Name.ToUpper.EndsWith("T025")). + SetValue(Sub(r As DocumentRow) + Dim oAccountNumberItem = IIf(r.Fields.ContainsKey("Fakt_Kontonummer"), r.Fields.Item("Fakt_Kontonummer"), Nothing) + + Dim oAccountNameItem = Nothing + If r.Fields.ContainsKey("Fakt_Name") Then + oAccountNameItem = r.Fields.Item("Fakt_Name") + End If + + Dim oAccount = Winline.TryGetAccount(oAccountNumberItem.Original, pMandator) If oAccount IsNot Nothing Then - h.Fakt_Kontonummer = oAccount.Id - h.Fakt_Name = oAccount.Name + oAccountNumberItem.External = oAccount.Id + + If r.Fields.ContainsKey("Fakt_Name") Then + oAccountNameItem.External = oAccount.Name + End If End If End Sub). - SetValue(Sub(h As Input.MESOWebServiceEXIMVRG_ordersT025) - Dim oAccount = Winline.TryGetAccount(h.Lief_Kontonummer, pMandator) + SetValue(Sub(r As DocumentRow) + Dim oAccountNumberItem = Nothing + If r.Fields.ContainsKey("Lief_Kontonummer") Then + oAccountNumberItem = r.Fields.Item("Lief_Kontonummer") + Else + Exit Sub + End If + + Dim oAccountNameItem = Nothing + If r.Fields.ContainsKey("Lief_Name") Then + oAccountNameItem = r.Fields.Item("Lief_Name") + End If + + Dim oAccount = Winline.TryGetAccount(oAccountNumberItem.Original, pMandator) If oAccount IsNot Nothing Then - h.Lief_Kontonummer = oAccount.Id - h.Lief_Name = oAccount.Name + oAccountNumberItem.External = oAccount.Id + + If r.Fields.ContainsKey("Lief_Name") Then + oAccountNameItem.External = oAccount.Name + End If End If End Sub). FirstOrDefault() - Dim oPositions As List(Of Input.MESOWebServiceEXIMVRG_ordersT026) = pData.Items. - Where(Function(p) TypeOf p Is Input.MESOWebServiceEXIMVRG_ordersT026). - SetValue(Sub(p) - Dim oArticleNumber = Winline.TryGetArticleNumber(p.Artikelnummer, pMandator) + Dim oPositions As List(Of DocumentRow) = pDocument.Rows. + Where(Function(r) r.Name.ToUpper.EndsWith("T026")). + SetValue(Sub(p As DocumentRow) + Dim oArticleNumberItem = p.Fields.Item("Artikelnummer") + Dim oArticleNumber = Winline.TryGetArticleNumber(oArticleNumberItem.Original, pMandator) If oArticleNumber IsNot Nothing Then - p.Artikelnummer = oArticleNumber + oArticleNumberItem.External = oArticleNumber End If End Sub). - Select(Of Input.MESOWebServiceEXIMVRG_ordersT026)(Function(i) i). ToList() - pData.Items = New List(Of Object) From {oHead}. - Concat(oPositions). - ToArray() + Dim oList As New List(Of DocumentRow) From {oHead} + pDocument.Rows = oList.Concat(oPositions).ToList() - Return pData + Return pDocument End Function Private Function WrapFileInfo(pFileInfo As FileInfo) As Document diff --git a/ImporterShared/Documents/DocumentRow.vb b/ImporterShared/Documents/DocumentRow.vb index 8855cd5..7cbb616 100644 --- a/ImporterShared/Documents/DocumentRow.vb +++ b/ImporterShared/Documents/DocumentRow.vb @@ -1,4 +1,23 @@ Public Class DocumentRow + ''' + ''' Tabellen/Elementname aus XML + ''' Public Name As String - Public Fields As Dictionary(Of String, String) + Public Id As New Guid + + Public Fields As Dictionary(Of String, FieldValue) + + Public Sub New() + Id = Guid.NewGuid() + End Sub + + Public Class FieldValue + Public Original As String = "" + Public External As String = "" + Public Final As String = "" + + Public Overrides Function ToString() As String + Return Final + End Function + End Class End Class diff --git a/ImporterShared/ImporterShared.vbproj b/ImporterShared/ImporterShared.vbproj index b4258ae..3429cb7 100644 --- a/ImporterShared/ImporterShared.vbproj +++ b/ImporterShared/ImporterShared.vbproj @@ -94,6 +94,7 @@ + @@ -130,7 +131,7 @@ - + diff --git a/ImporterShared/Winline/Data.vb b/ImporterShared/Winline/Data.vb index 0b1d5d6..2955789 100644 --- a/ImporterShared/Winline/Data.vb +++ b/ImporterShared/Winline/Data.vb @@ -16,8 +16,10 @@ Namespace Winline Public Mandators As New List(Of Mandator) Public DocumentKinds As New List(Of DocumentKind) Public Years As List(Of Integer) - Public XmlConfigHead As List(Of XmlItem) - Public XmlConfigPositions As List(Of XmlItem) + Public TemplateConfiguration As New List(Of TemplateColumn) + + 'Public XmlConfigHead As List(Of TemplateColumn) + 'Public XmlConfigPositions As List(Of TemplateColumn) Public Const ALL_MESOCOMP = "mesocomp" @@ -340,39 +342,47 @@ Namespace Winline End Try End Function - Public Function FindMatchingMandatorFromOrder(pData As Schemas.Orders.Input.MESOWebService) As Mandator - Dim oPositions As List(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026) = pData.Items. - Where(Function(i) TypeOf i Is Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026). - Select(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026)(Function(i) i). + Public Function FindMatchingMandatorFromOrder(pData As Documents.Document) As Mandator + Dim oPositions = pData.Rows. + Where(Function(r) r.Name.ToUpper.EndsWith("T026")). ToList() + Dim oEANNumbers = oPositions. + Select(Function(p) p.Fields.Item("Artikelnummer").Original). + Distinct(). + ToList() + + 'Dim oPositions As List(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026) = pData.Items. + ' Where(Function(i) TypeOf i Is Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026). + ' Select(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026)(Function(i) i). + ' ToList() Dim oYear = GetWinLineYear() Dim oMandatorId As String = String.Empty Dim oWhitelistedMandators = Mandators. Where(Function(m) m.IsWhitelisted = True). ToList() - For Each oPos In oPositions + For Each oEANNumber In oEANNumbers For Each oMandator In oWhitelistedMandators Dim oSQL As String = $" - SELECT - [c011], -- Artikelnummer - [c003], -- Artikelbezeichnung - [c075], -- EAN-Nummer - [c123] -- Ersatzartikelnummer - FROM [{oMandator.Database}].[dbo].[v021] - WHERE [c075] = '{oPos.Artikelnummer}' - AND [mesocomp] = '{oMandator.Id}' AND [mesoyear] = {oYear}" + SELECT + [c011], -- Artikelnummer + [c003], -- Artikelbezeichnung + [c075], -- EAN-Nummer + [c123] -- Ersatzartikelnummer + FROM [{oMandator.Database}].[dbo].[v021] + WHERE [c075] = '{oEANNumber}' + AND [mesocomp] = '{oMandator.Id}' AND [mesoyear] = {oYear}" Dim oTable As DataTable = Database.GetDatatable(oSQL) ' EAN not found in this Mandator, continue to next one If oTable.Rows.Count = 0 Then - Logger.Debug("EAN [{0}] was not found in Mandator: [{1}]", oPos.Artikelnummer, oMandator.Id) + Logger.Debug("EAN [{0}] was not found in Mandator: [{1}]", oEANNumber, oMandator.Id) Continue For End If ' Duplicate EAN, exit and do nothing about this manda If oTable.Rows.Count > 1 Then - Logger.Warn("EAN [{0}] was found more than once. Skipping Mandator [{1}]", oPos.Artikelnummer, oMandator.Id) + Logger.Warn("EAN [{0}] was found more than once. Skipping Mandator [{1}]", oEANNumber, oMandator.Id) Exit For End If @@ -413,23 +423,107 @@ Namespace Winline End If End Function - Public Sub GetXmlConfiguration() + 'Public Function FindMatchingMandatorFromOrder(pData As Schemas.Orders.Input.MESOWebService) As Mandator + ' Dim oPositions As List(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026) = pData.Items. + ' Where(Function(i) TypeOf i Is Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026). + ' Select(Of Schemas.Orders.Input.MESOWebServiceEXIMVRG_ordersT026)(Function(i) i). + ' ToList() + ' Dim oYear = GetWinLineYear() + ' Dim oMandatorId As String = String.Empty + ' Dim oWhitelistedMandators = Mandators. + ' Where(Function(m) m.IsWhitelisted = True). + ' ToList() + + ' For Each oPos In oPositions + ' For Each oMandator In oWhitelistedMandators + ' Dim oSQL As String = $" + ' SELECT + ' [c011], -- Artikelnummer + ' [c003], -- Artikelbezeichnung + ' [c075], -- EAN-Nummer + ' [c123] -- Ersatzartikelnummer + ' FROM [{oMandator.Database}].[dbo].[v021] + ' WHERE [c075] = '{oPos.Artikelnummer}' + ' AND [mesocomp] = '{oMandator.Id}' AND [mesoyear] = {oYear}" + ' Dim oTable As DataTable = Database.GetDatatable(oSQL) + + ' ' EAN not found in this Mandator, continue to next one + ' If oTable.Rows.Count = 0 Then + ' Logger.Debug("EAN [{0}] was not found in Mandator: [{1}]", oPos.Artikelnummer, oMandator.Id) + ' Continue For + ' End If + + ' ' Duplicate EAN, exit and do nothing about this manda + ' If oTable.Rows.Count > 1 Then + ' Logger.Warn("EAN [{0}] was found more than once. Skipping Mandator [{1}]", oPos.Artikelnummer, oMandator.Id) + ' Exit For + ' End If + + ' Dim oRow As DataRow = oTable.Rows.Item(0) + ' Dim oArticleNumber As String = Utils.NotNull(oRow.Item(V21_ARTICLENUMBER), String.Empty) + + ' ' EAN was found, now we need to check it against the Regex of the current Mandantor, if one exists + ' If oMandator.Regex <> String.Empty Then + ' Try + ' Dim oRegex As New Regex(oMandator.Regex) + ' Dim oMatch = oRegex.Match(oArticleNumber) + + ' ' If ArticleNumber matches the regex, we assign it and exit + ' If oMatch.Success Then + ' oMandatorId = oMandator.Id + ' Exit For + ' Else + ' ' If it does not match, continue to the next mandator + ' End If + ' Catch ex As Exception + ' Logger.Error(ex) + ' Logger.Warn("Regex [{0}] could not be parsed. Skipping.", oMandator.Regex) + ' End Try + ' Else + ' ' If no regex was found, we assume the number matches + ' oMandatorId = oMandator.Id + ' End If + ' Next + ' Next + + ' If oMandatorId = String.Empty Then + ' Return Nothing + ' Else + ' Return oWhitelistedMandators. + ' Where(Function(m) m.Id = oMandatorId). + ' Take(1). + ' SingleOrDefault() + ' End If + 'End Function + + Public Function LoadTemplateConfiguration() As Boolean Try - Dim oSql = $"SELECT XML_NAME, XML_ROOT, DATA_TYPE, IS_HEAD FROM [DD_ECM].[dbo].[VWEDI_XML_ITEMS]" + Dim oSql = $"SELECT XML_NAME, XML_ROOT, TEMPLATE_NAME, DATA_TYPE, IS_HEAD, FUNCTION_ID, READ_ONLY FROM [DD_ECM].[dbo].[VWEDI_XML_ITEMS]" Dim oTable As DataTable = Database.GetDatatable(oSql) + Dim oItems As New List(Of TemplateColumn) For Each oRow As DataRow In oTable.Rows - Dim oXmlItem As New XmlItem With { + Dim oColumn As New TemplateColumn With { .Name = oRow.Item("XML_NAME"), .Root = oRow.Item("XML_ROOT"), - .Type = oRow.Item("XML_TYPE") + .Type = oRow.Item("XML_TYPE"), + .Template = oRow.Item("TEMPLATE_NAME"), + .[Function] = oRow.Item("FUNCTION_ID"), + .[ReadOnly] = oRow.Item("READ_ONLY") } + + oItems.Add(oColumn) Next + TemplateConfiguration = oItems + Return True + Catch ex As Exception + Logger.Error(ex) + Return False End Try - End Sub + End Function ''' ''' Turns a database info like "SQLCWLDATEN on SERVER\INSTANCE" into a Tuple of two strings diff --git a/ImporterShared/Winline/Entities/TemplateColumn.vb b/ImporterShared/Winline/Entities/TemplateColumn.vb new file mode 100644 index 0000000..24be314 --- /dev/null +++ b/ImporterShared/Winline/Entities/TemplateColumn.vb @@ -0,0 +1,12 @@ +Namespace Winline + Public Class TemplateColumn + Public Name As String + Public Root As String + Public Type As String + Public IsHead As Boolean + Public Template As String + Public [ReadOnly] As Boolean + Public [Function] As Constants.XmlFunction + End Class + +End Namespace \ No newline at end of file diff --git a/ImporterShared/Winline/Entities/XmlItem.vb b/ImporterShared/Winline/Entities/XmlItem.vb deleted file mode 100644 index 668b822..0000000 --- a/ImporterShared/Winline/Entities/XmlItem.vb +++ /dev/null @@ -1,9 +0,0 @@ -Namespace Winline - Public Class XmlItem - Public Name As String - Public Root As String - Public Type As String - Public IsHead As Boolean - End Class - -End Namespace \ No newline at end of file