From b67c2dfd1becba1c7c903cff2ef652ba1411fa07 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Fri, 23 Oct 2026 23:24:14 +0200 Subject: [PATCH] EXG-GEstellung, Tetrapak --- .../usrCntlATLAS_EXGestellung.Designer.vb | 49 +- .../EXGestellung/usrCntlATLAS_EXGestellung.vb | 5 +- .../DAKOSY/ATLAS/EZA/cATLAS_EZA_IMPORT.vb | 424 +++++++++++++----- .../DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb | 9 + .../ATLAS/EZA/usrCntlATLAS_EZA_Position.vb | 107 +++-- .../ATLAS/EZA/usrCntlATLAS_EZA_Positionen.vb | 7 +- .../DAKOSY/ATLAS/cDakosyInterface_Send.vb | 20 +- .../Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb | 5 + 8 files changed, 454 insertions(+), 172 deletions(-) diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.Designer.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.Designer.vb index 6e42546d..e5672992 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.Designer.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.Designer.vb @@ -22,8 +22,9 @@ Partial Class usrCntlATLAS_EXGestellung 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Me.SplitContainer = New System.Windows.Forms.SplitContainer() - Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel() + Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components) Me.btnAllgemein = New System.Windows.Forms.Button() Me.pnl = New System.Windows.Forms.Panel() Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox() @@ -35,8 +36,10 @@ Partial Class usrCntlATLAS_EXGestellung Me.Label5 = New System.Windows.Forms.Label() Me.Button2 = New System.Windows.Forms.Button() Me.cbxNCTS = New System.Windows.Forms.CheckBox() - Me.MyPanel1 = New VERAG_PROG_ALLGEMEIN.MyPanel() - Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview() + Me.MyPanel1 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components) + Me.cbxBestLand = New System.Windows.Forms.CheckBox() + Me.cbxVersLand = New System.Windows.Forms.CheckBox() + Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) Me.Label7 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() Me.TextBox1 = New System.Windows.Forms.TextBox() @@ -46,7 +49,7 @@ Partial Class usrCntlATLAS_EXGestellung Me.Label2 = New System.Windows.Forms.Label() Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.Label6 = New System.Windows.Forms.Label() - Me.MyPanel2 = New VERAG_PROG_ALLGEMEIN.MyPanel() + Me.MyPanel2 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components) Me.cboStammreferenz2 = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.cbxAutoTranslate = New System.Windows.Forms.CheckBox() Me.Label8 = New System.Windows.Forms.Label() @@ -55,7 +58,7 @@ Partial Class usrCntlATLAS_EXGestellung Me.Button3 = New System.Windows.Forms.Button() Me.Label1 = New System.Windows.Forms.Label() Me.lblBezugsnummer = New System.Windows.Forms.Label() - Me.cntxtBezugsnr = New System.Windows.Forms.ContextMenuStrip() + Me.cntxtBezugsnr = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.NeueBezugsnummerVergebenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.Panel1 = New System.Windows.Forms.Panel() Me.txtDyMandant = New System.Windows.Forms.Label() @@ -281,15 +284,43 @@ Partial Class usrCntlATLAS_EXGestellung Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.MyPanel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.MyPanel1.Controls.Add(Me.cbxBestLand) + Me.MyPanel1.Controls.Add(Me.cbxVersLand) Me.MyPanel1.Controls.Add(Me.MyDatagridview1) Me.MyPanel1.Controls.Add(Me.Label7) Me.MyPanel1.Enabled = False - Me.MyPanel1.Location = New System.Drawing.Point(454, 88) + Me.MyPanel1.Location = New System.Drawing.Point(454, 90) Me.MyPanel1.Name = "MyPanel1" - Me.MyPanel1.Size = New System.Drawing.Size(560, 525) + Me.MyPanel1.Size = New System.Drawing.Size(560, 529) Me.MyPanel1.TabIndex = 20 Me.MyPanel1.Visible = False ' + 'cbxBestLand + ' + Me.cbxBestLand.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbxBestLand.AutoSize = True + Me.cbxBestLand.Checked = True + Me.cbxBestLand.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxBestLand.Location = New System.Drawing.Point(337, 28) + Me.cbxBestLand.Name = "cbxBestLand" + Me.cbxBestLand.Size = New System.Drawing.Size(223, 17) + Me.cbxBestLand.TabIndex = 28 + Me.cbxBestLand.Text = "Bestimmungsland aus Empfänger-Adresse" + Me.cbxBestLand.UseVisualStyleBackColor = True + ' + 'cbxVersLand + ' + Me.cbxVersLand.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbxVersLand.AutoSize = True + Me.cbxVersLand.Checked = True + Me.cbxVersLand.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxVersLand.Location = New System.Drawing.Point(337, 6) + Me.cbxVersLand.Name = "cbxVersLand" + Me.cbxVersLand.Size = New System.Drawing.Size(220, 17) + Me.cbxVersLand.TabIndex = 27 + Me.cbxVersLand.Text = "Versendungsland aus Versender-Adresse" + Me.cbxVersLand.UseVisualStyleBackColor = True + ' 'MyDatagridview1 ' Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1 @@ -299,7 +330,7 @@ Partial Class usrCntlATLAS_EXGestellung Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.MyDatagridview1.Location = New System.Drawing.Point(20, 51) Me.MyDatagridview1.Name = "MyDatagridview1" - Me.MyDatagridview1.Size = New System.Drawing.Size(537, 457) + Me.MyDatagridview1.Size = New System.Drawing.Size(537, 461) Me.MyDatagridview1.TabIndex = 26 ' 'Label7 @@ -643,4 +674,6 @@ Partial Class usrCntlATLAS_EXGestellung Friend WithEvents Label9 As Label Friend WithEvents Button5 As Button Friend WithEvents Label10 As Label + Friend WithEvents cbxBestLand As CheckBox + Friend WithEvents cbxVersLand As CheckBox End Class diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb index e16505d1..d3e118e3 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb @@ -1,6 +1,7 @@ Imports System.Data.SqlClient Imports com.sun.tools.doclets.internal.toolkit.util Imports DAKOSY_Worker +Imports DocumentFormat.OpenXml.Office2010.Word Imports TAlex.WPF.Helpers Public Class usrCntlATLAS_EXGestellung @@ -244,7 +245,7 @@ Public Class usrCntlATLAS_EXGestellung Me.FindForm.Close() End If - Me.Cursor = Cursors.Default + Me.Cursor = Cursors.Default End Sub Private isFormattingMRN As Boolean = False @@ -675,7 +676,7 @@ Public Class usrCntlATLAS_EXGestellung End If End If - DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr, cbxAutoTranslate.Checked, cbxForceTranslate.Checked) + DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr, cbxAutoTranslate.Checked, cbxForceTranslate.Checked, cbxVersLand.Checked, cbxBestLand.Checked) 'Console.WriteLine("NCTS: EXG übernommen: " & EXG.exg_ObjectName) diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/cATLAS_EZA_IMPORT.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/cATLAS_EZA_IMPORT.vb index 4529e755..b9dc1a8d 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/cATLAS_EZA_IMPORT.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/cATLAS_EZA_IMPORT.vb @@ -1570,163 +1570,343 @@ Public Class cATLAS_EZA_IMPORT Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click Try Me.Cursor = Cursors.WaitCursor - importExcel_TetraPak() + importExcel_TetraPak(cbxGezeKN8.Checked, cbxGezeTranslate.Checked, cbxGezeTNR8to11.Checked) Finally Me.Cursor = Cursors.Default End Try End Sub - Private Function importExcel_TetraPak() As Boolean + ' In cATLAS_EZA_IMPORT einfügen. Vorhandene Tetra*-Hilfsfunktionen durch diese Version ersetzen. + ' Erforderliche Imports: System.Data.SqlClient, System.Globalization, System.Linq, + ' System.Text.RegularExpressions, Microsoft.Office.Interop (Excel-Alias wie im Projekt vorhanden). + ' Der bestehende Button8_Click kann unverändert importExcel_TetraPak() aufrufen. + + Private Function importExcel_TetraPak(OP_addKN8 As Boolean, OP_translate As Boolean, OP_TNR8to11 As Boolean) As Boolean Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG) f.ShowDialog(Me) - If f.DialogResult <> DialogResult.OK OrElse f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count = 0 Then Return False - If f.LIST_FILES.Count <> 1 Then - MsgBox("Bitte genau eine Excel-Datei auswählen.") - Return False - End If - + If f.DialogResult <> DialogResult.OK OrElse f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count <> 1 Then Return False Dim filePath As String = f.LIST_FILES(0) If Not (filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase) OrElse filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase)) Then Return False Dim xlApp As Excel.Application = Nothing Dim wb As Excel.Workbook = Nothing Dim ws As Excel.Worksheet = Nothing + Dim used As Excel.Range = Nothing Dim imported As New List(Of DAKOSY_Worker.cDakosy_EZA_Warenposition) - Dim head As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) - Dim kopf As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) - + Dim warnings As New List(Of String) Try xlApp = New Excel.Application With {.DisplayAlerts = False, .Visible = False} wb = xlApp.Workbooks.Open(filePath, ReadOnly:=True) ws = CType(wb.Worksheets(1), Excel.Worksheet) - Dim lastCol As Integer = CInt(ws.Cells(1, ws.Columns.Count).End(Excel.XlDirection.xlToLeft).Column) - Dim lastRow As Integer = CInt(ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1) - - For c As Integer = 1 To lastCol - Dim key As String = TetraCell(ws.Cells(1, c).Value2) - If key <> "" AndAlso Not head.ContainsKey(key) Then head.Add(key, c) - Next + used = ws.UsedRange + Dim lastRow As Integer = used.Row + used.Rows.Count - 1 + Dim lastCol As Integer = used.Column + used.Columns.Count - 1 If lastRow < 2 Then Return False + ' Einmaliges Lesen des Datenblocks statt tausender COM-Zugriffe. + Dim values As Object(,) = CType(ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value2, Object(,)) + Dim head As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + For c As Integer = 1 To lastCol + Dim h As String = TetraCell(values(1, c)) + If h <> "" AndAlso Not head.ContainsKey(h) Then head.Add(h, c) + Next + + ' Neues Layout zuerst; alte Feldnamen nur dort, wo sie dieselbe Bedeutung haben. + Dim kopf As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) + Dim kopfFields As String() = {"Country of Destination", "Country of Dispatch", "Shipment Gross Weight (kg)", "Importer EORI Number", "Invoice Reference Number", "MIC Invoice Number", "Invoice Value", "Currency", "Term of Delivery", "Term of Delivery Place", "Seller Name 1", "Seller Name 2", "Seller Street", "Seller City", "Seller Country", "Supplier Name 1", "Supplier Name 2", "Supplier Street", "Supplier City", "Supplier Country", "Freight Costs", "Currency Freight Costs", "Insurance Costs", "Currency Insurance Costs", "Inland Freight Costs", "Currency Inland Freight", "Other Expenses Costs", "Currency Other Expenses", "Package Information", "Invoice Type", "Office of Entry", "Mode of Transport at the Border", "Identity of the means of transport at the border", "Nationality of the means of transport at the border", "Inland Mode of Transport", "Identity of the inland means of transport"} For r As Integer = 2 To lastRow - Dim line As String = TetraGet(ws, head, r, "Shipment Line") - Dim tariff As String = TetraGet(ws, head, r, "Tariff Number").Replace(" ", "") - Dim article As String = TetraGet(ws, head, r, "Part Number") - Dim description As String = TetraGet(ws, head, r, "Part Description") - If line = "" AndAlso tariff = "" AndAlso article = "" AndAlso description = "" AndAlso - TetraGet(ws, head, r, "Country of Origin") = "" AndAlso - TetraGet(ws, head, r, "Net Weight (kg)") = "" AndAlso - TetraGet(ws, head, r, "Gross Weight (kg)") = "" AndAlso - TetraGet(ws, head, r, "Line Value") = "" AndAlso - TetraGet(ws, head, r, "Number of Packages") = "" AndAlso - TetraGet(ws, head, r, "Package Type") = "" AndAlso - TetraGet(ws, head, r, "Import Customs Procedure") = "" Then Continue For + For Each k As String In kopfFields + Dim v As String = TetraGet(values, head, r, k) + If v <> "" AndAlso (Not kopf.ContainsKey(k) OrElse kopf(k) = "") Then kopf(k) = v + Next + Next + + Dim currency As String = TetraKopf(kopf, "Currency").ToUpperInvariant() + Dim invoiceNo As String = TetraKopf(kopf, "Invoice Reference Number") + If invoiceNo = "" Then invoiceNo = TetraGet(values, head, 2, "Invoice Number") + Dim invoiceType As String = TetraKopf(kopf, "Invoice Type").ToUpperInvariant() + If invoiceType = "" Then invoiceType = "N380" + Dim invoiceValue As Decimal + Dim hasInvoiceValue As Boolean = TetraTryDecimal(TetraKopf(kopf, "Invoice Value"), invoiceValue) + + Dim knownOrigins As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) + For r As Integer = 2 To lastRow + Dim o As String = TetraGet(values, head, r, "Country of Origin").ToUpperInvariant() + If o <> "" Then knownOrigins.Add(o) + Next + Dim commonOrigin As String = If(knownOrigins.Count = 1, knownOrigins.FirstOrDefault(), "") + For r As Integer = 2 To lastRow + Dim line As String = TetraGet(values, head, r, "Shipment Line") + Dim article As String = TetraGet(values, head, r, "Part Number") + Dim description As String = TetraGet(values, head, r, "Part Description") + Dim tariff As String = TetraGet(values, head, r, "Tariff Number").Replace(" ", "") + Dim origin As String = TetraGet(values, head, r, "Country of Origin").Trim().ToUpperInvariant() + If origin = "" AndAlso commonOrigin <> "" Then origin = commonOrigin + If origin = "RS" Then origin = "XS" + Dim netText As String = TetraGet(values, head, r, "Net Weight (kg)") + Dim grossText As String = TetraGet(values, head, r, "Gross Weight (kg)") + Dim valueText As String = TetraGet(values, head, r, "Line Value") + Dim procedure As String = TetraGet(values, head, r, "Import Customs Procedure").Replace(" ", "") + If line = "" AndAlso article = "" AndAlso description = "" AndAlso tariff = "" AndAlso origin = "" AndAlso netText = "" AndAlso grossText = "" AndAlso valueText = "" AndAlso procedure = "" Then Continue For Dim pos As New DAKOSY_Worker.cDakosy_EZA_Warenposition - If line <> "" Then pos.ezaWP_PositionsNummer = line + pos.ezaWP_VerfahrensCodeVorangegangenesVerfahren = "00" + If line <> "" Then pos.ezaWP_PositionsNummer = line Else pos.ezaWP_PositionsNummer = (imported.Count + 1).ToString(CultureInfo.InvariantCulture) If article <> "" Then pos.ezaWP_Artikelnummer = article If description <> "" Then pos.ezaWP_Warenbezeichnung = description If tariff <> "" Then pos.ezaWP_WarennummerEZT = tariff - Dim origin As String = TetraGet(ws, head, r, "Country of Origin").ToUpperInvariant() + + ' GEZE-Logik: Übersetzung -> KN8-Text -> Erweiterung auf 11 Stellen. + If OP_translate AndAlso Not String.IsNullOrWhiteSpace(pos.ezaWP_Warenbezeichnung) Then + cDeeplAPI.deepl_Translate(pos.ezaWP_Warenbezeichnung, pos.ezaWP_Warenbezeichnung, "DE") + End If + If OP_addKN8 AndAlso If(pos.ezaWP_WarennummerEZT, "").Length >= 8 Then + Dim kn8Text As String = cTariffKN8_Interface.getKN8FromTNR(pos.ezaWP_WarennummerEZT.Substring(0, 8)) + If Not String.IsNullOrWhiteSpace(kn8Text) Then pos.ezaWP_Warenbezeichnung = kn8Text & ",hier: " & If(pos.ezaWP_Warenbezeichnung, "") + End If + If If(pos.ezaWP_Warenbezeichnung, "").Length > 240 Then pos.ezaWP_Warenbezeichnung = pos.ezaWP_Warenbezeichnung.Substring(0, 240) + If OP_TNR8to11 AndAlso If(pos.ezaWP_WarennummerEZT, "").Length >= 8 AndAlso pos.ezaWP_WarennummerEZT.Length < 11 Then + Dim fullTariff As String = VERAG_PROG_ALLGEMEIN.cATEZ_Tariff.GetFullTariff_Only1Result(pos.ezaWP_WarennummerEZT, "TR", cboTnrDrc_Geze._value, cboTnrTrg_Geze._value) + If Not String.IsNullOrWhiteSpace(fullTariff) Then pos.ezaWP_WarennummerEZT = fullTariff + End If If origin <> "" Then pos.ezaWP_UrsprungslandCode = origin - Dim currency As String = TetraGet(ws, head, r, "Currency").ToUpperInvariant() If currency <> "" Then pos.ezaWP_ArtikelpreisWaehrung = currency - Dim number As Decimal - If TetraTryDecimal(TetraGet(ws, head, r, "Net Weight (kg)"), number) Then pos.ezaWP_Eigenmasse = number.ToString("0.###", CultureInfo.CurrentCulture) - If TetraTryDecimal(TetraGet(ws, head, r, "Gross Weight (kg)"), number) Then pos.ezaWP_Rohmasse = CDbl(number) - If TetraTryDecimal(TetraGet(ws, head, r, "Line Value"), number) Then pos.ezaWP_Artikelpreis = number.ToString("0.00", CultureInfo.CurrentCulture) - If TetraTryDecimal(TetraGet(ws, head, r, "Number of Packages"), number) Then pos.ezaWP_PackstueckAnzahl = number.ToString("0.###", CultureInfo.InvariantCulture) - Dim packageType As String = TetraGet(ws, head, r, "Package Type") - If packageType <> "" Then pos.ezaWP_PackstueckArt = packageType - Dim procedure As String = TetraGet(ws, head, r, "Import Customs Procedure") + Dim n As Decimal + If TetraTryDecimal(netText, n) Then pos.ezaWP_Eigenmasse = n.ToString("0.###", CultureInfo.CurrentCulture) + If TetraTryDecimal(grossText, n) Then pos.ezaWP_Rohmasse = CDbl(n) + If TetraTryDecimal(valueText, n) Then pos.ezaWP_Artikelpreis = n.ToString("0.00", CultureInfo.CurrentCulture) If procedure.Length >= 2 Then pos.ezaWP_AnmeldeVErfahren = procedure.Substring(0, 2) If procedure.Length >= 4 Then pos.ezaWP_VerfahrensCodeVorangegangenesVerfahren = procedure.Substring(2, 2) - Dim preference As String = TetraGet(ws, head, r, "Preference Code") - If preference <> "" Then pos.ezaWP_BeguenstigungBenatragtCode = preference - Dim invoice As String = TetraGet(ws, head, r, "Invoice Number") - If invoice <> "" Then + Dim pref As String = TetraGet(values, head, r, "Preference Code") + If pref <> "" Then pos.ezaWP_BeguenstigungBenatragtCode = pref + ' Alte Datei: explizite Packstückfelder; neue Datei: Gesamt-Packstückinfo in AG (unten verteilt). + Dim pkgCount As Decimal + If TetraTryDecimal(TetraGet(values, head, r, "Number of Packages"), pkgCount) Then pos.ezaWP_PackstueckAnzahl = pkgCount.ToString("0", CultureInfo.InvariantCulture) + Dim pkgType As String = TetraGet(values, head, r, "Package Type") + If pkgType <> "" Then pos.ezaWP_PackstueckArt = pkgType + + If invoiceNo <> "" Then pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With { - .ezaWpUl_Art = "N380", .ezaWpUl_Bereich = "4", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = invoice, .ezaWpUl_DatumAusstellung = Nothing - }) + .ezaWpUl_Art = invoiceType, .ezaWpUl_Bereich = "4", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = invoiceNo, .ezaWpUl_DatumAusstellung = Nothing + }) End If - Dim ycodes As String = TetraGet(ws, head, r, "Y-Document Type") + Dim ycodes As String = TetraGet(values, head, r, "Y-Document Codes", "Y-Document Type") For Each code As String In ycodes.Split(New Char() {","c, ";"c}, StringSplitOptions.RemoveEmptyEntries) Dim docCode As String = code.Trim().ToUpperInvariant() If docCode <> "" Then pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With { - .ezaWpUl_Art = docCode, .ezaWpUl_Bereich = "5", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = "", .ezaWpUl_DatumAusstellung = Nothing - }) + .ezaWpUl_Art = docCode, .ezaWpUl_Bereich = "5", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = "", .ezaWpUl_DatumAusstellung = Nothing + }) End If Next imported.Add(pos) - For Each key As String In {"Currency", "Term of Delivery", "Term of Delivery Place", "Shipment Gross Weight (kg)", "Identity of the means of transport at the border", "Declarant EORI Number", "Seller Name 1", "Seller Name 2", "Seller Street", "Seller City", "Seller Country", "Invoice Number", "Importer EORI Number", "Country of Dispatch", "Country of Destination"} - Dim v As String = TetraGet(ws, head, r, key) - If v <> "" AndAlso (Not kopf.ContainsKey(key) OrElse kopf(key) = "") Then kopf(key) = v - Next Next If imported.Count = 0 Then MsgBox("Keine Warenpositionen gefunden.") Return False End If + ' Packstücke: z.B. "4 Pallets 21 Reels 0 Cartons" -> 4 Paletten. + ' Nur wenn keine expliziten positionsbezogenen Packstücke im alten Layout existieren. + Dim pkgInfo As String = TetraKopf(kopf, "Package Information") + Dim pallets As Integer = TetraPackageCount(pkgInfo, "pallets?", "paletten?") + Dim reels As Integer = TetraPackageCount(pkgInfo, "reels?", "rollen?") + Dim cartons As Integer = TetraPackageCount(pkgInfo, "cartons?", "kartons?") + Dim totalPackages As Integer = 0 + Dim packageCode As String = "" + If pallets > 0 Then + totalPackages = pallets : packageCode = "PX" ' UN/ECE 21: pallet + ElseIf cartons > 0 Then + totalPackages = cartons : packageCode = "CT" + ElseIf reels > 0 Then + totalPackages = reels : packageCode = "RL" + End If + If totalPackages > 0 AndAlso imported.All(Function(p) If(p.ezaWP_PackstueckAnzahl, "").ToString().Trim() = "") Then + ' Die Excel enthält nur eine Gesamtanzahl, keine positionsbezogene Zuordnung. + ' Für die Erfassung proportional zum Warenwert verteilen (Rest auf letzte Position). + ' Die Verteilung ist ein Vorschlag und muss vor Zollversand fachlich geprüft werden. + ' Keine unbewiesene proportionale Aufteilung: alle Packstuecke auf erste Position, + ' restliche Positionen ohne Anzahl; Zuordnung ist fachlich zu pruefen. + imported(0).ezaWP_PackstueckAnzahl = totalPackages.ToString(CultureInfo.InvariantCulture) + imported(0).ezaWP_PackstueckArt = packageCode + warnings.Add("Packstücke aus '" & pkgInfo & "' abgeleitet: " & totalPackages & " x " & packageCode & ". Vorlaeufig erste Position; positionsbezogene Zuordnung muss geprueft werden.") + ElseIf pkgInfo <> "" AndAlso totalPackages = 0 Then + warnings.Add("Packstückangabe konnte nicht sicher erkannt werden: " & pkgInfo) + End If + Dim replace As Boolean = False If EZA.eza_WARENPOS.Count > 0 Then Dim answer = MsgBox("Vorhandene " & EZA.eza_WARENPOS.Count & " Positionen ersetzen?" & vbCrLf & "Ja = ersetzen, Nein = ergänzen, Abbrechen = Import abbrechen.", MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question) If answer = MsgBoxResult.Cancel Then Return False replace = (answer = MsgBoxResult.Yes) End If - Dim gross As Decimal = 0D - TetraTryDecimal(TetraKopf(kopf, "Shipment Gross Weight (kg)"), gross) - ' Versender (CZ) aus Verkäufer W:AA, sofern noch nicht vorhanden. + + ' CZ = Versender laut bisheriger AVISO-Vorgabe: Verkäufer/Seller. Dim sellerName As String = (TetraKopf(kopf, "Seller Name 1") & " " & TetraKopf(kopf, "Seller Name 2")).Trim() - If sellerName <> "" AndAlso Not EZA.eza_ADRESSEN.Any(Function(a) String.Equals(a.ezaAd_AdressTyp, "CZ", StringComparison.OrdinalIgnoreCase)) Then + If sellerName <> "" AndAlso Not EZA.eza_ADRESSEN.Any(Function(a) String.Equals(If(a.ezaAd_AdressTyp, "").ToString(), "CZ", StringComparison.OrdinalIgnoreCase)) Then EZA.eza_ADRESSEN.Add(New DAKOSY_Worker.cDakosy_EZA_Adressen With { - .ezaAd_AdressTyp = "CZ", - .ezaAd_NameFirma1 = sellerName, - .ezaAd_StrasseHausNr1 = TetraKopf(kopf, "Seller Street"), - .ezaAd_Ort = TetraKopf(kopf, "Seller City"), - .ezaAd_LandCode = TetraKopf(kopf, "Seller Country").ToUpperInvariant() - }) + .ezaAd_AdressTyp = "CZ", .ezaAd_NameFirma1 = sellerName, + .ezaAd_StrasseHausNr1 = TetraKopf(kopf, "Seller Street"), .ezaAd_Ort = TetraKopf(kopf, "Seller City"), + .ezaAd_LandCode = TetraKopf(kopf, "Seller Country").ToUpperInvariant() + }) End If - ' Anmelder = Adresstyp CN, EORI aus Spalte L. - Dim declarantEori As String = TetraKopf(kopf, "Declarant EORI Number") - - If Not String.IsNullOrWhiteSpace(declarantEori) Then - TetraSetBestimmungsbundesland(declarantEori) - End If - - If declarantEori <> "" Then - Dim adrCN = EZA.eza_ADRESSEN.FirstOrDefault(Function(a) String.Equals(a.ezaAd_AdressTyp, "CN", StringComparison.OrdinalIgnoreCase)) + ' CN: ausschliesslich Importer EORI; kein Declarant-Fallback. + Dim importerEori As String = TetraKopf(kopf, "Importer EORI Number") + If importerEori <> "" Then + Dim adrCN = EZA.eza_ADRESSEN.FirstOrDefault(Function(a) String.Equals(If(a.ezaAd_AdressTyp, "").ToString(), "CN", StringComparison.OrdinalIgnoreCase)) If adrCN Is Nothing Then adrCN = New DAKOSY_Worker.cDakosy_EZA_Adressen With {.ezaAd_AdressTyp = "CN"} EZA.eza_ADRESSEN.Add(adrCN) End If - adrCN.ezaAd_TeilnehmerEORI = declarantEori + adrCN.ezaAd_TeilnehmerEORI = importerEori + TetraSetBestimmungsbundesland(importerEori) End If If replace Then EZA.eza_WARENPOS.Clear() - For Each pos In imported - EZA.eza_WARENPOS.Add(pos) - Next - If TetraKopf(kopf, "Currency") <> "" Then EZA.eza_Rechnungswaehrung = TetraKopf(kopf, "Currency") - If TetraKopf(kopf, "Term of Delivery") <> "" Then EZA.eza_LieferbedingungCode = TetraKopf(kopf, "Term of Delivery") - If TetraKopf(kopf, "Term of Delivery Place") <> "" Then EZA.eza_LieferbedingungOrt = TetraKopf(kopf, "Term of Delivery Place") - If gross > 0D Then EZA.eza_GesamtRohmasse = CDbl(gross) - If TetraKopf(kopf, "Country of Dispatch") <> "" Then EZA.eza_VersendungsLandCode = TetraKopf(kopf, "Country of Dispatch") + EZA.eza_WARENPOS.AddRange(imported) - Dim euEftaCtc As String() = { - "AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", - "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", - "PL", "PT", "RO", "SK", "SI", "ES", "SE", - "IS", "LI", "NO", "CH", - "TR", "MK", "RS", "GB", "UA", "GE", "MD", "ME" - } + If currency <> "" Then EZA.eza_Rechnungswaehrung = currency + If hasInvoiceValue Then EZA.eza_Rechnungspreis = CDbl(invoiceValue) + Dim incoterm As String = TetraKopf(kopf, "Term of Delivery") + If incoterm <> "" Then EZA.eza_LieferbedingungCode = incoterm + Dim incotermPlace As String = TetraKopf(kopf, "Term of Delivery Place") + If incotermPlace <> "" Then EZA.eza_LieferbedingungOrt = incotermPlace + Dim gross As Decimal + If TetraTryDecimal(TetraKopf(kopf, "Shipment Gross Weight (kg)"), gross) Then EZA.eza_GesamtRohmasse = CDbl(gross) + Dim dispatch As String = TetraKopf(kopf, "Country of Dispatch").Trim().ToUpperInvariant() + If dispatch = "RS" Then dispatch = "XS" - If TetraKopf(kopf, "Country of Dispatch") <> "" Then EZA.eza_ZollrechtlicherStatus = If(euEftaCtc.Contains(TetraKopf(kopf, "Country of Dispatch").ToUpperInvariant()), "EU", "IM") + If dispatch <> "" Then + EZA.eza_VersendungsLandCode = dispatch + ' ATLAS Einfuhr: EU für Vertragsparteien des gemeinsamen Versandverfahrens + Dim ctcCountries As String() = {"AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "RO", "SK", "SI", "ES", "SE", "XS", "CH", "NO", "IS", "LI", "TR", "MK", "GB", "UA", "GE", "MD", "ME"} - If TetraKopf(kopf, "Country of Destination") <> "" Then EZA.eza_Bestimmungsland = TetraKopf(kopf, "Country of Destination") - If TetraKopf(kopf, "Identity of the means of transport at the border") <> "" Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = TetraKopf(kopf, "Identity of the means of transport at the border") - MsgBox(imported.Count & " Tetra-Pak-Positionen eingelesen.") + EZA.eza_ZollrechtlicherStatus = If(ctcCountries.Contains(dispatch), "EU", "IM") + End If + Dim destination As String = TetraKopf(kopf, "Country of Destination").ToUpperInvariant() + If destination <> "" Then EZA.eza_Bestimmungsland = destination + Dim modeBorder As String = TetraKopf(kopf, "Mode of Transport at the Border") + If modeBorder <> "" Then EZA.eza_VerkehrszweigGrenze = modeBorder + Dim modeInland As String = TetraKopf(kopf, "Inland Mode of Transport") + If modeInland <> "" Then EZA.eza_VerkehrszweigInland = modeInland + Dim vehicle As String = TetraKopf(kopf, "Identity of the means of transport at the border") + If vehicle <> "" Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = vehicle + + ' DV1: Fracht bis EU-Verbringungsort (010), nach EU-Verbringungsort (014). + ' Annahme: Freight Costs = Gesamtfracht; Inland Freight Costs = darin enthaltener EU-Anteil. + ' Kostenart 014 ist ein Abzug; die Vorzeichenlogik muss in der DAKOSY-Ausgabe geprüft werden. + Dim freight As Decimal, insurance As Decimal, inlandFreight As Decimal, otherExpenses As Decimal + Dim hasFreight As Boolean = TetraTryDecimal(TetraKopf(kopf, "Freight Costs"), freight) + Dim hasInsurance As Boolean = TetraTryDecimal(TetraKopf(kopf, "Insurance Costs"), insurance) + Dim hasInland As Boolean = TetraTryDecimal(TetraKopf(kopf, "Inland Freight Costs"), inlandFreight) + Dim hasOther As Boolean = TetraTryDecimal(TetraKopf(kopf, "Other Expenses Costs"), otherExpenses) + Dim freightCurrency As String = TetraKopf(kopf, "Currency Freight Costs").ToUpperInvariant() + Dim inlandCurrency As String = TetraKopf(kopf, "Currency Inland Freight").ToUpperInvariant() + Dim insuranceCurrency As String = TetraKopf(kopf, "Currency Insurance Costs").ToUpperInvariant() + If freightCurrency = "" Then freightCurrency = currency + If inlandCurrency = "" Then inlandCurrency = freightCurrency + If insuranceCurrency = "" Then insuranceCurrency = currency + Dim incotermCode As String = If(incoterm, "").Trim().ToUpperInvariant() + If incotermCode.Length > 3 Then incotermCode = incotermCode.Substring(0, 3) + Dim dv1Costs As New List(Of DAKOSY_Worker.cDakosy_EZA_DV1Kosten) + + ' Originalwährungen an DAKOSY übergeben. Umrechnung nur für eine Differenz + ' zwischen Gesamtfracht und EU-Inlandsfracht mit verschiedenen Währungen. + Dim freightValid As Boolean = hasFreight AndAlso freight > 0D AndAlso freightCurrency <> "" + Dim inlandValid As Boolean = hasInland AndAlso inlandFreight > 0D AndAlso inlandCurrency <> "" + If hasFreight AndAlso freight < 0D Then warnings.Add("Negative Gesamtfracht: keine automatische DV1-Übernahme.") + If hasInland AndAlso inlandFreight < 0D Then warnings.Add("Negative Inlandsfracht: keine automatische DV1-Übernahme.") + If hasFreight AndAlso freight > 0D AndAlso freightCurrency = "" Then warnings.Add("Gesamtfracht ohne Währung: keine DV1-Übernahme.") + If hasInland AndAlso inlandFreight > 0D AndAlso inlandCurrency = "" Then warnings.Add("Inlandsfracht ohne Währung: keine DV1-Übernahme.") + Dim splitValid As Boolean = freightValid AndAlso (Not hasInland OrElse inlandFreight = 0D OrElse inlandValid) + Dim beforeEU As Decimal = If(freightValid, freight, 0D) + Dim beforeEUCurrency As String = freightCurrency + If splitValid AndAlso inlandValid Then + If freightCurrency = inlandCurrency Then + beforeEU = freight - inlandFreight + Else + Try + ' Inland in die Währung der Gesamtfracht umrechnen; + ' die DV1-Kostenart 010 bleibt in der ursprünglichen Frachtwährung. + Dim inlandConverted As Decimal = CDec(VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(CDbl(inlandFreight), inlandCurrency, freightCurrency)) + If inlandConverted <= 0D Then Throw New Exception("Ungültiges Umrechnungsergebnis") + beforeEU = freight - inlandConverted + Catch ex As Exception + splitValid = False + warnings.Add("Umrechnung der Inlandsfracht von " & inlandCurrency & " nach " & freightCurrency & " fehlgeschlagen (" & ex.Message & ").") + End Try + End If + If splitValid AndAlso beforeEU < 0D Then + splitValid = False + warnings.Add("EU-Inlandsfracht übersteigt Gesamtfracht nach Währungsabgleich; keine Differenzbildung.") + End If + End If + If hasInland AndAlso inlandFreight > 0D AndAlso Not inlandValid Then splitValid = False + If splitValid Then beforeEU = Math.Round(beforeEU, 2, MidpointRounding.AwayFromZero) + + Select Case incotermCode + Case "EXW", "FCA", "FAS", "FOB" + If splitValid AndAlso beforeEU > 0D Then + If MsgBox("Lieferbedingung " & incotermCode & ": " & beforeEU.ToString("N2") & " " & beforeEUCurrency & " als Kostenart 010 hinzurechnen?" & vbCrLf & "Gesamtfracht: " & freight.ToString("N2") & " " & freightCurrency & "; EU-Inlandsfracht: " & inlandFreight.ToString("N2") & " " & inlandCurrency & "." & vbCrLf & "Bitte bestätigen, dass der Betrag nicht bereits im Rechnungspreis enthalten ist und die EU-Abgrenzung stimmt.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then + dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With { + .Kostenart = "010", .Kosten = beforeEU.ToString("0.00", CultureInfo.InvariantCulture), + .KostenWaehrung = beforeEUCurrency, .WechselkursArt = "01", .Verteilungsart = "PRICE", .Minimalbetrag = "0.01" + }) + End If + End If + If inlandValid Then warnings.Add("EU-Inlandsfracht " & inlandFreight.ToString("N2") & " " & inlandCurrency & " nicht als 014 abgezogen: Einschluss im Rechnungspreis bei " & incotermCode & " nicht nachgewiesen.") + + Case "CFR", "CIF", "CPT", "CIP", "DAP", "DPU", "DDP" + If inlandValid Then + If MsgBox("Lieferbedingung " & incotermCode & ": EU-Inlandsfracht " & inlandFreight.ToString("N2") & " " & inlandCurrency & " als Kostenart 014 abziehen?" & vbCrLf & "Nur bestätigen, wenn diese Kosten bereits im Rechnungspreis enthalten und gesondert nachgewiesen sind.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then + dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With { + .Kostenart = "014", .Kosten = inlandFreight.ToString("0.00", CultureInfo.InvariantCulture), + .KostenWaehrung = inlandCurrency, .WechselkursArt = "01", .Verteilungsart = "WEIGHT", .Minimalbetrag = "0.01" + }) + warnings.Add("Kostenart 014: DAKOSY-Code WEIGHT und Abzugswirkung vor Versand im XML/UI prüfen.") + End If + ElseIf freightValid Then + warnings.Add("Lieferbedingung " & incotermCode & ": Gesamtfracht vorhanden, aber kein verwertbarer EU-Inlandsanteil; kein 014-Abzug.") + End If + If freightValid Then warnings.Add("Lieferbedingung " & incotermCode & ": Gesamtfracht nicht zusätzlich als 010 angesetzt (Doppelzählungsrisiko).") + + Case Else + If freightValid OrElse inlandValid Then warnings.Add("Lieferbedingung '" & incotermCode & "' nicht eindeutig: Fracht nicht als 010/014 übernommen.") + End Select + + If hasFreight AndAlso freight > 0D AndAlso Not hasInland Then warnings.Add("Inland Freight Costs ist leer: EU-Anteil unbekannt; Kostenaufteilung vor Zollversand prüfen.") + If hasInsurance AndAlso insurance > 0D Then + If insuranceCurrency = "" Then + warnings.Add("Versicherungskosten ohne Währung: nicht übernommen.") + ElseIf MsgBox("Versicherung " & insurance.ToString("N2") & " " & insuranceCurrency & " als Kostenart 012 hinzurechnen?" & vbCrLf & "Nur bestätigen, wenn die Versicherung nicht bereits im Rechnungspreis enthalten ist.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then + dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With { + .Kostenart = "012", .Kosten = insurance.ToString("0.00", CultureInfo.InvariantCulture), + .KostenWaehrung = insuranceCurrency, .WechselkursArt = "01", .Verteilungsart = "PRICE", .Minimalbetrag = "0.01" + }) + End If + End If + If hasOther AndAlso otherExpenses <> 0D Then warnings.Add("Sonstige Kosten " & otherExpenses.ToString("N2") & " wurden nicht automatisch übernommen; Kostenart und Zollwertrelevanz prüfen.") + + ' Bei bestehenden DV1-Kosten nur nach expliziter Entscheidung ersetzen oder ergänzen. + If dv1Costs.Count > 0 Then + If EZA.eza_DV1Kostenverteilung Is Nothing Then EZA.eza_DV1Kostenverteilung = New List(Of DAKOSY_Worker.cDakosy_EZA_DV1Kosten) + If EZA.eza_DV1Kostenverteilung.Count > 0 Then + Dim dvAnswer = MsgBox("Vorhandene " & EZA.eza_DV1Kostenverteilung.Count & " DV1-Kosteneinträge ersetzen?" & vbCrLf & "Ja = ersetzen, Nein = ergänzen, Abbrechen = neue Kosten nicht übernehmen.", MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question) + If dvAnswer = MsgBoxResult.Cancel Then dv1Costs.Clear() + If dvAnswer = MsgBoxResult.Yes Then EZA.eza_DV1Kostenverteilung.Clear() + End If + For Each cost As DAKOSY_Worker.cDakosy_EZA_DV1Kosten In dv1Costs + If Not EZA.eza_DV1Kostenverteilung.Any(Function(k) k.Kostenart = cost.Kostenart AndAlso k.Kosten = cost.Kosten AndAlso k.KostenWaehrung = cost.KostenWaehrung) Then EZA.eza_DV1Kostenverteilung.Add(cost) + Next + End If + Debug.WriteLine("TetraPak DV1-Kosten nach Import: " & If(EZA.eza_DV1Kostenverteilung Is Nothing, 0, EZA.eza_DV1Kostenverteilung.Count)) + If knownOrigins.Count > 1 Then warnings.Add("Mehrere Ursprungslaender vorhanden: leere Positionen nicht automatisch ergaenzt.") + If invoiceNo <> "" Then warnings.Add("Rechnung " & invoiceNo & ": Rechnungsdatum ist im Excel nicht enthalten; Unterlage ohne Datum übernommen.") + If Not OP_addKN8 Then warnings.Add("KN8-Langtext wurde nicht ergänzt (Option deaktiviert).") + + Dim msg As String = imported.Count & " Tetra-Pak-Positionen eingelesen." + If warnings.Count > 0 Then msg &= vbCrLf & vbCrLf & "Prüfhinweise:" & vbCrLf & "- " & String.Join(vbCrLf & "- ", warnings) + MsgBox(msg, MsgBoxStyle.Information, "Tetra Pak Excel-Import") Me.DialogResult = DialogResult.OK Me.Close() Return True @@ -1742,20 +1922,31 @@ Public Class cATLAS_EZA_IMPORT If xlApp IsNot Nothing Then xlApp.Quit() Catch End Try - For Each obj As Object In New Object() {ws, wb, xlApp} - If obj IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj) + For Each obj As Object In New Object() {used, ws, wb, xlApp} + Try + If obj IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj) + Catch + End Try Next End Try End Function + + Private Function TetraCell(value As Object) As String If value Is Nothing Then Return "" Return Convert.ToString(value, CultureInfo.InvariantCulture).Trim() End Function - Private Function TetraGet(ws As Excel.Worksheet, header As Dictionary(Of String, Integer), row As Integer, name As String) As String - If Not header.ContainsKey(name) Then Return "" - Return TetraCell(ws.Cells(row, header(name)).Value2) + Private Function TetraGet(values As Object(,), header As Dictionary(Of String, Integer), row As Integer, ParamArray names As String()) As String + For Each name As String In names + Dim col As Integer + If header.TryGetValue(name, col) Then + Dim v As String = TetraCell(values(row, col)) + If v <> "" Then Return v + End If + Next + Return "" End Function Private Function TetraKopf(kopf As Dictionary(Of String, String), name As String) As String @@ -1767,31 +1958,35 @@ Public Class cATLAS_EZA_IMPORT Private Function TetraTryDecimal(value As String, ByRef number As Decimal) As Boolean number = 0D If String.IsNullOrWhiteSpace(value) Then Return False - If Decimal.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, number) Then Return True - Return Decimal.TryParse(value, NumberStyles.Number, CultureInfo.GetCultureInfo("de-DE"), number) + Dim culture As CultureInfo = If(value.Contains(",") AndAlso Not value.Contains("."), CultureInfo.GetCultureInfo("de-DE"), CultureInfo.InvariantCulture) + If Decimal.TryParse(value, NumberStyles.Number, culture, number) Then Return True + Return Decimal.TryParse(value, NumberStyles.Number, If(culture.Name = "de-DE", CultureInfo.InvariantCulture, CultureInfo.GetCultureInfo("de-DE")), number) End Function - Private Sub TetraSetBestimmungsbundesland(declarantEORI As String) - If String.IsNullOrWhiteSpace(declarantEORI) Then Exit Sub + Private Function TetraPackageCount(value As String, ParamArray patterns As String()) As Integer + For Each p As String In patterns + Dim m = System.Text.RegularExpressions.Regex.Match(value, "(?i)(\d+)\s*" & p & "\b") + If m.Success Then + Dim n As Integer + If Integer.TryParse(m.Groups(1).Value, n) Then Return n + End If + Next + Return 0 + End Function + + Private Sub TetraSetBestimmungsbundesland(importerEORI As String) + If String.IsNullOrWhiteSpace(importerEORI) Then Exit Sub Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL - Try Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() - Dim sqlText As String = - "SELECT TOP 1 A.[LandKz], A.[PLZ] " & - "FROM [VERAG].[dbo].[Kunden] K " & - "INNER JOIN [VERAG].[dbo].[Adressen] A ON A.[AdressenNr] = K.[KundenNr] " & - "WHERE LTRIM(RTRIM(K.[EORITIN])) = @EORI" - + Dim sqlText As String = "SELECT TOP 1 A.[LandKz], A.[PLZ] FROM [VERAG].[dbo].[Kunden] K INNER JOIN [VERAG].[dbo].[Adressen] A ON A.[AdressenNr] = K.[KundenNr] WHERE LTRIM(RTRIM(K.[EORITIN])) = @EORI" Using cmd As New SqlCommand(sqlText, conn) - cmd.Parameters.Add("@EORI", SqlDbType.VarChar, 50).Value = declarantEORI.Trim() - + cmd.Parameters.Add("@EORI", SqlDbType.VarChar, 50).Value = importerEORI.Trim() Using dr As SqlDataReader = cmd.ExecuteReader() If dr.Read() Then Dim land As String = If(dr.IsDBNull(0), "", dr.GetValue(0).ToString().Trim().ToUpperInvariant()) Dim plz As String = If(dr.IsDBNull(1), "", dr.GetValue(1).ToString().Trim()) - - If (land = "DE" Or land = "D") AndAlso plz <> "" Then + If (land = "DE" OrElse land = "D") AndAlso plz <> "" Then EZA.eza_Bestimmungsbundesland = VERAG_PROG_ALLGEMEIN.cDEBundeslaenderPLZ.LOADBundeslandCode_ByPLZ(plz) ElseIf land <> "" AndAlso land <> "DE" AndAlso land <> "D" Then EZA.eza_Bestimmungsbundesland = 25 @@ -1805,6 +2000,9 @@ Public Class cATLAS_EZA_IMPORT End Try End Sub + Private Sub cbxGezeTranslate_CheckedChanged(sender As Object, e As EventArgs) Handles cbxGezeTranslate.CheckedChanged + + End Sub '================================================================================================================================ '================================================================================================================================ diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb index fcf0168b..71a82589 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb @@ -708,7 +708,16 @@ Public Class usrCntlATLAS_EZA EZA.eza_LetzteBearbeitung = Now EZA.eza_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB EZA.eza_firma = Me.FIRMA_DY + For Each p In EZA.eza_WARENPOS + Debug.WriteLine("VOR | Pos " & p.ezaWP_PositionsNummer & " | Ursprung: " & If(p.ezaWP_UrsprungslandCode, "NULL").ToString()) + Next + DAKOSY_Interface_SEND.loadInClass_VersandanmeldungEZA(EZA, Me, DY_ANM) + + For Each p In EZA.eza_WARENPOS + Debug.WriteLine("NACH | Pos " & p.ezaWP_PositionsNummer & " | Ursprung: " & If(p.ezaWP_UrsprungslandCode, "NULL").ToString()) + Next + If Not EZA.SAVE_ALL() Then Exit Sub Dim saveFile = "" If DAKOSY_Interface_SEND.generateVersandanmeldungEZA(EZA, saveFile, cboDakosyAction._value) Then diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Position.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Position.vb index 4536a4d5..074cfabf 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Position.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Position.vb @@ -33,6 +33,9 @@ Public Sub initSrch(Optional blockEvents As Boolean = False) + sbUrsprungsland.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200) + sbPraeferenzursprungsland.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200) + sbPkTyp.initSearchBox(Me.FindForm, " [Code] ,[Description] as Verpackungsart, Code + ' ' + Description as display FROM tbl_DY_ZollDE_C0017_PackstueckeVerpackungsarten", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "display", "FMZOLL", , 400, 200) sbUlArt.initSearchBox(Me.FindForm, " [Code] ,[Description] as Art, Code + ' ' + Description as display FROM tbl_DY_ZollDE_I0200_Unterlagearten", {"Description", "'%'+Code", "DocumentCode", "Division"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "display", "FMZOLL", , 400, 200) ' sbExportAusLand.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200) @@ -165,6 +168,10 @@ Me.cboBeguenstigung.changeItem(If(WARE.ezaWP_BeguenstigungBenatragtCode, "")) Me.sbUrsprungsland.SET_VALUE(If(WARE.ezaWP_UrsprungslandCode, "")) + + Debug.WriteLine("EZA Pos " & (id + 1) & + " | Modell: " & If(WARE.ezaWP_UrsprungslandCode, "NULL") & + " | Control: " & If(Me.sbUrsprungsland._value, "NULL")) Me.sbPraeferenzursprungsland.SET_VALUE(If(WARE.ezaWP_Praeferenzursprungsland, "")) @@ -272,63 +279,69 @@ End Sub Private Sub cboAngVerfahren_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboAngVerfahren.SelectedIndexChanged + Dim bisher As String = If(cboVorangegangenesVerfahren._value, "") + Dim verfahren As String = If(cboAngVerfahren._value, "") + cboVorangegangenesVerfahren.Items.Clear() cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", "")) - If cboAngVerfahren._value.StartsWith("01") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0100 - ", "00")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0171 - ", "71")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0178 - ", "78")) - End If + Select Case verfahren + Case "01" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0100 - ", "00")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0171 - ", "71")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0178 - ", "78")) - If cboAngVerfahren._value.StartsWith("40") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4000 - ", "00")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4010 - ", "10")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4031 - ", "31")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4051 - ", "51")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4054 - ", "54")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4071 - ", "71")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4078 - ", "78")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4090 - ", "90")) - End If + Case "40" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4000 - ", "00")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4010 - ", "10")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4031 - ", "31")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4051 - ", "51")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4054 - ", "54")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4071 - ", "71")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4078 - ", "78")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4090 - ", "90")) - If cboAngVerfahren._value.StartsWith("42") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4200 - ", "00")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4210 - ", "10")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4222 - ", "22")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4223 - ", "23")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4251 - ", "51")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4254 - ", "54")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4271 - ", "71")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4278 - ", "78")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4291 - ", "91")) - End If + Case "42" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4200 - ", "00")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4210 - ", "10")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4222 - ", "22")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4223 - ", "23")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4251 - ", "51")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4254 - ", "54")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4271 - ", "71")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4278 - ", "78")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4291 - ", "91")) - If cboAngVerfahren._value.StartsWith("45") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4500 - ", "00")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4571 - ", "71")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4578 - ", "78")) - End If + Case "45" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4500 - ", "00")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4571 - ", "71")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4578 - ", "78")) - If cboAngVerfahren._value.StartsWith("49") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4900 - ", "00")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4951 - ", "51")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4954 - ", "54")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4971 - ", "71")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4978 - ", "78")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4991 - ", "91")) - End If + Case "49" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4900 - ", "00")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4951 - ", "51")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4954 - ", "54")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4971 - ", "71")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4978 - ", "78")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4991 - ", "91")) - If cboAngVerfahren._value.StartsWith("61") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6121 - ", "21")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6123 - ", "23")) - End If + Case "61" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6121 - ", "21")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6123 - ", "23")) - If cboAngVerfahren._value.StartsWith("63") Then - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6321 - ", "21")) - cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6323 - ", "23")) - End If + Case "63" + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6321 - ", "21")) + cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6323 - ", "23")) + End Select + If bisher <> "" Then + For Each item As VERAG_PROG_ALLGEMEIN.MyListItem In cboVorangegangenesVerfahren.Items + If item.Value.ToString() = bisher Then + cboVorangegangenesVerfahren.changeItem(bisher) + Exit For + End If + Next + End If End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Positionen.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Positionen.vb index 4807f7e3..6855f620 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Positionen.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA_Positionen.vb @@ -272,7 +272,12 @@ POSITION.ezaWP_VerfahrensCodeVorangegangenesVerfahren = cProgramFunctions.isLeerNothing(P.cboVorangegangenesVerfahren._value) POSITION.ezaWP_BeguenstigungBenatragtCode = cProgramFunctions.isLeerNothing(P.cboBeguenstigung._value) - POSITION.ezaWP_UrsprungslandCode = cProgramFunctions.isLeerNothing(P.sbUrsprungsland._value) + Dim ursprung As String = If(P.sbUrsprungsland._value, "").ToString().Trim() + If ursprung <> "" Then POSITION.ezaWP_UrsprungslandCode = ursprung + Debug.WriteLine("GET Pos " & cnt & + " | Control: " & If(P.sbUrsprungsland._value, "NULL")) + + POSITION.ezaWP_Praeferenzursprungsland = cProgramFunctions.isLeerNothing(P.sbPraeferenzursprungsland._value) POSITION.ezaWP_UNTERLAGEN = New List(Of DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen) diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/cDakosyInterface_Send.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/cDakosyInterface_Send.vb index 4f00c5f0..43574c62 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/cDakosyInterface_Send.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/cDakosyInterface_Send.vb @@ -351,6 +351,7 @@ Public Class DAKOSY_Interface_SEND If cDY.eza_Rechnungspreis IsNot Nothing Then EA.KopfDaten.Rechnungspreis = cDY.eza_Rechnungspreis If cDY.eza_Rechnungswaehrung IsNot Nothing Then EA.KopfDaten.Rechnungswaehrung = cDY.eza_Rechnungswaehrung If If(cDY.eza_DV1Kz, False) Then + If EA.KopfDaten.DV1Angaben Is Nothing Then EA.KopfDaten.DV1Angaben = New FreierVerkehrAktVeredelUmwandlung_004.DV1AngabenAVUVTyp If cDY.eza_DV1Kz IsNot Nothing Then EA.KopfDaten.DV1Angaben.DV1Kz = CInt(Int(cDY.eza_DV1Kz)) If cDY.eza_DV1Vertretungsverhaeltnis IsNot Nothing Then EA.KopfDaten.DV1Angaben.Vertretungsverhaeltnis = cDY.eza_DV1Vertretungsverhaeltnis If cDY.eza_DV1FruehereEntscheidungen IsNot Nothing Then EA.KopfDaten.DV1Angaben.FruehereEntscheidungen = cDY.eza_DV1FruehereEntscheidungen @@ -365,6 +366,23 @@ Public Class DAKOSY_Interface_SEND If cDY.eza_DV1SpezielleVereinbarungUmstand IsNot Nothing Then EA.KopfDaten.DV1Angaben.SpezielleVereinbarungUmstand = cDY.eza_DV1SpezielleVereinbarungUmstand End If + 'DV1-Kostenverteilung: direkt unter KopfDaten, unabhängig vom DV1Kz. + 'Die Liste stammt aus dem Excel-Import bzw. der gespeicherten EZA. + If cDY.eza_DV1Kostenverteilung IsNot Nothing AndAlso cDY.eza_DV1Kostenverteilung.Count > 0 Then + EA.KopfDaten.DV1Kostenverteilung = New List(Of FreierVerkehrAktVeredelUmwandlung_004.DV1KostenverteilungAVUVTyp) + For Each k As cDakosy_EZA_DV1Kosten In cDY.eza_DV1Kostenverteilung + If k Is Nothing OrElse String.IsNullOrWhiteSpace(k.Kostenart) OrElse String.IsNullOrWhiteSpace(k.Kosten) Then Continue For + Dim dvKosten As New FreierVerkehrAktVeredelUmwandlung_004.DV1KostenverteilungAVUVTyp With { + .Kostenart = k.Kostenart.Trim(), + .Kosten = k.Kosten.Trim(), + .KostenWaehrung = If(k.KostenWaehrung, "").Trim(), + .WechselkursArt = If(k.WechselkursArt, "").Trim(), + .Verteilungsart = If(k.Verteilungsart, "").Trim(), + .Minimalbetrag = If(k.Minimalbetrag, "").Trim()} + EA.KopfDaten.DV1Kostenverteilung.Add(dvKosten) + Next + End If + If cDY.eza_UNTERLAGEN.Count > 0 Then EA.KopfDaten.Unterlage = New List(Of FreierVerkehrAktVeredelUmwandlung_004.UnterlageVzKopfAVUVTyp) @@ -524,7 +542,7 @@ Public Class DAKOSY_Interface_SEND If u.ezaWP_Rohmasse IsNot Nothing Then WP.Rohmasse = u.ezaWP_Rohmasse End If - If u.ezaWP_Eigenmasse IsNot Nothing Then WP.Eigenmasse = u.ezaWP_Eigenmasse + If u.ezaWP_Eigenmasse IsNot Nothing Then WP.Eigenmasse = CDec(u.ezaWP_Eigenmasse).ToString("F1", Globalization.CultureInfo.InvariantCulture) If u.ezaWP_AHStatMenge IsNot Nothing Then WP.AHStatMenge = u.ezaWP_AHStatMenge If u.ezaWP_AHStatMengeMasseinheit IsNot Nothing Then WP.AHStatMengeMasseinheit = u.ezaWP_AHStatMengeMasseinheit If u.ezaWP_AHStatMengeQualifier IsNot Nothing Then WP.AHStatMengeQualifier = u.ezaWP_AHStatMengeQualifier diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb index b368b3f9..304e5191 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb @@ -194,7 +194,12 @@ Public Class cRelayHub Dim token As String = cRelayHubToken.GetAccessToken(environment) http.AuthToken = token Dim apiUrl As String = GetApiUrl(environment) + Dim fullUrl As String = apiUrl & "/job-orders/init" Console.WriteLine("API_URL =: " & apiUrl) + Debug.WriteLine("RelayHub Environment: " & environment.ToString()) + Debug.WriteLine("RelayHub URL: " & fullUrl) + Debug.WriteLine("RelayHub OutputApplication: " & If(JsonConvert.DeserializeObject(Of cRelayHubJobOrderRequest)(jsonPayload).outputApplication, "")) + Return http.PostJson2(apiUrl & "/job-orders/init", "application/json", jsonPayload) End Function