diff --git a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb index c05921b..20b4171 100644 --- a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb +++ b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb @@ -1829,6 +1829,7 @@ Public Class cDakosy_EZA_Warenposition Property ezaWP_AbgabensteuerungKz As Object = Nothing ' VARCHAR (2) NULL, Property ezaWP_EUCode As Object = Nothing ' VARCHAR (3) NULL, Property ezaWP_UrsprungslandCode As Object = Nothing ' VARCHAR (2) NULL, + Property ezaWP_Praeferenzursprungsland As Object = Nothing ' VARCHAR (2) NULL, Property ezaWP_Rohmasse As Object = Nothing ' DECIMAL (11, 1) NULL, Property ezaWP_Eigenmasse As Object = Nothing ' DECIMAL (11, 1) NULL, Property ezaWP_AHStatMenge As Object = Nothing ' DECIMAL (15, 3) NULL, @@ -1976,6 +1977,7 @@ Public Class cDakosy_EZA_Warenposition list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_AbgabensteuerungKz", ezaWP_AbgabensteuerungKz)) ' VARCHAR (2) NULL, list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_EUCode", ezaWP_EUCode)) ' VARCHAR (3) NULL, list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_UrsprungslandCode", ezaWP_UrsprungslandCode)) ' VARCHAR (2) NULL, + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Praeferenzursprungsland", ezaWP_Praeferenzursprungsland)) ' VARCHAR (2) NULL, list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Rohmasse", ezaWP_Rohmasse)) ' DECIMAL (11, 1) NULL, list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Eigenmasse", ezaWP_Eigenmasse)) ' DECIMAL (11, 1) NULL, list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_AHStatMenge", ezaWP_AHStatMenge)) ' DECIMAL (15, 3) NULL, diff --git a/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj b/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj index 660fe90..f8c5c54 100644 --- a/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj +++ b/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj @@ -72,6 +72,7 @@ + diff --git a/DAKOSY_Worker/cImporter_DakosyToVERAG.vb b/DAKOSY_Worker/cImporter_DakosyToVERAG.vb new file mode 100644 index 0000000..0a16b1e --- /dev/null +++ b/DAKOSY_Worker/cImporter_DakosyToVERAG.vb @@ -0,0 +1,257 @@ +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 \ No newline at end of file