Imports System.Data.SqlClient Imports VERAG_PROG_ALLGEMEIN Public Class cImporter_DakosyToVERAG Private SQL As New VERAG_PROG_ALLGEMEIN.SQL ' ======================================================================== ' MAIN ENTRY ' ======================================================================== Public Function ImportDakosyEZA(eza As cDakosyEZA) As Boolean Try ' 1) Duplikatscheck auf Kopfebene (MRN / LRN + System) If ExistsInVERAG(eza) Then Console.WriteLine($"Skip import (duplicate): MRN={If(eza.eza_MRN, "")} / LRN={If(eza.eza_ANR, "")}") Return False End If ' 2) HEADER anlegen Dim zaId = Save_Header(eza) If zaId <= 0 Then Console.WriteLine("Error: Header save failed") Return False End If ' 3) ITEMS speichern (alle Positionen – kein eigener Duplikatscheck) Save_Items(eza, zaId) ' 4) DUTIES speichern (aus AUFSCHUB – kein eigener Duplikatscheck) Save_Duties(eza, zaId) ' 5) DOCS speichern (Unterlagen auf Kopfebene – kein eigener Duplikatscheck) Save_Docs(eza, zaId) Return True Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR( ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod().Name ) Return False End Try End Function ' ======================================================================== ' DUPLICATE CHECK : MRN / LRN + SYSTEM ' ======================================================================== Private Function ExistsInVERAG(eza As cDakosyEZA) As Boolean Dim sqlStr As String = "SELECT TOP 1 1 FROM tblVERAG_Zollanmeldung WHERE za_System = 'DAKOSY' AND ( (za_MRN = @mrn AND @mrn IS NOT NULL) OR (za_LRN = @lrn AND @lrn IS NOT NULL) )" Dim p As New List(Of SQLVariable) From { New SQLVariable("@mrn", If(eza.eza_MRN, DBNull.Value)), New SQLVariable("@lrn", If(eza.eza_ANR, DBNull.Value)) } Dim dt = SQL.loadDgvBySql_Param(sqlStr, "FMZOLL",, p) Return (dt IsNot Nothing AndAlso dt.Rows.Count > 0) End Function ' ======================================================================== ' HEADER SAVE ' ======================================================================== Private Function Save_Header(eza As cDakosyEZA) As Integer Dim list As New List(Of SQLVariable) ' PK wird von SQL doSQLVarListID gesetzt list.Add(New SQLVariable("za_Id", Nothing, , True, True)) list.Add(New SQLVariable("za_System", "DAKOSY")) list.Add(New SQLVariable("za_MRN", eza.eza_MRN)) list.Add(New SQLVariable("za_LRN", eza.eza_ObjectName)) list.Add(New SQLVariable("za_Firma", eza.eza_firma)) list.Add(New SQLVariable("za_Zollstelle", eza.eza_AdressierteZollstelle)) list.Add(New SQLVariable("za_Sachbearbeiter", eza.eza_Bearbeiter)) ' interne Zuordnungen list.Add(New SQLVariable("AvisoId", eza.eza_dyaAnmID)) list.Add(New SQLVariable("SendungsId", Nothing)) Dim cmd As String = "INSERT INTO tblVERAG_Zollanmeldung (za_System, za_MRN, za_LRN, za_Firma, za_Zollstelle, za_Sachbearbeiter, AvisoId, SendungsId) VALUES (@za_System, @za_MRN, @za_LRN, @za_Firma, @za_Zollstelle, @za_Sachbearbeiter, @AvisoId, @SendungsId); SELECT SCOPE_IDENTITY()" Dim newId = SQL.doSQLVarListID(0, cmd, "FMZOLL", , list) Return CInt(newId) End Function ' ======================================================================== ' ITEMS SAVE (alle Positionen, kein Duplikatscheck) ' ======================================================================== Private Sub Save_Items(eza As cDakosyEZA, zaId As Integer) If eza.eza_WARENPOS Is Nothing Then Exit Sub For Each pos As cDakosy_EZA_Warenposition In eza.eza_WARENPOS Dim list As New List(Of SQLVariable) list.Add(New SQLVariable("za_Id", zaId)) ' PosNr / Artikel / HS list.Add(New SQLVariable("zaItem_PosNo", pos.ezaWP_PositionsNummer)) list.Add(New SQLVariable("zaItem_ArticleCode", pos.ezaWP_Artikelnummer)) list.Add(New SQLVariable("zaItem_HSCode", pos.ezaWP_WarennummerEZT)) ' Ursprung / Origin list.Add(New SQLVariable("zaItem_OriginCountry", pos.ezaWP_UrsprungslandCode)) ' Zollwert / Statistikwert list.Add(New SQLVariable("zaItem_CustomsValue", pos.ezaWP_Zollwert)) list.Add(New SQLVariable("zaItem_StatisticalValue", pos.ezaWP_AHStatWert)) ' Begünstigungscode (Dakosy: ezaWP_BeguenstigungBenatragtCode) list.Add(New SQLVariable("zaItem_BeguenstigungCode", pos.ezaWP_BeguenstigungBenatragtCode)) Dim cmd As String = "INSERT INTO tblVERAG_Zollanmeldung_Items (za_Id, zaItem_PosNo, zaItem_ArticleCode, zaItem_HSCode, zaItem_OriginCountry, zaItem_CustomsValue, zaItem_StatisticalValue, zaItem_BeguenstigungCode) VALUES (@za_Id, @zaItem_PosNo, @zaItem_ArticleCode, @zaItem_HSCode, @zaItem_OriginCountry, @zaItem_CustomsValue, @zaItem_StatisticalValue, @zaItem_BeguenstigungCode)" SQL.doSQLVarList(cmd, "FMZOLL", , list) Next End Sub ' ======================================================================== ' DUTIES SAVE (alle AUFSCHUB-Einträge, kein Duplikatscheck) ' ======================================================================== Private Sub Save_Duties(eza As cDakosyEZA, zaId As Integer) If eza.eza_AUFSCHUB Is Nothing Then Exit Sub For Each duty As cDakosy_EZA_Aufschub In eza.eza_AUFSCHUB Dim list As New List(Of SQLVariable) list.Add(New SQLVariable("za_Id", zaId)) ' Dakosy-Aufschub Felder: ' ezaAfb_AbgabeArt -> DutyType ' ezaAfb_Abgabenbetrag -> Amount / AmountEUR list.Add(New SQLVariable("DutyType", duty.ezaAfb_AbgabeArt)) list.Add(New SQLVariable("Amount", duty.ezaAfb_Abgabenbetrag)) ' In der Aufschubtabelle gibt es keine Fremdwährungsspalte, ' i.d.R. ist der Betrag EUR -> Currency/AmountEUR entsprechend setzen list.Add(New SQLVariable("Currency", "EUR")) list.Add(New SQLVariable("AmountEUR", duty.ezaAfb_Abgabenbetrag)) Dim cmd As String = "INSERT INTO tblVERAG_Zollanmeldung_Duties (za_Id, DutyType, Amount, Currency, AmountEUR) VALUES (@za_Id, @DutyType, @Amount, @Currency, @AmountEUR)" SQL.doSQLVarList(cmd, "FMZOLL", , list) Next End Sub ' ======================================================================== ' DOCS SAVE (alle Unterlagen auf Kopfebene, kein Duplikatscheck) ' ======================================================================== Private Sub Save_Docs(eza As cDakosyEZA, zaId As Integer) If eza.eza_UNTERLAGEN Is Nothing Then Exit Sub For Each d As cDakosy_EZA_Unterlagen In eza.eza_UNTERLAGEN Dim list As New List(Of SQLVariable) list.Add(New SQLVariable("za_Id", zaId)) list.Add(New SQLVariable("Level", "H")) ' H = Header list.Add(New SQLVariable("DocType", d.ezaUl_Art)) list.Add(New SQLVariable("DocNumber", d.ezaUl_Nummer)) Dim cmd As String = "INSERT INTO tblVERAG_Zollanmeldung_Docs (za_Id, Level, DocType, DocNumber) VALUES (@za_Id, @Level, @DocType, @DocNumber)" SQL.doSQLVarList(cmd, "FMZOLL", , list) Next End Sub End Class