Imports System.Data.SqlClient Imports System.Reflection Imports java.lang Imports TELOTEC_Worker Imports VERAG_PROG_ALLGEMEIN Public Class cImporter_TelotecToVERAG Private SQL As New VERAG_PROG_ALLGEMEIN.SQL ' ===================================================================== ' MAIN ENTRY ' ===================================================================== Public Function ImportTelotec(CRN As String, Optional overwrite As Boolean = True, Optional freshInsert As Boolean = True) As Boolean If CRN Is Nothing Then Return False If CRN = "" Then Return False Dim cTelotec_Anmeldung = TELOTEC_Worker.cTelotec_Anmeldung.LOADByCRN(CRN, True) If cTelotec_Anmeldung IsNot Nothing Then Return ImportTelotec(cTelotec_Anmeldung, overwrite, freshInsert) Return False End Function Public Function ImportTelotec(tel As cTelotec_Anmeldung, Optional overwrite As Boolean = True, Optional freshinsert As Boolean = True) As Boolean Try If tel Is Nothing Then Return False If String.IsNullOrWhiteSpace(ToStringSafe(tel.Refs_LRN)) AndAlso String.IsNullOrWhiteSpace(ToStringSafe(tel.Refs_CRN)) Then Return False ' ================================================================ ' DUPLIKATSPRÜFUNG ' ================================================================ If Not overwrite Then If ExistsInVERAG(tel) Then Return False End If ' ================================================================ ' HEADER ' ================================================================ 'Dim mrnOrLrn As String = If(ToStringSafe(tel.Refs_CRN) Dim ZA As cVERAG_CustomsDeclarations = cVERAG_CustomsDeclarations.loadByMRN(tel.Refs_CRN, False) ZA.za_System = "TELOTEC" ZA.za_CustomsSystem = "ACCS" ZA.za_CustomsSystemCountry = "AT" ZA.za_REGIME = "IMPORT" ZA.za_IsExternalSystem = False ZA.za_IsFinalDeclaration = True ZA.za_Firma = ToStringSafe(tel.telanm_firma) ZA.za_Niederlassung = ToStringSafe(tel.telanm_niederlassung) ZA.za_MRN = ToStringSafe(tel.Refs_CRN) ZA.za_LRN = ToStringSafe(tel.Refs_LRN) VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetFirmaNiederlassung(ZA.za_Firma, ZA.za_Niederlassung, "", ZA.za_LRN) VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetAvisoId_SndId_ByLRN(ZA.za_LRN, ZA.za_AvisoId, ZA.za_SendungsId) If ZA.za_AvisoId Is Nothing AndAlso tel.telanm_AvisoId IsNot Nothing Then ZA.za_AvisoId = tel.telanm_AvisoId If ZA.za_SendungsId Is Nothing AndAlso tel.telanm_SendungsId IsNot Nothing Then ZA.za_SendungsId = tel.telanm_SendungsId ZA.za_RepresentationCode = ToStringSafe(tel.Declarant_DecRep) ZA.za_CustomsOffice = ToStringSafe(tel.Locs_CustPlc) ZA.za_EntryCustomsOffice = ToStringSafe(tel.EntryCO_Ref) ZA.za_DeclarationDate = ToNullableDate(tel.Hea_DecDT) ZA.za_AcceptanceDate = ToNullableDate(tel.Hea_AccDT) ZA.za_ReleaseDate = ToNullableDate(tel.Hea_DecDT) ZA.za_MainProcedure = ToStringSafe(tel.Hea_DecTy) ZA.za_MeansOfTransport_Vehicle = ToStringSafe(tel.Transp_DepIdnt) ZA.za_MeansOfTransport_Nationality = ToStringSafe(tel.Transp_DepNat) ZA.za_MeansOfTransport_Type = ToStringSafe(tel.Transp_DepTy) ZA.za_TransportModeBorder = ToStringSafe(tel.Transp_BordMo) ZA.za_TransportModeInland = ToStringSafe(tel.Transp_InMo) ZA.za_CountryDispatch = ToStringSafe(tel.Locs_Disp) ZA.za_CountryDestination = ToStringSafe(tel.Locs_Dest) ZA.za_CountryImport = "AT" ZA.za_WarehouseCode = ToStringSafe(tel.Locs_ArrLocAuth) ZA.za_InvoiceAmount = ToNullableDecimal(tel.ValData_InvVal) ZA.za_InvoiceCurrency = ToStringSafe(tel.ValData_InvCurr) ZA.za_Incoterms = ToStringSafe(tel.ValData_TermDelCd) ZA.za_IncotermsPlace = ToStringSafe(tel.ValData_TermDelPlc) ZA.za_Sachbearbeiter = tel.telanm_LetzteBearbeitung_SB ' ================================================================ ' PARTIES (direkt aus Header-Feldern) ' ================================================================ AddParty(ZA, "CONSIGNOR", tel.ConorTra_TIN, tel.ConorTra_Na, tel.ConorTra_Strt, tel.ConorTra_Pst, tel.ConorTra_Cty, tel.ConorTra_Ctry, tel.ConorTra_UID) AddParty(ZA, "CONSIGNEE", tel.ConeeTra_TIN, tel.ConeeTra_Na, tel.ConeeTra_Strt, tel.ConeeTra_Pst, tel.ConeeTra_Cty, tel.ConeeTra_Ctry, tel.ConeeTra_UID) AddParty(ZA, "EXPORTER", tel.ExpTra_TIN, tel.ExpTra_Na, tel.ExpTra_Strt, tel.ExpTra_Pst, tel.ExpTra_Cty, tel.ExpTra_Ctry, tel.ExpTra_UID) AddParty(ZA, "DECLARANT", tel.Declarant_TIN, tel.Declarant_Na, tel.Declarant_Strt, tel.Declarant_Pst, tel.Declarant_Cty, tel.Declarant_Ctry, tel.Declarant_UID) ' ================================================================ ' ABGABEN (HEADER) ' ================================================================ For Each a In tel.ABGABEN Dim d As New cVERAG_CustomsDeclarations_Duty With { .zaDuty_DutyType = ToStringSafe(a.Ty), .zaDuty_AmountEUR = ToNullableDecimal(a.Amnt), .zaDuty_Currency = "EUR" } ZA.Duties.Add(d) Next ' ================================================================ ' POSITIONEN ' ================================================================ For Each p In tel.POSITIONSDATEN Dim it As New cVERAG_CustomsDeclarations_Item it.zaItem_PosNo = p.Pos_ID it.zaItem_HSCode = ToStringSafe(p.Item_ComCd) it.zaItem_Description = ToStringSafe(p.Item_GdsDes) it.zaItem_GrossMass = ToNullableDecimal(p.Item_Gross) it.zaItem_NetMass = ToNullableDecimal(p.Item_Net) it.zaItem_OriginCountry = ToStringSafe(p.Item_Orig) it.zaItem_MainProcedure = ToStringSafe(p.Item_ProcCd) it.zaItem_AdditionalProc = ToStringSafe(p.Item_ProcAddCd) Dim colli = 0 Dim cnt = 0 For Each pk In p.PACKSTUECKE colli += pk.Pack_Nr If cnt = 0 Then it.zaItem_PackageMark = ToStringSafe(pk.Pack_Mark) it.zaItem_PackageType = ToStringSafe(pk.Pack_Kind) End If cnt += 1 Next it.zaItem_PackageColli = ToNullableDecimal(colli) it.zaItem_PreferenceCode = ToStringSafe(p.Item_Pref) it.zaItem_InvoiceValueEUR = ToNullableDecimal(p.Item_ItVal) it.zaItem_StatisticalValueEUR = ToNullableDecimal(p.Item_StatVal) '' ------------------------------------------------------------ '' POSITIONS-ABGABEN '' ------------------------------------------------------------ 'For Each pa In p.ABGABEN ' Dim d As New cVERAG_CustomsDeclarations_Duty With { ' .zaDuty_DutyType = ToStringSafe(pa.Ty), ' .zaDuty_AmountEUR = ToNullableDecimal(pa.Amnt), ' .zaDuty_Currency = ToStringSafe(pa.Curr) ' } ' ZA.Duties.Add(d) 'Next ' ------------------------------------------------------------ ' DOKUMENTE ' ------------------------------------------------------------ For Each doc In p.DOC_CERTS Dim dd As New cVERAG_CustomsDeclarations_Document With { .zaDoc_ItemId = Nothing, .zaDoc_Code = ToStringSafe(doc.DocCerts_DocCd), .zaDoc_Reference = ToStringSafe(doc.DocCerts_DRef), .zaDoc_Date = ToNullableDate(doc.DocCerts_IssD) } it.Documents.Add(dd) Next ZA.Items.Add(it) Next ' ================================================================ 'CBAM WARNING ' ================================================================ If freshinsert Then ZA.checkfreshCBAMWarning() End If ' ================================================================ ' ================================================================ ' SAVE ' ================================================================ Return ZA.SAVE() Catch ex As Exception cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodInfo.GetCurrentMethod.Name) Return False End Try End Function ' ===================================================================== ' DUPLIKATSPRÜFUNG ' ===================================================================== Private Function ExistsInVERAG(tel As cTelotec_Anmeldung) As Boolean Dim sql As String = "SELECT TOP 1 1 FROM tblVERAG_CustomsDeclarations " & "WHERE za_System='TELOTEC' AND (za_MRN=@mrn OR za_LRN=@lrn)" Dim p As New List(Of SQLVariable) From { New SQLVariable("mrn", tel.Refs_CRN), New SQLVariable("lrn", tel.Refs_LRN) } Dim dt = New SQL().loadDgvBySql_Param(sql, "VERAG", , p) Return dt IsNot Nothing AndAlso dt.Rows.Count > 0 End Function ' ===================================================================== ' PARTY HELPER ' ===================================================================== Private Sub AddParty(za As cVERAG_CustomsDeclarations, eori As String, role As String, name As Object, street As Object, plz As Object, city As Object, country As Object, uid As Object) If String.IsNullOrWhiteSpace(ToStringSafe(name)) Then Exit Sub Dim p As New cVERAG_CustomsDeclarations_Parties With { .zaParty_EORI = eori, .zaParty_Role = role, .zaParty_Name = ToStringSafe(name), .zaParty_Street = ToStringSafe(street), .zaParty_PostalCode = ToStringSafe(plz), .zaParty_City = ToStringSafe(city), .zaParty_Country = ToStringSafe(country), .zaParty_VATNumber = ToStringSafe(uid) } za.Parties.Add(p) End Sub ' ========================================================================= ' Small helpers (falls du sie schon hast, kannst du diese entfernen) ' ========================================================================= Private Function ToStringSafe(v As Object) As String If v Is Nothing Then Return Nothing Dim s As String = TryCast(v, String) If s IsNot Nothing Then Return s Return Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) End Function Private Function ToInt(v As Object) As Integer If v Is Nothing Then Return 0 Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim i As Integer If Integer.TryParse(s, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, i) Then Return i Return 0 End Function Private Function ToNullableDecimal(v As Object) As Decimal? If v Is Nothing Then Return Nothing Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim d As Decimal If Decimal.TryParse(s, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, d) Then Return d Return Nothing End Function Private Function ToNullableDate(v As Object) As Date? If v Is Nothing Then Return Nothing If TypeOf v Is Date Then Return CType(v, Date) Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim dt As Date If Date.TryParse(s, Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dt) Then Return dt Return Nothing End Function Private Function ToNullableBool(v As Object) As Boolean? If v Is Nothing Then Return Nothing If TypeOf v Is Boolean Then Return CType(v, Boolean) Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture).Trim().ToLowerInvariant() If s = "J" OrElse s = "1" OrElse s = "true" OrElse s = "y" OrElse s = "yes" Then Return True If s = "N" OrElse s = "0" OrElse s = "false" OrElse s = "n" OrElse s = "no" Then Return False Return Nothing End Function End Class