Files
ADMIN/DAKOSY_Worker/cImporter_DakosyToVERAG.vb
2025-12-09 14:57:33 +01:00

257 lines
8.7 KiB
VB.net
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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