diff --git a/DAKOSY_Worker/DAKOSY/ATLAS/EXG/cDakosyEXG.vb b/DAKOSY_Worker/DAKOSY/ATLAS/EXG/cDakosyEXG.vb index 87e0ee5..3a37592 100644 --- a/DAKOSY_Worker/DAKOSY/ATLAS/EXG/cDakosyEXG.vb +++ b/DAKOSY_Worker/DAKOSY/ATLAS/EXG/cDakosyEXG.vb @@ -858,7 +858,10 @@ Public Class cDakosyEXG 'dy_Status = status Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL - Return SQL.doSQLVarList(" UPDATE [tblDakosy_EXG] SET [exg_AutoFill_DyId]=@dyId WHERE exg_Id=@exg_Id ", "FMZOLL", , list) + Return SQL.doSQLVarList("UPDATE tblDakosy_EXG SET exg_AutoFill_DyId=@dyId, + exg_AutoFill_DyId_Complete=0 + WHERE exg_Id=@exg_Id", + "FMZOLL", , list) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) @@ -886,23 +889,27 @@ Public Class cDakosyEXG End Function Shared Function isFillNCTS_ID_ALLCompleted(dyId As Integer) As Boolean - If dyId > 0 Then - Try - Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + If dyId <= 0 Then Return False - Dim cnt = SQL.getValueTxtBySql(" SELECT COUNT(*) FROM [tblDakosy_EXG] where [exg_AutoFill_DyId] ='" & dyId & "' and exg_AutoFill_DyId=1 AND [exg_AutoFill_DyId_Complete]=0 ", "FMZOLL", ,, -1) + Try + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Dim sqlText = "SELECT + COUNT(*) AS Gesamt, + SUM(CASE + WHEN ISNULL(exg_AutoFill_DyId_Complete, 0) = 0 + THEN 1 ELSE 0 + END) AS Offen + FROM tblDakosy_EXG + WHERE exg_AutoFill_DyId= " & dyId & "" - If cnt = 0 Then - Return True - End If - Catch ex As Exception - VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) - End Try - End If - Return False + Dim cnt = SQL.getValueTxtBySql(sqlText, "FMZOLL", ,, -1) + Return Convert.ToInt32(cnt) = 0 + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + Return False + End Try End Function - 'Public Function LOADByBezugsNr(exg_ObjectName As String, loadALL As Boolean) As Boolean ' Try ' LOADByBezugsNr = False @@ -945,7 +952,7 @@ Public Class cDakosyEXG Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() ' Using cmd As New SqlCommand("SELECT TOP 1 * FROM (SELECT * FROM tblDakosy_EXGOut WHERE exg_ObjectName LIKE @bezugsNr " & If(checkValidStatus, " AND exg_status BETWEEN 40 and 90 ", "") & " ) AS T order by exg_status desc, (SELECT top 1 dySt_ts FROM [tblDakosy_Statusmeldungen] WHERE exg_dyaAnmID=exg_dyaAnmID order by dySt_ts desc) desc,exg_LetzteBearbeitung desc ", conn) 'Using cmd As New SqlCommand("SELECT TOP 1 * FROM tblDakosy_EXGOut WHERE exg_ObjectName LIKE @bezugsNr " & If(checkValidStatus, " AND exg_status BETWEEN 40 and 90 ", "") & " order by exg_status desc, (SELECT top 1 dySt_ts FROM [tblDakosy_Statusmeldungen] WHERE exg_dyaAnmID=exg_dyaAnmID order by dySt_ts desc) desc,exg_LetzteBearbeitung desc ", conn) - Using cmd As New SqlCommand("SELECT TOP 1 * FROM tblDakosy_EXG WHERE exg_ObjectName LIKE @bezugsNr order by exg_LetzteBearbeitung desc", conn) + Using cmd As New SqlCommand("SELECT TOP 1 * FROM tblDakosy_EXG WHERE exg_ObjectName = @bezugsNr ORDER BY exg_LetzteBearbeitung DESC", conn) 'MsgBox("SELECT TOP 1 * FROM tblDakosy_EXGOut WHERE exg_ObjectName LIKE " & bezugsNr & " " & If(checkValidStatus, " AND exg_status BETWEEN 40 and 90 ", "") & " order by exg_status desc, (SELECT top 1 dySt_ts FROM [tblDakosy_Statusmeldungen] inner join tblDakosy_Zollanmeldungen on dy_id = dySt_dyId WHERE exg_dyaAnmID=dy_id order by dySt_ts desc) desc,exg_LetzteBearbeitung desc ") cmd.Parameters.AddWithValue("@bezugsNr", bezugsNr) Dim dr = cmd.ExecuteReader() diff --git a/DAKOSY_Worker/DAKOSY/ATLAS/NCTS/cDakosyNCTSOut004.vb b/DAKOSY_Worker/DAKOSY/ATLAS/NCTS/cDakosyNCTSOut004.vb index 234efcb..5e4d639 100644 --- a/DAKOSY_Worker/DAKOSY/ATLAS/NCTS/cDakosyNCTSOut004.vb +++ b/DAKOSY_Worker/DAKOSY/ATLAS/NCTS/cDakosyNCTSOut004.vb @@ -1603,10 +1603,11 @@ Public Class cDakosyNCTSOut004 End Function - Shared Function generateVersandanmeldungNCTSDE_004(cDY As cDakosyNCTSOut004, ByRef saveFile As String, DY_ACTION As String, StartupPath As String, Art As String, Optional DY_Mitarbeiter As String = "") As Boolean Try + '5601/26019055_EXG223 + Dim Interface_VERSION = "004" Dim ObjectAktion = DY_ACTION @@ -1614,17 +1615,17 @@ Public Class cDakosyNCTSOut004 'Transaktion: XML.Transaktion = New VersandanmeldungNCTSDE_004.TransaktionNCTSTyp - XML.Transaktion.IOPartner = cDakosyFunftions.getIOPartner(cDY.ncts_firma, Art) 'If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "VERA", "VERG") + XML.Transaktion.IOPartner = "UNAT" ' cDakosyFunftions.getIOPartner(cDY.ncts_firma, Art) 'If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "VERA", "VERG") XML.Transaktion.IODatumZeit = Now XML.Transaktion.IOReferenz = cDY.ncts_Trans_Referenz - If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then XML.Transaktion.IODivision3 = cDakosyFunftions.getDivision(cDY.ncts_firma, Art) '"SUW" + 'If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then XML.Transaktion.IODivision3 = cDakosyFunftions.getDivision(cDY.ncts_firma, Art) '"SUW" XML.Transaktion.Version = Interface_VERSION ' XML.Transaktion.IODivision3 = "DUR" XML.EinzelVersandanmeldung = New VersandanmeldungNCTSDE_004.EinzelVersandanmeldungTyp 'ObjektIdentifizierung: - XML.EinzelVersandanmeldung.ObjektIdentifizierung.NameAbsendendesSystem = "VERAG_ZOLL" XML.EinzelVersandanmeldung.ObjektIdentifizierung = New VersandanmeldungNCTSDE_004.ObjektIdentifizierungVATyp + XML.EinzelVersandanmeldung.ObjektIdentifizierung.NameAbsendendesSystem = "AVISO" XML.EinzelVersandanmeldung.ObjektIdentifizierung.ObjektName = cDY.ncts_ObjectName If cDY.ncts_ObjectAlias IsNot Nothing Then XML.EinzelVersandanmeldung.ObjektIdentifizierung.ObjektAliasname = cDY.ncts_ObjectAlias @@ -1640,8 +1641,6 @@ Public Class cDakosyNCTSOut004 'TransitOperation: XML.EinzelVersandanmeldung.TransitOperation = New VersandanmeldungNCTSDE_004.TransitOperationType - If cDY.ncts_CountryOfDispatch IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.CountryOfDispatch = cDY.ncts_CountryOfDispatch - If cDY.ncts_CountryOfDestination IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.CountryOfDestination = cDY.ncts_CountryOfDestination If cDY.ncts_TIRCarnetNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.TIRCarnetNumber = cDY.ncts_TIRCarnetNumber If cDY.ncts_ReductedDatasetIndicator IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.ReducedDatasetIndicator = CInt(Int(cDY.ncts_ReductedDatasetIndicator)) @@ -1670,11 +1669,46 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_CustomsOfficeOfExitForTransitDeclared IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.CustomsOfficeOfExitForTransitDeclared = cDY.ncts_CustomsOfficeOfExitForTransitDeclared If cDY.ncts_LimitDate IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.LimitDate = cDY.ncts_LimitDate If cDY.ncts_TransitDeclarationType IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.TransitDeclarationType = cDY.ncts_TransitDeclarationType - If cDY.ncts_Declarationtype IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.DeclarationType = cDY.ncts_Declarationtype If cDY.ncts_GrossMass IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.GrossMass = cDY.ncts_GrossMass If cDY.ncts_BindingItinerary IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.BindingItinerary = cDY.ncts_BindingItinerary + ' If cDY.ncts_Declarationtype IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.DeclarationType = cDY.ncts_Declarationtype + Dim declType As String = "" + Dim hasItemTypes As Boolean = False + Dim hasMissingTypes As Boolean = False + + If cDY.ncts_HOUSE_CONSIGNMENT IsNot Nothing Then + declType = GetDeclarationType(cDY.ncts_HOUSE_CONSIGNMENT) + + For Each hc In cDY.ncts_HOUSE_CONSIGNMENT + For Each item In hc.nctsWP_CONSIGNMENT_ITEM + If String.IsNullOrWhiteSpace(Convert.ToString(item.nctsHCCI_DeclarationType)) Then + hasMissingTypes = True + Else + hasItemTypes = True + End If + Next + Next + End If + + If hasItemTypes AndAlso hasMissingTypes Then + Throw New Exception("NCTS: Positions-Verfahrensarten sind nur teilweise befüllt.") + End If + + If declType = "" Then + If hasItemTypes Then + declType = "T-" + Else + declType = Convert.ToString(cDY.ncts_Declarationtype).Trim() + End If + End If + + If Not String.IsNullOrWhiteSpace(declType) Then + XML.EinzelVersandanmeldung.TransitOperation.DeclarationType = declType + End If + + 'TRANSPORTEQUIPMENT: If cDY.ncts_TRANSPORTEQUIPMENT.Count > 0 Then @@ -1809,7 +1843,7 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_Consignor_Country IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.Country = cDY.ncts_Consignor_Country If cDY.ncts_Consignor_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If cDY.ncts_Consignor_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.ContactPerson.Name = cDY.ncts_LocationOfGoods_ContactPerson_Name + If cDY.ncts_Consignor_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.ContactPerson.Name = cDY.ncts_Consignor_ContactPerson_Name If cDY.ncts_Consignor_ContactPerson_PhoneNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.ContactPerson.PhoneNumber = cDY.ncts_Consignor_ContactPerson_PhoneNumber If cDY.ncts_Consignor_ContactPerson_EMailAddress IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignor.ContactPerson.EMailAddress = cDY.ncts_Consignor_ContactPerson_EMailAddress End If @@ -1827,7 +1861,7 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_Consignee_Country IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.Country = cDY.ncts_Consignee_Country If cDY.ncts_Consignee_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If cDY.ncts_Consignee_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.ContactPerson.Name = cDY.ncts_LocationOfGoods_ContactPerson_Name + If cDY.ncts_Consignee_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.ContactPerson.Name = cDY.ncts_Consignee_ContactPerson_Name If cDY.ncts_Consignee_ContactPerson_PhoneNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.ContactPerson.PhoneNumber = cDY.ncts_Consignee_ContactPerson_PhoneNumber If cDY.ncts_Consignee_ContactPerson_EMailAddress IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Consignee.ContactPerson.EMailAddress = cDY.ncts_Consignee_ContactPerson_EMailAddress End If @@ -1845,13 +1879,28 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_HolderOfTheTransitProcedure_TIRHolderIdentificationNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.TIRHolderIdentificationNumber = cDY.ncts_HolderOfTheTransitProcedure_TIRHolderIdentificationNumber If cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.ContactPerson.Name = cDY.ncts_LocationOfGoods_ContactPerson_Name + If cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.ContactPerson.Name = cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name If cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_PhoneNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.ContactPerson.PhoneNumber = cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_PhoneNumber If cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_EMailAddress IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure.ContactPerson.EMailAddress = cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_EMailAddress End If End If + If XML.Transaktion.IOPartner = "UNAT" Then + + 'Ansprechpartner Inhaber Versandverfahren (Inhaber selbst bleibt unverändert) + If XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure IsNot Nothing Then + Dim holder = XML.EinzelVersandanmeldung.TransitOperation.HolderOfTheTransitProcedure + + If holder.ContactPerson Is Nothing Then holder.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType + + holder.ContactPerson.Name = If(String.IsNullOrWhiteSpace(cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name), VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.Fullname, cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_Name) + holder.ContactPerson.PhoneNumber = If(String.IsNullOrWhiteSpace(cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_PhoneNumber), getTelefon(), cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_PhoneNumber) + holder.ContactPerson.EMailAddress = If(String.IsNullOrWhiteSpace(cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_EMailAddress), If(String.IsNullOrWhiteSpace(VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_email), getDefaultMail_FIRMA(), VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_email), cDY.ncts_HolderOfTheTransitProcedure_ContactPerson_EMailAddress) + End If + + End If + 'Vertreter Inhaber Versandverfahren If cDY.ncts_Representative_IdentificationNumber IsNot Nothing Then @@ -1859,7 +1908,7 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_Representative_IdentificationNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.IdentificationNumber = cDY.ncts_Representative_IdentificationNumber If cDY.ncts_Representative_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If cDY.ncts_Representative_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.ContactPerson.Name = cDY.ncts_LocationOfGoods_ContactPerson_Name + If cDY.ncts_Representative_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.ContactPerson.Name = cDY.ncts_Representative_ContactPerson_Name If cDY.ncts_Representative_ContactPerson_PhoneNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.ContactPerson.PhoneNumber = cDY.ncts_Representative_ContactPerson_PhoneNumber If cDY.ncts_Representative_ContactPerson_EMailAddress IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Representative.ContactPerson.EMailAddress = cDY.ncts_Representative_ContactPerson_EMailAddress End If @@ -1873,7 +1922,7 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_Carrier_IdentificationNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.IdentificationNumber = cDY.ncts_Carrier_IdentificationNumber If cDY.ncts_Carrier_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If cDY.ncts_Carrier_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.ContactPerson.Name = cDY.ncts_LocationOfGoods_ContactPerson_Name + If cDY.ncts_Carrier_ContactPerson_Name IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.ContactPerson.Name = cDY.ncts_Carrier_ContactPerson_Name If cDY.ncts_Carrier_ContactPerson_PhoneNumber IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.ContactPerson.PhoneNumber = cDY.ncts_Carrier_ContactPerson_PhoneNumber If cDY.ncts_Carrier_ContactPerson_EMailAddress IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.Carrier.ContactPerson.EMailAddress = cDY.ncts_Carrier_ContactPerson_EMailAddress End If @@ -1882,10 +1931,10 @@ Public Class cDakosyNCTSOut004 'Zus.Lieferkettenbeteiligter 1 - If cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber IsNot Nothing Then + If cDY.ncts_AdditionalSupplyChainActor_1_IdentificationNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.AdditionalSupplyChainActorVAType - If cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber IsNot Nothing Then TM.IdentificationNumber = cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber - If cDY.ncts_AdditionalSupplyChainActor_2_Role IsNot Nothing Then TM.Role = cDY.ncts_AdditionalSupplyChainActor_2_Role + If cDY.ncts_AdditionalSupplyChainActor_1_IdentificationNumber IsNot Nothing Then TM.IdentificationNumber = cDY.ncts_AdditionalSupplyChainActor_1_IdentificationNumber + If cDY.ncts_AdditionalSupplyChainActor_1_Role IsNot Nothing Then TM.Role = cDY.ncts_AdditionalSupplyChainActor_1_Role XML.EinzelVersandanmeldung.TransitOperation.AdditionalSupplyChainActor.Add(TM) End If 'Zus.Lieferkettenbeteiligter 2 @@ -1896,10 +1945,10 @@ Public Class cDakosyNCTSOut004 XML.EinzelVersandanmeldung.TransitOperation.AdditionalSupplyChainActor.Add(TM) End If 'Zus.Lieferkettenbeteiligter 3 - If cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber IsNot Nothing Then + If cDY.ncts_AdditionalSupplyChainActor_3_IdentificationNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.AdditionalSupplyChainActorVAType - If cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber IsNot Nothing Then TM.IdentificationNumber = cDY.ncts_AdditionalSupplyChainActor_2_IdentificationNumber - If cDY.ncts_AdditionalSupplyChainActor_2_Role IsNot Nothing Then TM.Role = cDY.ncts_AdditionalSupplyChainActor_2_Role + If cDY.ncts_AdditionalSupplyChainActor_3_IdentificationNumber IsNot Nothing Then TM.IdentificationNumber = cDY.ncts_AdditionalSupplyChainActor_3_IdentificationNumber + If cDY.ncts_AdditionalSupplyChainActor_3_Role IsNot Nothing Then TM.Role = cDY.ncts_AdditionalSupplyChainActor_3_Role XML.EinzelVersandanmeldung.TransitOperation.AdditionalSupplyChainActor.Add(TM) End If @@ -1914,7 +1963,9 @@ Public Class cDakosyNCTSOut004 If cDY.ncts_PlaceOfLoading_Country IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.PlaceOfLoading.Country = cDY.ncts_PlaceOfLoading_Country If cDY.ncts_PlaceOfUnLoading_Location IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.PlaceOfUnloading.Location = cDY.ncts_PlaceOfUnLoading_Location If cDY.ncts_PlaceOfUnLoading_Country IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.PlaceOfUnloading.Country = cDY.ncts_PlaceOfUnLoading_Country - If cDY.ncts_ObjectName IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.ReferenceNumberUCR = cDY.ncts_ObjectName + If String.IsNullOrWhiteSpace(cDY.ncts_ReferenceNumberUCR) AndAlso Not String.IsNullOrWhiteSpace(cDY.ncts_ObjectName) Then + XML.EinzelVersandanmeldung.TransitOperation.ReferenceNumberUCR = cDY.ncts_ObjectName + End If If cDY.ncts_TransportCharges IsNot Nothing Then XML.EinzelVersandanmeldung.TransitOperation.TransportCharges = cDY.ncts_TransportCharges @@ -2275,9 +2326,36 @@ Public Class cDakosyNCTSOut004 - - - + 'Länder je Position ermitteln, mit Fallback auf HC und Kopf + Dim allDispatch As New List(Of String) + Dim allDestination As New List(Of String) + If cDY.ncts_HOUSE_CONSIGNMENT IsNot Nothing Then + For Each p In cDY.ncts_HOUSE_CONSIGNMENT + If p.nctsWP_CONSIGNMENT_ITEM IsNot Nothing AndAlso p.nctsWP_CONSIGNMENT_ITEM.Count > 0 Then + For Each pp In p.nctsWP_CONSIGNMENT_ITEM + Dim d As String = Convert.ToString(pp.nctsHCCI_CountryOfDispatch).Trim().ToUpperInvariant() + Dim z As String = Convert.ToString(pp.nctsHCCI_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + allDispatch.Add(d) + allDestination.Add(z) + Next + Else + Dim d As String = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + Dim z As String = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + allDispatch.Add(d) + allDestination.Add(z) + End If + Next + End If + Dim sameDispatchCountry As Boolean = allDispatch.Count > 0 AndAlso allDispatch.All(Function(x) x <> "" AndAlso x = allDispatch(0)) + Dim sameDestinationCountry As Boolean = allDestination.Count > 0 AndAlso allDestination.All(Function(x) x <> "" AndAlso x = allDestination(0)) + If sameDispatchCountry Then XML.EinzelVersandanmeldung.TransitOperation.CountryOfDispatch = allDispatch(0) + If sameDestinationCountry Then XML.EinzelVersandanmeldung.TransitOperation.CountryOfDestination = allDestination(0) 'Warenposition: @@ -2288,11 +2366,140 @@ Public Class cDakosyNCTSOut004 For Each p In cDY.ncts_HOUSE_CONSIGNMENT Dim HC = New VersandanmeldungNCTSDE_004.HouseConsignmentVAType - If p.nctsHC_CountryOfDispatch IsNot Nothing Then HC.CountryOfDispatch = p.nctsHC_CountryOfDispatch - If p.nctsHC_CountryOfDestination IsNot Nothing Then HC.CountryOfDestination = p.nctsHC_CountryOfDestination + 'HC-Länder nur, wenn nicht bereits am Kopf und innerhalb der HC einheitlich + Dim hcDispatch As New List(Of String) + Dim hcDestination As New List(Of String) + If p.nctsWP_CONSIGNMENT_ITEM IsNot Nothing Then + For Each pp In p.nctsWP_CONSIGNMENT_ITEM + Dim d As String = Convert.ToString(pp.nctsHCCI_CountryOfDispatch).Trim().ToUpperInvariant() + Dim z As String = Convert.ToString(pp.nctsHCCI_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + hcDispatch.Add(d) + hcDestination.Add(z) + Next + End If + If hcDispatch.Count = 0 Then + Dim d As String = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + Dim z As String = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + hcDispatch.Add(d) + hcDestination.Add(z) + End If + Dim sameHCDispatch As Boolean = hcDispatch.All(Function(x) x <> "" AndAlso x = hcDispatch(0)) + Dim sameHCDestination As Boolean = hcDestination.All(Function(x) x <> "" AndAlso x = hcDestination(0)) + If Not sameDispatchCountry AndAlso sameHCDispatch Then HC.CountryOfDispatch = hcDispatch(0) + If Not sameDestinationCountry AndAlso sameHCDestination Then HC.CountryOfDestination = hcDestination(0) + + If p.nctsHC_HouseConsignMentReference IsNot Nothing Then HC.HouseConsignmentReference = p.nctsHC_HouseConsignMentReference + + If p.nctsHC_GrossMass IsNot Nothing Then HC.GrossMass = p.nctsHC_GrossMass + If p.nctsHC_ReferenceNumberUCR IsNot Nothing Then HC.ReferenceNumberUCR = p.nctsHC_ReferenceNumberUCR + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignor_IdentificationNumber) OrElse Not String.IsNullOrWhiteSpace(p.nctsHC_Consignor_Name) Then + HC.Consignor = New VersandanmeldungNCTSDE_004.AddressVA1Type + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignor_IdentificationNumber) Then + HC.Consignor.IdentificationNumber = p.nctsHC_Consignor_IdentificationNumber + HC.Consignor.SubsidiaryNumber = If(String.IsNullOrWhiteSpace(p.nctsHC_Consignor_SubsidiaryNumber), "0000", p.nctsHC_Consignor_SubsidiaryNumber) + End If + If p.nctsHC_Consignor_Name IsNot Nothing Then HC.Consignor.Name = p.nctsHC_Consignor_Name + If p.nctsHC_Consignor_Postcode IsNot Nothing Then HC.Consignor.Postcode = p.nctsHC_Consignor_Postcode + If p.nctsHC_Consignor_StreetNumber IsNot Nothing Then HC.Consignor.StreetAndNumber = p.nctsHC_Consignor_StreetNumber + If p.nctsHC_Consignor_City IsNot Nothing Then HC.Consignor.City = p.nctsHC_Consignor_City + If p.nctsHC_Consignor_Country IsNot Nothing Then HC.Consignor.Country = p.nctsHC_Consignor_Country + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignor_ContactPerson_Name) Then + HC.Consignor.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType + If p.nctsHC_Consignor_ContactPerson_Name IsNot Nothing Then HC.Consignor.ContactPerson.Name = p.nctsHC_Consignor_ContactPerson_Name + If p.nctsHC_Consignor_ContactPerson_PhoneNumber IsNot Nothing Then HC.Consignor.ContactPerson.PhoneNumber = p.nctsHC_Consignor_ContactPerson_PhoneNumber + If p.nctsHC_Consignor_ContactPerson_EMailAddress IsNot Nothing Then HC.Consignor.ContactPerson.EMailAddress = p.nctsHC_Consignor_ContactPerson_EMailAddress + End If + End If + + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignee_IdentificationNumber) OrElse Not String.IsNullOrWhiteSpace(p.nctsHC_Consignee_Name) Then + HC.Consignee = New VersandanmeldungNCTSDE_004.AddressVA1Type + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignee_IdentificationNumber) Then + HC.Consignee.IdentificationNumber = p.nctsHC_Consignee_IdentificationNumber + HC.Consignee.SubsidiaryNumber = If(String.IsNullOrWhiteSpace(p.nctsHC_Consignee_SubsidiaryNumber), "0000", p.nctsHC_Consignee_SubsidiaryNumber) + End If + If p.nctsHC_Consignee_Name IsNot Nothing Then HC.Consignee.Name = p.nctsHC_Consignee_Name + If p.nctsHC_Consignee_Postcode IsNot Nothing Then HC.Consignee.Postcode = p.nctsHC_Consignee_Postcode + If p.nctsHC_Consignee_StreetNumber IsNot Nothing Then HC.Consignee.StreetAndNumber = p.nctsHC_Consignee_StreetNumber + If p.nctsHC_Consignee_City IsNot Nothing Then HC.Consignee.City = p.nctsHC_Consignee_City + If p.nctsHC_Consignee_Country IsNot Nothing Then HC.Consignee.Country = p.nctsHC_Consignee_Country + If Not String.IsNullOrWhiteSpace(p.nctsHC_Consignee_ContactPerson_Name) Then + HC.Consignee.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType + If p.nctsHC_Consignee_ContactPerson_Name IsNot Nothing Then HC.Consignee.ContactPerson.Name = p.nctsHC_Consignee_ContactPerson_Name + If p.nctsHC_Consignee_ContactPerson_PhoneNumber IsNot Nothing Then HC.Consignee.ContactPerson.PhoneNumber = p.nctsHC_Consignee_ContactPerson_PhoneNumber + If p.nctsHC_Consignee_ContactPerson_EMailAddress IsNot Nothing Then HC.Consignee.ContactPerson.EMailAddress = p.nctsHC_Consignee_ContactPerson_EMailAddress + End If + End If + + 'Vorpapier: Ausfuhr-MRN aus EXG + 'Vorpapiere HouseConsignment + If p.nctsHC_PreviousDocument_1_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_1_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_1_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_1_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_2_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_2_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_2_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_2_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_3_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_3_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_3_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_3_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_4_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_4_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_4_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_4_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_5_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_5_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_5_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_5_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_6_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_6_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_6_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_6_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_7_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_7_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_7_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_7_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_8_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_8_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_8_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_8_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + If p.nctsHC_PreviousDocument_9_ReferenceNumber IsNot Nothing Then + Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentVAType With {.Type = p.nctsHC_PreviousDocument_9_Type, .ReferenceNumber = p.nctsHC_PreviousDocument_9_ReferenceNumber, .ComplementOfInformation = p.nctsHC_PreviousDocument_9_ComplementOfInformation} + HC.PreviousDocument.Add(TM) + End If + + + '20300-EXPORT: nur bei ausschließlich betroffenen Positionen auf HC-Ebene + Dim exportCount As Integer = 0 + Dim itemCount As Integer = If(p.nctsWP_CONSIGNMENT_ITEM Is Nothing, 0, p.nctsWP_CONSIGNMENT_ITEM.Count) + If itemCount > 0 Then + For Each pp In p.nctsWP_CONSIGNMENT_ITEM + Dim t As String = Convert.ToString(pp.nctsHCCI_DeclarationType).Trim().ToUpperInvariant() + If t = "" Then t = declType.Trim().ToUpperInvariant() + Dim d As String = Convert.ToString(pp.nctsHCCI_CountryOfDispatch).Trim().ToUpperInvariant() + Dim z As String = Convert.ToString(pp.nctsHCCI_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + If (t = "T2" OrElse t = "T2F") AndAlso IsEUCountry(d) AndAlso z <> "" AndAlso Not IsEUCountry(z) Then exportCount += 1 + Next + End If + Dim exportOnHC As Boolean = itemCount > 0 AndAlso exportCount = itemCount + If exportOnHC AndAlso Not HC.AdditionalInformation.Any(Function(x) x.Code = "20300") Then + HC.AdditionalInformation.Add(New VersandanmeldungNCTSDE_004.AdditionalInformationHouseVAType With {.Code = "20300", .Text = "EXPORT"}) + End If + If p.nctsWP_CONSIGNMENT_ITEM IsNot Nothing AndAlso p.nctsWP_CONSIGNMENT_ITEM.Count > 0 Then HC.ConsignmentItem = New List(Of VersandanmeldungNCTSDE_004.ConsignmentItemVAType) @@ -2315,12 +2522,33 @@ Public Class cDakosyNCTSOut004 If pp.nctsHCCI_UNNumber_3 IsNot Nothing Then HCCI.UNNumber.Add(pp.nctsHCCI_UNNumber_3) If pp.nctsHCCI_UNNumber_4 IsNot Nothing Then HCCI.UNNumber.Add(pp.nctsHCCI_UNNumber_4) - If pp.nctsHCCI_DeclarationType IsNot Nothing Then HCCI.DeclarationType = pp.nctsHCCI_DeclarationType + 'If pp.nctsHCCI_DeclarationType IsNot Nothing Then HCCI.DeclarationType = pp.nctsHCCI_DeclarationType + If declType = "T-" Then + Dim itemType As String = Convert.ToString(pp.nctsHCCI_DeclarationType).Trim() + + If itemType <> "T1" AndAlso itemType <> "T2" AndAlso itemType <> "T2F" Then + Console.WriteLine($"NCTS: Ungültige Positions-Verfahrensart '{itemType}' bei Position {HCCI.DeclarationGoodsItemNumber}.") + End If + + HCCI.DeclarationType = itemType + End If + If pp.nctsHCCI_ArticleCode IsNot Nothing Then HCCI.ArticleCode = pp.nctsHCCI_ArticleCode If pp.nctsHCCI_DescriptionOfGoods IsNot Nothing Then HCCI.DescriptionOfGoods = pp.nctsHCCI_DescriptionOfGoods If pp.nctsHCCI_CusCode IsNot Nothing Then HCCI.CusCode = pp.nctsHCCI_CusCode - If pp.nctsHCCI_CountryOfDispatch IsNot Nothing Then HCCI.CountryOfDispatch = pp.nctsHCCI_CountryOfDispatch - If pp.nctsHCCI_CountryOfDestination IsNot Nothing Then HCCI.CountryOfDestination = pp.nctsHCCI_CountryOfDestination + 'Positionsland nur, wenn es weder am Kopf noch an der HC einheitlich ist + If Not sameDispatchCountry AndAlso Not sameHCDispatch Then + Dim d As String = Convert.ToString(pp.nctsHCCI_CountryOfDispatch).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + If d = "" Then d = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If d <> "" Then HCCI.CountryOfDispatch = d + End If + If Not sameDestinationCountry AndAlso Not sameHCDestination Then + Dim z As String = Convert.ToString(pp.nctsHCCI_CountryOfDestination).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If z = "" Then z = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + If z <> "" Then HCCI.CountryOfDestination = z + End If If pp.nctsHCCI_GrossMass IsNot Nothing Then HCCI.GrossMass = pp.nctsHCCI_GrossMass If pp.nctsHCCI_NetMass IsNot Nothing Then HCCI.NetMass = pp.nctsHCCI_NetMass @@ -2337,25 +2565,9 @@ Public Class cDakosyNCTSOut004 - 'Empfänger - If pp.nctsHCCI_Consignor_IdentificationNumber IsNot Nothing Or pp.nctsHCCI_Consignor_Name IsNot Nothing Then - HCCI.Consignee = New VersandanmeldungNCTSDE_004.AddressVA1Type - If pp.nctsHCCI_Consignor_IdentificationNumber IsNot Nothing Then HCCI.Consignee.IdentificationNumber = pp.nctsHCCI_Consignor_IdentificationNumber - If pp.nctsHCCI_Consignor_SubsidiaryNumber IsNot Nothing Then HCCI.Consignee.SubsidiaryNumber = pp.nctsHCCI_Consignor_SubsidiaryNumber - If pp.nctsHCCI_Consignor_Name IsNot Nothing Then HCCI.Consignee.Name = pp.nctsHCCI_Consignor_Name - If pp.nctsHCCI_Consignor_Postcode IsNot Nothing Then HCCI.Consignee.Postcode = pp.nctsHCCI_Consignor_Postcode - If pp.nctsHCCI_Consignor_StreetNumber IsNot Nothing Then HCCI.Consignee.StreetAndNumber = pp.nctsHCCI_Consignor_StreetNumber - If pp.nctsHCCI_Consignor_City IsNot Nothing Then HCCI.Consignee.City = pp.nctsHCCI_Consignor_City - If pp.nctsHCCI_Consignor_Country IsNot Nothing Then HCCI.Consignee.Country = pp.nctsHCCI_Consignor_Country - If pp.nctsHCCI_Consignor_ContactPerson_Name IsNot Nothing Then - HCCI.Consignee.ContactPerson = New VersandanmeldungNCTSDE_004.ContactPersonVAType - If pp.nctsHCCI_Consignor_ContactPerson_Name IsNot Nothing Then HCCI.Consignee.ContactPerson.Name = pp.nctsHCCI_Consignor_ContactPerson_Name - If pp.nctsHCCI_Consignor_ContactPerson_PhoneNumber IsNot Nothing Then HCCI.Consignee.ContactPerson.PhoneNumber = pp.nctsHCCI_Consignor_ContactPerson_PhoneNumber - If pp.nctsHCCI_Consignor_ContactPerson_EMailAddress IsNot Nothing Then HCCI.Consignee.ContactPerson.EMailAddress = pp.nctsHCCI_Consignor_ContactPerson_EMailAddress - End If - End If - - + 'Auf Warenpositionsebene ist nur Consignee zulässig. + 'Das Datenmodell enthält hier nur nctsHCCI_Consignor_*. + 'Diese Werte dürfen nicht als Empfänger ausgegeben werden. 'Lieferkettenbeteiligter 1 If pp.nctsHCCI_AdditionalSupplyChainActor_1_IdentificationNumber IsNot Nothing Then @@ -2427,6 +2639,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 1 If pp.nctsHCCI_PreviousDocument_1_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_1_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_1_Type If pp.nctsHCCI_PreviousDocument_1_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_1_ReferenceNumber If pp.nctsHCCI_PreviousDocument_1_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_1_ComplementOfInformation @@ -2436,6 +2649,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 2 If pp.nctsHCCI_PreviousDocument_2_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_2_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_2_Type If pp.nctsHCCI_PreviousDocument_2_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_2_ReferenceNumber If pp.nctsHCCI_PreviousDocument_2_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_2_ComplementOfInformation @@ -2445,6 +2659,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 3 If pp.nctsHCCI_PreviousDocument_3_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_3_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_3_Type If pp.nctsHCCI_PreviousDocument_3_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_3_ReferenceNumber If pp.nctsHCCI_PreviousDocument_3_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_3_ComplementOfInformation @@ -2454,6 +2669,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 4 If pp.nctsHCCI_PreviousDocument_4_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_4_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_4_Type If pp.nctsHCCI_PreviousDocument_4_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_4_ReferenceNumber If pp.nctsHCCI_PreviousDocument_4_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_4_ComplementOfInformation @@ -2463,6 +2679,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 5 If pp.nctsHCCI_PreviousDocument_5_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_5_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_5_Type If pp.nctsHCCI_PreviousDocument_5_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_5_ReferenceNumber If pp.nctsHCCI_PreviousDocument_5_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_5_ComplementOfInformation @@ -2472,6 +2689,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 6 If pp.nctsHCCI_PreviousDocument_6_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_6_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_6_Type If pp.nctsHCCI_PreviousDocument_6_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_6_ReferenceNumber If pp.nctsHCCI_PreviousDocument_6_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_6_ComplementOfInformation @@ -2481,6 +2699,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 7 If pp.nctsHCCI_PreviousDocument_7_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_7_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_7_Type If pp.nctsHCCI_PreviousDocument_7_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_7_ReferenceNumber If pp.nctsHCCI_PreviousDocument_7_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_7_ComplementOfInformation @@ -2490,6 +2709,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 8 If pp.nctsHCCI_PreviousDocument_8_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_8_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_8_Type If pp.nctsHCCI_PreviousDocument_8_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_8_ReferenceNumber If pp.nctsHCCI_PreviousDocument_8_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_8_ComplementOfInformation @@ -2499,6 +2719,7 @@ Public Class cDakosyNCTSOut004 'Vorpapier 9 If pp.nctsHCCI_PreviousDocument_9_ReferenceNumber IsNot Nothing Then Dim TM As New VersandanmeldungNCTSDE_004.PreviousDocumentPositionVAType + TM.PreviousDocumentDetails = New VersandanmeldungNCTSDE_004.PreviousDocumentsPositionVAType If pp.nctsHCCI_PreviousDocument_9_Type IsNot Nothing Then TM.Type = pp.nctsHCCI_PreviousDocument_9_Type If pp.nctsHCCI_PreviousDocument_9_ReferenceNumber IsNot Nothing Then TM.PreviousDocumentDetails.ReferenceNumber = pp.nctsHCCI_PreviousDocument_9_ReferenceNumber If pp.nctsHCCI_PreviousDocument_9_ComplementOfInformation IsNot Nothing Then TM.PreviousDocumentDetails.ComplementOfInformation = pp.nctsHCCI_PreviousDocument_9_ComplementOfInformation @@ -2726,6 +2947,22 @@ Public Class cDakosyNCTSOut004 HCCI.AdditionalInformation.Add(TM) End If + '20300-EXPORT nur bei betroffenen Positionen, wenn nicht schon auf HC-Ebene + If Not exportOnHC Then + Dim itemTypeAdd As String = Convert.ToString(pp.nctsHCCI_DeclarationType).Trim().ToUpperInvariant() + If itemTypeAdd = "" Then itemTypeAdd = declType.Trim().ToUpperInvariant() + Dim itemDispatch As String = Convert.ToString(pp.nctsHCCI_CountryOfDispatch).Trim().ToUpperInvariant() + Dim itemDestination As String = Convert.ToString(pp.nctsHCCI_CountryOfDestination).Trim().ToUpperInvariant() + If itemDispatch = "" Then itemDispatch = Convert.ToString(p.nctsHC_CountryOfDispatch).Trim().ToUpperInvariant() + If itemDestination = "" Then itemDestination = Convert.ToString(p.nctsHC_CountryOfDestination).Trim().ToUpperInvariant() + If itemDispatch = "" Then itemDispatch = Convert.ToString(cDY.ncts_CountryOfDispatch).Trim().ToUpperInvariant() + If itemDestination = "" Then itemDestination = Convert.ToString(cDY.ncts_CountryOfDestination).Trim().ToUpperInvariant() + If (itemTypeAdd = "T2" OrElse itemTypeAdd = "T2F") AndAlso IsEUCountry(itemDispatch) AndAlso itemDestination <> "" AndAlso Not IsEUCountry(itemDestination) Then + If Not HCCI.AdditionalInformation.Any(Function(x) x.Code = "20300") Then + HCCI.AdditionalInformation.Add(New VersandanmeldungNCTSDE_004.AdditionalInformationPositionVAType With {.Code = "20300", .Text = "EXPORT"}) + End If + End If + End If HC.ConsignmentItem.Add(HCCI) Next @@ -2756,191 +2993,582 @@ Public Class cDakosyNCTSOut004 Return False End Function + Private Shared Function getTelefon() As String + Dim defaultDW = "200" + Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA + Case "ATILLA" : Return "0043 7711 28450" + Case "AMBAR" : Return "0049 8651 9962492" + Case "UNISPED" : defaultDW = "800" + Case "IMEX" : defaultDW = "602" + Case "VERAG" : defaultDW = "200" + End Select - Shared Function fillNCTS_WithEXG(ByRef NCTS_OUT As cDakosyNCTSOut004, exg As cDakosyEXG, Optional ObjectName As String = "") As cDakosyNCTSOut004 + Dim dw = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_durchwahl + Return "0049 8503 7973999 " & + If(String.IsNullOrEmpty(dw) OrElse dw.Length >= 5, defaultDW, dw) + End Function + Private Shared Function getDefaultMail_FIRMA() As String + Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA + Case "VERAG" : Return "quickstop@verag.ag" + Case "IMEX" : Return "steuerbescheide@imex-group.at" + Case "UNISPED" : Return "office@unisped.at" + Case "AMBAR" : Return "office@ambarlog.com" + End Select + Return "quickstop@verag.ag" + End Function + Shared Function IsEUCountry(countryCode As String) As Boolean + If String.IsNullOrWhiteSpace(countryCode) Then Return False + + Select Case countryCode.Trim().ToUpperInvariant() + Case "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" + Return True + Case Else + Return False + End Select + End Function + + Shared Function fillNCTS_WithEXG(ByRef NCTS_OUT As cDakosyNCTSOut004, exg As cDakosyEXG, Optional ObjectName As String = "", Optional AutoTranslate As Boolean? = Nothing, Optional ForceTranslate As Boolean? = Nothing) As cDakosyNCTSOut004 If NCTS_OUT Is Nothing Then NCTS_OUT = New DAKOSY_Worker.cDakosyNCTSOut004 NCTS_OUT.ncts_ObjectName = ObjectName End If + If NCTS_OUT.ncts_ObjectName = "" Then NCTS_OUT.ncts_ObjectName = ObjectName - If NCTS_OUT IsNot Nothing Then - If NCTS_OUT.ncts_ObjectName = "" Then NCTS_OUT.ncts_ObjectName = ObjectName + Dim HC As New cDakosy_NCTSOut004_HouseConsignment - Dim HC As New cDakosy_NCTSOut004_HouseConsignment - HC.nctsHC_Consignee_Name = exg.exg_Consignee_Name - HC.nctsHC_Consignee_IdentificationNumber = exg.exg_Consignee_IdentificationNumber - HC.nctsHC_Consignee_SubsidiaryNumber = exg.exg_Consignee_SubsidiaryNumber - HC.nctsHC_Consignee_StreetNumber = exg.exg_Consignee_StreetNumber - HC.nctsHC_Consignee_City = exg.exg_Consignee_City - HC.nctsHC_Consignee_Postcode = exg.exg_Consignee_Postcode - HC.nctsHC_Consignee_Country = exg.exg_Consignee_Country - HC.nctsHC_Consignee_ContactPerson_Name = exg.exg_Consignee_ContactPerson_Name - HC.nctsHC_Consignee_ContactPerson_PhoneNumber = exg.exg_Consignee_ContactPerson_PhoneNumber - HC.nctsHC_Consignee_ContactPerson_EMailAddress = exg.exg_Consignee_ContactPerson_EMailAddress - HC.nctsHC_Consignee_AdressCode = exg.exg_Consignee_AdressCode + 'Empfänger + HC.nctsHC_Consignee_Name = exg.exg_Consignee_Name + HC.nctsHC_Consignee_IdentificationNumber = exg.exg_Consignee_IdentificationNumber + HC.nctsHC_Consignee_SubsidiaryNumber = exg.exg_Consignee_SubsidiaryNumber + HC.nctsHC_Consignee_StreetNumber = exg.exg_Consignee_StreetNumber + HC.nctsHC_Consignee_City = exg.exg_Consignee_City + HC.nctsHC_Consignee_Postcode = exg.exg_Consignee_Postcode + HC.nctsHC_Consignee_Country = exg.exg_Consignee_Country + HC.nctsHC_Consignee_ContactPerson_Name = exg.exg_Consignee_ContactPerson_Name + HC.nctsHC_Consignee_ContactPerson_PhoneNumber = exg.exg_Consignee_ContactPerson_PhoneNumber + HC.nctsHC_Consignee_ContactPerson_EMailAddress = exg.exg_Consignee_ContactPerson_EMailAddress + HC.nctsHC_Consignee_AdressCode = exg.exg_Consignee_AdressCode - HC.nctsHC_Consignor_Name = exg.exg_Consignor_Name - HC.nctsHC_Consignor_IdentificationNumber = exg.exg_Consignor_IdentificationNumber - HC.nctsHC_Consignor_SubsidiaryNumber = exg.exg_Consignor_SubsidiaryNumber - HC.nctsHC_Consignor_StreetNumber = exg.exg_Consignor_StreetNumber - HC.nctsHC_Consignor_City = exg.exg_Consignor_City - HC.nctsHC_Consignor_Postcode = exg.exg_Consignor_Postcode - HC.nctsHC_Consignor_Country = exg.exg_Consignor_Country - HC.nctsHC_Consignor_ContactPerson_Name = exg.exg_Consignor_ContactPerson_Name - HC.nctsHC_Consignor_ContactPerson_PhoneNumber = exg.exg_Consignor_ContactPerson_PhoneNumber - HC.nctsHC_Consignor_ContactPerson_EMailAddress = exg.exg_Consignor_ContactPerson_EMailAddress - HC.nctsHC_Consignor_AdressCode = exg.exg_Consignor_AdressCode + 'Versender + HC.nctsHC_Consignor_Name = exg.exg_Consignor_Name + HC.nctsHC_Consignor_IdentificationNumber = exg.exg_Consignor_IdentificationNumber + HC.nctsHC_Consignor_SubsidiaryNumber = exg.exg_Consignor_SubsidiaryNumber + HC.nctsHC_Consignor_StreetNumber = exg.exg_Consignor_StreetNumber + HC.nctsHC_Consignor_City = exg.exg_Consignor_City + HC.nctsHC_Consignor_Postcode = exg.exg_Consignor_Postcode + HC.nctsHC_Consignor_Country = exg.exg_Consignor_Country + HC.nctsHC_Consignor_ContactPerson_Name = exg.exg_Consignor_ContactPerson_Name + HC.nctsHC_Consignor_ContactPerson_PhoneNumber = exg.exg_Consignor_ContactPerson_PhoneNumber + HC.nctsHC_Consignor_ContactPerson_EMailAddress = exg.exg_Consignor_ContactPerson_EMailAddress + HC.nctsHC_Consignor_AdressCode = exg.exg_Consignor_AdressCode + 'House Consignment + HC.nctsHC_GrossMass = exg.exg_GrossMass + HC.nctsHC_CountryOfDestination = exg.exg_CountryOfDestination + 'Versendungsland: zuerst EXG, alternativ Versenderadresse + HC.nctsHC_CountryOfDispatch = If(exg.exg_CountryOfDispatch, "").Trim().ToUpperInvariant() - HC.nctsHC_GrossMass = exg.exg_GrossMass - HC.nctsHC_ReferenceNumberUCR = exg.exg_ReferenceNumberUCR + If String.IsNullOrWhiteSpace(HC.nctsHC_CountryOfDispatch) Then + HC.nctsHC_CountryOfDispatch = If(exg.exg_Consignor_Country, "").Trim().ToUpperInvariant() + End If - HC.nctsHC_CountryOfDestination = exg.exg_CountryOfDestination - HC.nctsHC_CountryOfDispatch = exg.exg_CountryOfDispatch + 'UCR bewusst nicht übernehmen + HC.nctsHC_ReferenceNumberUCR = Nothing - HC.nctsHC_PreviousDocument_1_Type = "N830" - HC.nctsHC_PreviousDocument_1_ReferenceNumber = exg.exg_MRN - 'HC.nctsHC_PreviousDocument_1_ComplementOfInformation = + 'Vorpapier + HC.nctsHC_PreviousDocument_1_Type = "N830" + HC.nctsHC_PreviousDocument_1_ReferenceNumber = exg.exg_MRN + 'Warenpositionen + For Each EXG_POS In exg.exg_POSITION - For Each EXG_POS In exg.exg_POSITION - Dim HC_ITEM As New cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem + Dim HC_ITEM As New cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem - HC_ITEM.nctsHCCI_CommodityCode = EXG_POS.exgPos_CommodityCode - HC_ITEM.nctsHCCI_DescriptionOfGoods = EXG_POS.exgPos_DescriptionOfGoods + 'Tarifnummer: 6 oder 8 Stellen + Dim tariff As String = If(EXG_POS.exgPos_CommodityCode, "").Trim() + tariff = New String(tariff.Where(Function(c) Char.IsDigit(c)).ToArray()) - HC_ITEM.nctsHCCI_GrossMass = EXG_POS.exgPos_GrossMass - HC_ITEM.nctsHCCI_NetMass = EXG_POS.exgPos_NetMass + If tariff.Length >= 8 Then + tariff = tariff.Substring(0, 8) + ElseIf tariff.Length >= 6 Then + tariff = tariff.Substring(0, 6) + Else + Console.WriteLine("NCTS EXG: Ungültige Tarifnummer '" & tariff & "' / EXG " & exg.exg_ObjectName) + End If - If EXG_POS.exgPos_PreviousProcedure IsNot Nothing And EXG_POS.exgPos_RequestedProcedure IsNot Nothing Then - HC_ITEM.nctsHCCI_DeclarationType = DetermineTransitProcedure(EXG_POS.exgPos_RequestedProcedure, EXG_POS.exgPos_PreviousProcedure) - End If + HC_ITEM.nctsHCCI_CommodityCode = If(tariff = "", Nothing, tariff) - If exg.exg_AutoTranslate Then - If exg.exg_ForceTranslate Then - cDeeplAPI.deepl_Translate(EXG_POS.exgPos_DescriptionOfGoods, HC_ITEM.nctsHCCI_DescriptionOfGoods, "DE") - Else - HC_ITEM.nctsHCCI_DescriptionOfGoods = cTariffKN8_Interface.getKN8FromTNR(EXG_POS.exgPos_CommodityCode) + 'Warenbezeichnung: Original immer als Fallback + Dim originalDescription As String = If(EXG_POS.exgPos_DescriptionOfGoods, "").Trim() + Dim description As String = originalDescription + + If If(AutoTranslate, exg.exg_AutoTranslate) Then + If If(ForceTranslate, exg.exg_ForceTranslate) Then + If originalDescription <> "" Then + Try + Dim translated As String = "" + cDeeplAPI.deepl_Translate(originalDescription, translated, "DE") + If Not String.IsNullOrWhiteSpace(translated) Then description = translated.Trim() + Catch ex As Exception + Console.WriteLine("NCTS EXG: DeepL fehlgeschlagen / " & exg.exg_ObjectName & ": " & ex.Message) + End Try + End If + Else + If tariff <> "" Then + Try + Dim kn8Description As String = cTariffKN8_Interface.getKN8FromTNR(tariff) + If Not String.IsNullOrWhiteSpace(kn8Description) Then description = kn8Description.Trim() + Catch ex As Exception + Console.WriteLine("NCTS EXG: KN8-Lookup fehlgeschlagen / " & exg.exg_ObjectName & ": " & ex.Message) + End Try End If End If + End If + If String.IsNullOrWhiteSpace(description) Then + Console.WriteLine("NCTS EXG: Warenbezeichnung leer / EXG " & exg.exg_ObjectName & " / Tarifnummer " & tariff) + End If + + HC_ITEM.nctsHCCI_DescriptionOfGoods = description + + 'Gewichte + HC_ITEM.nctsHCCI_GrossMass = EXG_POS.exgPos_GrossMass + HC_ITEM.nctsHCCI_NetMass = EXG_POS.exgPos_NetMass + + 'Verfahrensart + If EXG_POS.exgPos_PreviousProcedure IsNot Nothing AndAlso EXG_POS.exgPos_RequestedProcedure IsNot Nothing Then + HC_ITEM.nctsHCCI_DeclarationType = DetermineTransitProcedure(EXG_POS.exgPos_RequestedProcedure, EXG_POS.exgPos_PreviousProcedure) + + Debug.WriteLine($"NCTS Transit: Requested={EXG_POS.exgPos_RequestedProcedure}, Previous={EXG_POS.exgPos_PreviousProcedure}, Result={HC_ITEM.nctsHCCI_DeclarationType}") + + End If + + 'Packstücke + If EXG_POS.exgPos_PACKAGING IsNot Nothing Then For Each EXG_PK In EXG_POS.exgPos_PACKAGING - Dim HC_PK = New cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem_Packaging + + Dim HC_PK As New cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem_Packaging HC_PK.nctsHCCIPK_NumberOfPackages = EXG_PK.exgPosPk_NumberOfPackages HC_PK.nctsHCCIPK_TypeOfPackages = EXG_PK.exgPosPk_TypeOfPackages HC_PK.nctsHCCIPK_ShippingMarks = EXG_PK.exgPosPk_ShippingMarks + If Val(Convert.ToString(EXG_PK.exgPosPk_NumberOfPackages)) = 0 Then + 'Verweis auf erste Warenposition im selben House Consignment + HC_PK.nctsHCCIPK_GoodsItemNumber = 1 + End If + HC_ITEM.nctsHCCI_PACKAGING.Add(HC_PK) Next - - HC.nctsWP_CONSIGNMENT_ITEM.Add(HC_ITEM) - Next - NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Add(HC) - - - - - - ' NCTS_OUT.INSERT_HouseConsignment() - - - '--------Declarationtype----------------------------------------------- - Dim declType = GetDeclarationType(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) - If declType <> "" Then - emptyAllDeclarationItems(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) ' Leert alle DeclType in den Pos - NCTS_OUT.ncts_Declarationtype = declType ' Sezt es im Kopf - Else - NCTS_OUT.ncts_Declarationtype = "T-" ' Sezt es im Kopf End If - '---------------------------------------------------------------------- - End If - NCTS_OUT.SAVE_ALL() + + HC.nctsWP_CONSIGNMENT_ITEM.Add(HC_ITEM) + Next + + NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Add(HC) + + 'Verfahrensart wird erst nach Zusammenführung aller EXG bestimmt + 'Positions-Verfahrensarten bleiben bis dahin erhalten + 'Dim declType As String = GetDeclarationType(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) + + 'If declType <> "" Then + ' emptyAllDeclarationItems(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) + ' NCTS_OUT.ncts_Declarationtype = declType + 'Else + ' NCTS_OUT.ncts_Declarationtype = "T-" + 'End If + + 'Kein SAVE_ALL: erfolgt nach Zusammenführung aller EXG-Anmeldungen Return NCTS_OUT + End Function + ' Funktion zur Bestimmung des Declaration Type Shared Function GetDeclarationType(HC_LIST As List(Of cDakosy_NCTSOut004_HouseConsignment)) As String Dim declType As String = Nothing - Dim isConsistent As Boolean = True ' Flag zur Überprüfung der Konsistenz - ' Iteration über alle Positionen For Each HC In HC_LIST - For Each HC_ITEM In HC.nctsWP_CONSIGNMENT_ITEM - Dim currentType = HC_ITEM.nctsHCCI_DeclarationType + Dim currentType As String = If(HC_ITEM.nctsHCCI_DeclarationType, "").Trim() - ' Abbruch, wenn ein Wert leer oder Nothing ist - If String.IsNullOrWhiteSpace(currentType) Then - isConsistent = False - Exit For - End If + If String.IsNullOrWhiteSpace(currentType) Then Return "" - ' Setze declType, wenn noch nicht gesetzt If declType Is Nothing Then declType = currentType ElseIf declType <> currentType Then - ' Unterschiedlicher Wert gefunden → Abbruch - isConsistent = False - Exit For + Return "" End If Next Next - ' Rückgabe des einheitlichen declType oder leer, wenn inkonsistent - If isConsistent AndAlso Not String.IsNullOrWhiteSpace(declType) Then - Return declType - Else - Return "" - End If + Return If(declType, "") End Function + Shared Sub finalizeNCTS_DeclarationType(ByRef NCTS_OUT As cDakosyNCTSOut004) + + Dim declType As String = GetDeclarationType(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) + + If Not String.IsNullOrWhiteSpace(declType) AndAlso declType <> "T-" Then + 'Alle Positionen haben dieselbe Verfahrensart + NCTS_OUT.ncts_Declarationtype = declType + emptyAllDeclarationItems(NCTS_OUT.ncts_HOUSE_CONSIGNMENT) + Else + 'Gemischte Verfahrensarten: T1/T2 bleiben auf Positionsebene + NCTS_OUT.ncts_Declarationtype = "T-" + End If + + End Sub + Shared Sub emptyAllDeclarationItems(ByRef HC_LIST As List(Of cDakosy_NCTSOut004_HouseConsignment)) - Dim declType As String = Nothing - Dim isConsistent As Boolean = True ' Flag zur Überprüfung der Konsistenz - - ' Iteration über alle Positionen For Each HC In HC_LIST For Each HC_ITEM In HC.nctsWP_CONSIGNMENT_ITEM HC_ITEM.nctsHCCI_DeclarationType = "" Next Next - End Sub Shared Function DetermineTransitProcedure(requestedProcedure As String, previousProcedure As String) As String - ' Entscheidungslogik für Transitverfahren (immer in der EU eröffnet) - Select Case requestedProcedure - Case "10" ' Ausfuhrverfahren - If previousProcedure = "00" Then - Return "T2" ' Ware ist weiterhin Unionsware, obwohl Ausfuhr vorgesehen ist - ElseIf previousProcedure = "40" Then - Return "T2" ' Ware im freien Verkehr (Unionsware) - ElseIf previousProcedure = "61" Then - Return "T1" ' Ware verlässt ein Zolllager (Nicht-Unionsware) - Else - Return "T2" ' Standardfall: Unionsware im Ausfuhrverfahren - End If - Case "40" ' Überlassung zum freien Verkehr - Return "T2" ' Ware wird Unionsware nach Import + 'requestedProcedure = Verfahren unmittelbar vor NCTS (meist Ausfuhr) + 'previousProcedure = Verfahren vor der Ausfuhr + 'T2 = Unionswaren, T1 = Nicht-Unionswaren + 'Nur Vorschlagslogik: tatsächlichen Warenstatus und Sonderregeln prüfen - Case "31" ' Versandverfahren - Return "T-" ' Beibehaltung des ursprünglichen Status + Dim exportProcedure As String = If(requestedProcedure, "").Trim() + Dim procedureBeforeExport As String = If(previousProcedure, "").Trim() - Case "51" ' Passive Veredelung - Return "T1" ' Rückkehr von Nicht-Unionsware nach Verarbeitung + Select Case exportProcedure + Case "10", "11", "21", "22", "23" + 'Ausfuhr bzw. vorübergehende Ausfuhr + Select Case procedureBeforeExport + Case "00" + 'Kein vorangegangenes Zollverfahren + Return "T2" + + Case "40" + 'Vorherige Überlassung zum freien Verkehr + Return "T2" + + Case "61" + 'Wiedereinfuhr mit Überlassung zum freien Verkehr + Return "T2" + + Case "51" + 'Vorher aktive Veredelung – Nicht-Unionswaren möglich + Return "T1" + + Case "53" + 'Vorher vorübergehende Verwendung – regelmäßig Nicht-Unionswaren + Return "T1" + + Case "71" + 'Vorher Zolllagerverfahren – regelmäßig Nicht-Unionswaren + Return "T1" + + Case "78" + 'Vorher Freizone – Warenstatus gesondert prüfen + Console.WriteLine("NCTS: Freizone – Warenstatus prüfen.") + Return "T1" + + Case Else + 'Unbekanntes Vorverfahren: T2 als betrieblicher Vorschlag + Console.WriteLine("NCTS: Unbekanntes Vorverfahren " & exportProcedure & "/" & procedureBeforeExport & " -> T2 vorgeschlagen.") + Return "T2" + End Select + + Case "31" + 'Wiederausfuhr von Nicht-Unionswaren + Return "T1" Case Else - Return "Unbekannt" ' Unbekannter Verfahrenscode + 'Unbekanntes Ausfuhrverfahren + Console.WriteLine("NCTS: Unbekanntes EXG-Verfahren " & exportProcedure & "/" & procedureBeforeExport & " -> T2 vorgeschlagen.") + Return "T2" End Select + End Function + 'Shared Function DetermineTransitProcedure(requestedProcedure As String, previousProcedure As String) As String + ' ' Entscheidungslogik für Transitverfahren (immer in der EU eröffnet) + ' Select Case requestedProcedure + ' Case "10" ' Ausfuhrverfahren + ' If previousProcedure = "00" Then + ' Return "T2" ' Ware ist weiterhin Unionsware, obwohl Ausfuhr vorgesehen ist + ' ElseIf previousProcedure = "40" Then + ' Return "T2" ' Ware im freien Verkehr (Unionsware) + ' ElseIf previousProcedure = "61" Then + ' Return "T1" ' Ware verlässt ein Zolllager (Nicht-Unionsware) + ' Else + ' Return "T2" ' Standardfall: Unionsware im Ausfuhrverfahren + ' End If + + ' Case "40" ' Überlassung zum freien Verkehr + ' Return "T2" ' Ware wird Unionsware nach Import + + ' Case "31" ' Versandverfahren + ' Return "T-" ' Beibehaltung des ursprünglichen Status + + ' Case "51" ' Passive Veredelung + ' Return "T1" ' Rückkehr von Nicht-Unionsware nach Verarbeitung + + ' Case Else + ' Return "Unbekannt" ' Unbekannter Verfahrenscode + ' End Select + 'End Function + + Public Shared Function SaveAndSendNCTS(NCTS_OUT As cDakosyNCTSOut004, DY_ANM As cDakosy_Zollanmeldungen, BezugsNr As String, FIRMA_DY As String, Optional sendFTP As Boolean = True, Optional SENDUNG As cSendungen = Nothing, Optional DY_ACTION As String = "CREATE", Optional NCTS_ART As String = "T2") As String + If NCTS_OUT Is Nothing Then Throw New Exception("Keine NCTS-Daten vorhanden.") + If DY_ANM Is Nothing OrElse DY_ANM.dy_Id <= 0 Then Throw New Exception("Keine gültige Zollanmeldung vorhanden.") + If String.IsNullOrWhiteSpace(BezugsNr) Then Throw New Exception("Keine Bezugsnummer vorhanden.") + + 'NCTS mit Zollanmeldung verknüpfen + NCTS_OUT.ncts_ObjectName = BezugsNr + NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id + NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB + NCTS_OUT.ncts_LetzteBearbeitung = Now + NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB + NCTS_OUT.ncts_firma = FIRMA_DY + + If Not NCTS_OUT.SAVE_ALL() Then + Throw New Exception("NCTS-Daten konnten nicht gespeichert werden. DY-ID: " & DY_ANM.dy_Id) + End If + + 'NCTS-XML erstellen + Dim saveFile As String = "" + + If Not cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, DY_ACTION, AppDomain.CurrentDomain.BaseDirectory, NCTS_ART) Then + Throw New Exception("NCTS-XML konnte nicht erzeugt werden.") + End If + + If String.IsNullOrWhiteSpace(saveFile) OrElse Not System.IO.File.Exists(saveFile) Then + Throw New Exception("NCTS-XML-Datei fehlt.") + End If + + 'Optional an DAKOSY senden + If sendFTP Then + If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, FIRMA_DY) Then + DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03) + If SENDUNG IsNot Nothing Then SENDUNG.SET_VGMA() + Else + DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09) + DY_ANM.UPDATE_DATA() + Throw New Exception("NCTS-FTP-Versand fehlgeschlagen. DY-ID: " & DY_ANM.dy_Id) + End If + End If + + DY_ANM.UPDATE_DATA() + + If sendFTP AndAlso DY_ANM.dy_SendungsId > 0 Then + DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId) + End If + + Return saveFile + End Function + + + Shared Sub loaddataFromAVISO(AVISO As cAviso, SENDUNG As cSendungen, cDy_ART As String, BezugsNr As String, ByRef cdy As cDakosyNCTSOut004, FIRMA_DY As String, loadForT1 As Boolean) + Try + + '==> VORBLENDUNG: + + ' Dim cdy As New cDakosyNCTSOut + cdy.ncts_ObjectName = BezugsNr + cdy.ncts_CustomsOfficeOfDeparture = "" '"DE007701" ' Neuhaus (öSTERR:) + setZollstelle(cdy.ncts_CustomsOfficeOfDeparture, AVISO) + + If cDy_ART <> "" Then cdy.ncts_dyaArt = cDy_ART + If AVISO IsNot Nothing Then + Dim kennzeichen As String = If(AVISO.LKW_Nr, "").Trim() + Dim nationalitaet As String = If(AVISO.LKW_Nationalitaet, "").Trim().ToUpperInvariant() + + If kennzeichen <> "" Then + cdy.ncts_DepartureTransportMeans_1_IdentificationNumber = kennzeichen + cdy.ncts_ActiveBorderTransportMeans_1_IdentificationNumber = kennzeichen + End If + + If nationalitaet <> "" Then + cdy.ncts_DepartureTransportMeans_1_Nationality = nationalitaet + cdy.ncts_ActiveBorderTransportMeans_1_Nationality = nationalitaet + End If + + Select Case If(AVISO.Transportmittelart, "").Trim().ToUpperInvariant() + Case "LKW", "SPRINTER" + cdy.ncts_DepartureTransportMeans_1_TypeOfIdentification = 30 + cdy.ncts_ActiveBorderTransportMeans_1_TypeOfIdentification = 30 + + If FIRMA_DY <> "AMBAR" Then + cdy.ncts_InlandModeOfTransport = "3" + cdy.ncts_ModeOfTransportAtTheBorder = "3" + End If + End Select + + + 'Bei Warenort nur grenzüberschreitendes Beförderungsmittel angeben + If Not String.IsNullOrWhiteSpace(Convert.ToString(AVISO.Grenzstelle)) Then + Dim sql As String = "SELECT COUNT(1) FROM dbo.tblGrenzstelle WHERE grz_Grenzstelle = '" & AVISO.Grenzstelle & "' AND grz_Warenort = 1" + + If (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySql(sql, "AVISO", , defaultReturn:="0") <> "0" Then + cdy.ncts_DepartureTransportMeans_1_IdentificationNumber = Nothing + cdy.ncts_DepartureTransportMeans_1_Nationality = Nothing + cdy.ncts_DepartureTransportMeans_1_TypeOfIdentification = Nothing + End If + End If + + End If + + 'cdy.ncts_Befoerderungsmittel_ArtGrenzueberschreitung = "35" + + + + If VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "ATILLA" Or (VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" And AVISO.ImEx = "EXPORT") Then + cdy.ncts_Security = True + cdy.ncts_SpecificCircomstanceIndicator = "C" + cdy.ncts_TransportCharges = "D" + cdy.ncts_PlaceOfLoading_Country = "DE" + 'cdy.ncts_SumA_KennnummerSendung = "OHNE" + + If AVISO.Frächter_KdNr IsNot Nothing AndAlso IsNumeric(AVISO.Frächter_KdNr) AndAlso AVISO.Frächter_KdNr > 0 Then + Dim AD_Befoerderer As New VERAG_PROG_ALLGEMEIN.cAdressen(AVISO.Frächter_KdNr) ' Befoerderer + Dim KD_Befoerderer As New VERAG_PROG_ALLGEMEIN.cKunde(AVISO.Frächter_KdNr) ' Befoerderer + cdy.ncts_Carrier_IdentificationNumber = KD_Befoerderer.EORITIN + If KD_Befoerderer.EORITIN IsNot Nothing Then cdy.ncts_Carrier_SubsidiaryNumber = KD_Befoerderer.EORITIN_NL + 'cdy.ncts_Carrier_name = (If(AD_Befoerderer.Name_1, "") & " " & If(AD_Befoerderer.Name_2, "")).trim + 'cdy.ncts_Carrier_st = AD_Befoerderer.Straße + 'cdy.ncts_SumA_Befoerderer_PLZ = AD_Befoerderer.PLZ + 'cdy.ncts_SumA_Befoerderer_Ort = AD_Befoerderer.Ordnungsbegriff + 'cdy.ncts_SumA_Befoerderer_Land = cProgramFunctions.getISO2Land(AD_Befoerderer.LandKz) + Else + 'cdy.ncts_SumA_Befoerderer_Name = If(AVISO.Frächter, "") + End If + End If + + + + If loadForT1 AndAlso SENDUNG IsNot Nothing Then + + Dim HC As DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment = Nothing + If cdy.ncts_HOUSE_CONSIGNMENT.Count > 0 Then + HC = cdy.ncts_HOUSE_CONSIGNMENT(0) + Else + HC = New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment + cdy.ncts_HOUSE_CONSIGNMENT.Add(HC) ' schon wieder...'nciht mehr anfügen + End If + + + Dim p As DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem = Nothing + If HC.nctsWP_CONSIGNMENT_ITEM.Count > 0 Then + p = HC.nctsWP_CONSIGNMENT_ITEM(0) + Else + p = New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem + HC.nctsWP_CONSIGNMENT_ITEM.Add(p) ' schon wieder...'nciht mehr anfügen + End If + + p.nctsHCCI_DescriptionOfGoods = SENDUNG.tblSnd_Warenbezeichnung + If SENDUNG.tblSnd_Colli IsNot Nothing AndAlso IsNumeric(SENDUNG.tblSnd_Colli) Then + Dim pk As New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem_Packaging + pk.nctsHCCIPK_NumberOfPackages = SENDUNG.tblSnd_Colli + pk.nctsHCCIPK_TypeOfPackages = "PK" + 'pk.nctsHCCIPK_GoodsItemNumber = "OHNE" -->BEIPACK Verweis auf andere Pos- + p.nctsHCCI_PACKAGING.Add(pk) + End If + p.nctsHCCI_GrossMass = SENDUNG.tblSnd_Gewicht + p.nctsHCCI_GoodsValue = SENDUNG.tblSnd_Warenwert + p.nctsHCCI_CurrencyOfGoodsValue = SENDUNG.tblSnd_WarenwertWaehrung + ' p.nctsWP_Warenbezeichnung = SENDUNG.tblSnd_Warenbezeichnung + 'If If(p.nctsWP_VorpapierTyp, "") = "" Then p.nctsWP_VorpapierTyp = "OHNE" + + If VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "ATILLA" Then + ' p.nctsWP_BesondereVermeke_Export = True + End If + 'cdy.ncts_WARENPOS.Add(p) + + Select Case cdy.ncts_CustomsOfficeOfDeparture + Case "DE007458" 'Bad Reichenhall --> Empfänger muss tat. Empf. sein; Gest.Adresse nicht akzeptiert!! + + If SENDUNG.tblSnd_EmpfaengerKdNr > 0 Then + Dim adEMPF As New VERAG_PROG_ALLGEMEIN.cAdressen(SENDUNG.tblSnd_EmpfaengerKdNr) + Dim kdEMPF As New VERAG_PROG_ALLGEMEIN.cKunde(SENDUNG.tblSnd_EmpfaengerKdNr) + cdy.ncts_Consignee_IdentificationNumber = kdEMPF.EORITIN + cdy.ncts_Consignee_SubsidiaryNumber = kdEMPF.EORITIN_NL + cdy.ncts_Consignee_Name = If(adEMPF.Name_1, "") & If(adEMPF.Name_2, "") + cdy.ncts_Consignee_StreetNumber = adEMPF.Straße + cdy.ncts_Consignee_Postcode = adEMPF.PLZ + cdy.ncts_Consignee_City = adEMPF.Ort + If adEMPF.LandKz IsNot Nothing Then cdy.ncts_Consignee_Country = cProgramFunctions.getISO2Land(adEMPF.LandKz) + cdy.ncts_CustomsOfficeOfDestinationDeclared = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle) + + End If + + Case Else + cdy.ncts_Consignee_IdentificationNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_EORI) + cdy.ncts_Consignee_SubsidiaryNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_EORI_NL) + cdy.ncts_Consignee_Name = cProgramFunctions.isLeerNothing(SENDUNG.tblSnd_NCTSVerzollungsadresse) + cdy.ncts_Consignee_StreetNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Strasse) + cdy.ncts_Consignee_Postcode = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_PLZ) + cdy.ncts_Consignee_City = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Ort) + cdy.ncts_Consignee_Country = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Land) + cdy.ncts_CustomsOfficeOfDestinationDeclared = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle) + + End Select + + + If SENDUNG.tblSnd_AbsenderKdNr > 0 Then + Dim adVERSENDER As New VERAG_PROG_ALLGEMEIN.cAdressen(SENDUNG.tblSnd_AbsenderKdNr) + Dim kdVERSENDER As New VERAG_PROG_ALLGEMEIN.cKunde(SENDUNG.tblSnd_AbsenderKdNr) + cdy.ncts_Consignor_IdentificationNumber = kdVERSENDER.EORITIN + cdy.ncts_Consignor_SubsidiaryNumber = kdVERSENDER.EORITIN_NL + cdy.ncts_Consignor_Name = If(adVERSENDER.Name_1, "") & If(adVERSENDER.Name_2, "") + cdy.ncts_Consignor_StreetNumber = adVERSENDER.Straße + cdy.ncts_Consignor_Postcode = adVERSENDER.PLZ + cdy.ncts_Consignor_City = adVERSENDER.Ort + If adVERSENDER.LandKz IsNot Nothing Then cdy.ncts_Consignor_Country = cProgramFunctions.getISO2Land(adVERSENDER.LandKz) + ' cdy.ncts_BestimmungsstelleDienststellennummer = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle) + + End If + + End If + + + ' NCTS= cdy + Catch ex As Exception + MsgBox(ex.StackTrace) + End Try + End Sub + + Shared Sub setZollstelle(ByRef zst As String, AVISO As VERAG_PROG_ALLGEMEIN.cAviso) + Try + If AVISO Is Nothing Then Exit Sub + If AVISO.Grenzstelle.Replace("???", "") = "" Then + zst = AVISO.Zollstelle + Else + + Dim GRZ As New VERAG_PROG_ALLGEMEIN.cGrenzstelle(AVISO.Grenzstelle) + If GRZ IsNot Nothing AndAlso GRZ.hasEntry Then + If GRZ.grz_ZollamtDST IsNot Nothing Then zst = GRZ.grz_ZollamtDST ' ZollDST setzen, zB "DE007701"'Suben Autobahngrenze + End If + + + 'Select Case AVISO.Grenzstelle + ' Case "SUB" : zst = "DE007701"'Suben Autobahngrenze + ' Case "SBG", "AMB" : zst = "DE007458" 'Bad Reichenhall-Autobahn + ' Case "WAI" : zst = "DE008904" 'Weiden-Waidhaus + ' Case "NEU" : zst = "DE007703" 'Passau + ' Case "WO_GE" : zst = "DE008752" 'Erlangen + ' ' Case "SFD" : zst = Asd ....DAKOS DE -.- + 'End Select + End If + Catch ex As Exception + MsgBox(ex.Message & ex.StackTrace) + End Try + End Sub End Class diff --git a/DAKOSY_Worker/cDakosyFunftions.vb b/DAKOSY_Worker/cDakosyFunftions.vb index fa5f01c..9fe7a2c 100644 --- a/DAKOSY_Worker/cDakosyFunftions.vb +++ b/DAKOSY_Worker/cDakosyFunftions.vb @@ -111,7 +111,8 @@ Public Class cDakosyFunftions Else Select Case FIRMA_DY Case "ATILLA" - Return "VERG" + 'Return "VERG" + Return "ATIL" Case "VERAG" Return "VERG" Case "DURMAZ" diff --git a/UID/usrctlProcedures.Designer.vb b/UID/usrctlProcedures.Designer.vb index b604d2f..d42a0a3 100644 --- a/UID/usrctlProcedures.Designer.vb +++ b/UID/usrctlProcedures.Designer.vb @@ -87,6 +87,7 @@ Partial Class usrctlProcedures Me.Button48 = New System.Windows.Forms.Button() Me.Button47 = New System.Windows.Forms.Button() Me.TabPage6 = New System.Windows.Forms.TabPage() + Me.Button60 = New System.Windows.Forms.Button() Me.Label23 = New System.Windows.Forms.Label() Me.Button54 = New System.Windows.Forms.Button() Me.Label19 = New System.Windows.Forms.Label() @@ -182,7 +183,7 @@ Partial Class usrctlProcedures Me.Button57 = New System.Windows.Forms.Button() Me.Button58 = New System.Windows.Forms.Button() Me.Button59 = New System.Windows.Forms.Button() - Me.Button60 = New System.Windows.Forms.Button() + Me.Button61 = New System.Windows.Forms.Button() Me.tbTRStat.SuspendLayout() Me.TabPage3.SuspendLayout() Me.TabPage1.SuspendLayout() @@ -842,6 +843,15 @@ Partial Class usrctlProcedures Me.TabPage6.Text = "MDM Importe" Me.TabPage6.UseVisualStyleBackColor = True ' + 'Button60 + ' + Me.Button60.Location = New System.Drawing.Point(336, 63) + Me.Button60.Name = "Button60" + Me.Button60.Size = New System.Drawing.Size(106, 49) + Me.Button60.TabIndex = 74 + Me.Button60.Text = "Plose PDF-Zuweisung" + Me.Button60.UseVisualStyleBackColor = True + ' 'Label23 ' Me.Label23.AutoSize = True @@ -1730,19 +1740,20 @@ Partial Class usrctlProcedures Me.Button59.Text = "Firmenlogo in DB" Me.Button59.UseVisualStyleBackColor = True ' - 'Button60 + 'Button61 ' - Me.Button60.Location = New System.Drawing.Point(336, 63) - Me.Button60.Name = "Button60" - Me.Button60.Size = New System.Drawing.Size(106, 49) - Me.Button60.TabIndex = 74 - Me.Button60.Text = "Plose PDF-Zuweisung" - Me.Button60.UseVisualStyleBackColor = True + Me.Button61.Location = New System.Drawing.Point(759, 79) + Me.Button61.Name = "Button61" + Me.Button61.Size = New System.Drawing.Size(145, 33) + Me.Button61.TabIndex = 72 + Me.Button61.Text = "TEST NCTS FROM EXG" + Me.Button61.UseVisualStyleBackColor = True ' 'usrctlProcedures ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.Controls.Add(Me.Button61) Me.Controls.Add(Me.Button59) Me.Controls.Add(Me.Button58) Me.Controls.Add(Me.Button57) @@ -1989,4 +2000,5 @@ Partial Class usrctlProcedures Friend WithEvents Button58 As Button Friend WithEvents Button59 As Button Friend WithEvents Button60 As Button + Friend WithEvents Button61 As Button End Class diff --git a/UID/usrctlProcedures.resx b/UID/usrctlProcedures.resx index c9977e7..508fc32 100644 --- a/UID/usrctlProcedures.resx +++ b/UID/usrctlProcedures.resx @@ -123,10 +123,4 @@ True - - True - - - True - \ No newline at end of file diff --git a/UID/usrctlProcedures.vb b/UID/usrctlProcedures.vb index 19d8398..f14db7a 100644 --- a/UID/usrctlProcedures.vb +++ b/UID/usrctlProcedures.vb @@ -5147,6 +5147,197 @@ OPTION (MAXRECURSION 1000);", "AVISO") ' Return Nothing End Function + Private Sub Button61_Click(sender As Object, e As EventArgs) Handles Button61.Click + Dim referenz As String = InputBox("Bitte EXG-Referenz eingeben (mit % am Ende):", "NCTS-Test aus EXG", "4801/26033344%") + If String.IsNullOrWhiteSpace(referenz) Then Exit Sub + + VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" + VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "SUB" + + Try + Dim saveFile = TestNCTSFromEXG(referenz.Trim(), True, "T1") + MsgBox("NCTS-Test erfolgreich!" & vbCrLf & saveFile) + Process.Start(saveFile) + Catch ex As Exception + MsgBox("Fehler beim NCTS-Test:" & vbCrLf & ex.Message) + End Try + End Sub + Shared Function GET_IDsByBezugsNr(bezugsNr As String) As List(Of Integer) + Dim ids As New List(Of Integer) + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT exg_Id FROM tblDakosy_EXG WHERE exg_ObjectName LIKE @bezugsNr ORDER BY exg_ObjectName", conn) + cmd.Parameters.AddWithValue("@bezugsNr", bezugsNr.Replace("[", "[[]").Replace("%", "[%]").Replace("_", "[_]") & "[_]EXG[0-9]%") + + Using dr = cmd.ExecuteReader() + While dr.Read() + ids.Add(Convert.ToInt32(dr("exg_Id"))) + End While + End Using + End Using + End Using + + Return ids + End Function + + Shared Function TestNCTSFromEXG(bezugsNrEXG As String, Optional sendFTP As Boolean = False, Optional nctsArt As String = "T1") As String + Dim exgIds As List(Of Integer) = GET_IDsByBezugsNr(bezugsNrEXG) + + If exgIds.Count = 0 Then + Throw New Exception("Keine EXG-Gestellungen gefunden für: " & bezugsNrEXG) + End If + + Console.WriteLine("EXG-Test: " & exgIds.Count & " Gestellungen gefunden.") + + Dim BezugsNr As String = "TEST_EXG_" & Now.ToString("MMddHHmmss") + Dim NCTS_OUT As New DAKOSY_Worker.cDakosyNCTSOut004 + Dim DY_ANM As New cDakosy_Zollanmeldungen + Dim firma As String = "" + Dim niederlassung As String = "" + Dim firstEXG As Boolean = True + + NCTS_OUT.ncts_ObjectName = BezugsNr + + 'EXG-Daten laden und NCTS befüllen + For Each exgId In exgIds.Distinct() + Dim EXG As New DAKOSY_Worker.cDakosyEXG + EXG.exg_Id = exgId + + If Not EXG.LOAD(True) Then Throw New Exception("EXG nicht gefunden: " & exgId) + If EXG.exg_POSITION Is Nothing OrElse EXG.exg_POSITION.Count = 0 Then Throw New Exception("EXG ohne Positionen: " & exgId) + + If firstEXG Then + firma = EXG.exg_firma + niederlassung = EXG.exg_niederlassung + firstEXG = False + Else + If firma <> EXG.exg_firma OrElse niederlassung <> EXG.exg_niederlassung Then + Throw New Exception("EXG-Datensätze gehören zu unterschiedlichen Firmen oder Niederlassungen.") + End If + End If + + DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr) '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + Console.WriteLine("TEST NCTS: EXG übernommen: " & EXG.exg_ObjectName) + + + Dim HC = NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Last() + + Console.WriteLine("EXG: " & EXG.exg_ObjectName) + Console.WriteLine("EXG Versender: " & Convert.ToString(EXG.exg_Consignor_Name)) + Console.WriteLine("EXG Empfänger: " & Convert.ToString(EXG.exg_Consignee_Name)) + Console.WriteLine("NCTS Versender: " & Convert.ToString(HC.nctsHC_Consignor_Name)) + Console.WriteLine("NCTS Empfänger: " & Convert.ToString(HC.nctsHC_Consignee_Name)) + + + Next + + + If NCTS_OUT.ncts_HOUSE_CONSIGNMENT Is Nothing OrElse NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Count = 0 Then + Throw New Exception("Keine NCTS-House-Consignments erzeugt.") + End If + + 'Neue Zollanmeldung erstellen + DY_ANM.dy_ART = nctsArt + DY_ANM.dy_BezugsNr = BezugsNr + + If Not DY_ANM.SAVE() OrElse DY_ANM.dy_Id <= 0 Then + Throw New Exception("NCTS-Zollanmeldung konnte nicht erstellt werden.") + End If + + 'NCTS mit der neuen Zollanmeldung verknüpfen + NCTS_OUT.ncts_ObjectName = BezugsNr + NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id + NCTS_OUT.ncts_Trans_Referenz = BezugsNr & "_" & Now.ToString("ddMMyyHHmmSS") 'Eindeutig + NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB + NCTS_OUT.ncts_LetzteBearbeitung = Now + NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB + NCTS_OUT.ncts_firma = If(firma, "VERAG") + NCTS_OUT.ncts_niederlassung = If(niederlassung, "SUB") + + 'CheckNCTSStringLengths(NCTS_OUT) + If Not NCTS_OUT.SAVE_ALL() Then + Throw New Exception("NCTS-Daten konnten nicht gespeichert werden. DY-ID: " & DY_ANM.dy_Id) + End If + + 'NCTS-XML erstellen + Dim saveFile As String = "" + + + '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + If Not cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then + Throw New Exception("NCTS-XML konnte nicht erzeugt werden.") + End If + + If String.IsNullOrWhiteSpace(saveFile) OrElse Not System.IO.File.Exists(saveFile) Then + Throw New Exception("NCTS-XML-Datei fehlt.") + End If + + 'Optional an DAKOSY senden + If sendFTP Then + If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, firma) Then + DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03) + DY_ANM.UPDATE_DATA() + DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId) + Else + DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09) + Throw New Exception("NCTS-FTP-Versand fehlgeschlagen. DY-ID: " & DY_ANM.dy_Id) + End If + End If + + Console.WriteLine("TEST NCTS: " & BezugsNr & " / DY-ID: " & DY_ANM.dy_Id) + Return saveFile + End Function + Private Shared Sub CheckNCTSStringLengths(NCTS_OUT As cDakosyNCTSOut004) + Using conn = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL + + Dim lengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + + Using cmd As New SqlClient.SqlCommand(" + SELECT c.name, t.name AS DataType, c.max_length + FROM sys.columns c + INNER JOIN sys.types t ON c.user_type_id = t.user_type_id + WHERE c.object_id = OBJECT_ID('dbo.tblDakosy_NCTSOut004') + AND t.name IN ('varchar', 'nvarchar', 'char', 'nchar')", conn) + + Using dr = cmd.ExecuteReader() + While dr.Read() + Dim maxLen As Integer = CInt(dr("max_length")) + If maxLen = -1 Then Continue While + Dim dataType As String = CStr(dr("DataType")) + If dataType = "nvarchar" OrElse dataType = "nchar" Then maxLen \= 2 + lengths.Add(CStr(dr("name")), maxLen) + End While + End Using + End Using + + Dim errors As New List(Of String) + + For Each prop In NCTS_OUT.GetType().GetProperties() + If prop.PropertyType IsNot GetType(String) OrElse Not prop.CanRead Then Continue For + If prop.GetIndexParameters().Length > 0 Then Continue For + If Not lengths.ContainsKey(prop.Name) Then Continue For + + Dim value As String = TryCast(prop.GetValue(NCTS_OUT, Nothing), String) + If value Is Nothing Then Continue For + + Dim maxLen As Integer = lengths(prop.Name) + Dim actualBytes As Integer = System.Text.Encoding.GetEncoding(1252).GetByteCount(value) + If actualBytes > maxLen Then + errors.Add(prop.Name & ": " & actualBytes & "/" & maxLen & " Bytes - " & value.Substring(0, Math.Min(value.Length, 100))) + End If + Next + + If errors.Count > 0 Then + MsgBox("Zu lange NCTS-Felder:" & vbCrLf & String.Join(vbCrLf, errors)) + Throw New Exception("Zu lange NCTS-Felder:" & vbCrLf & String.Join(vbCrLf, errors)) + End If + If lengths.Count = 0 Then + Throw New Exception("Keine Spalten für tblDakosy_NCTSOut004 gefunden. Datenbank oder Schema prüfen.") + End If + End Using + + End Sub End Class diff --git a/initATLASAufschubkonten/cWorker_AES_EXG.vb b/initATLASAufschubkonten/cWorker_AES_EXG.vb index 1431830..6d883c7 100644 --- a/initATLASAufschubkonten/cWorker_AES_EXG.vb +++ b/initATLASAufschubkonten/cWorker_AES_EXG.vb @@ -1,4 +1,5 @@ Imports DAKOSY_Worker +Imports VERAG_PROG_ALLGEMEIN Public Class cWorker_AES_EXG Public Shared Dateiname = "" @@ -56,7 +57,8 @@ Public Class cWorker_AES_EXG EXG.exg_CountryOfDestination = RESP.HeaderData.CountryOfDestination EXG.exg_ReferenceNumberUCR = RESP.HeaderData.ReferenceNumberUCR - frmDYNachrichtenVerarbeitung.setFirmaNL(VWI.Transaktion.IOPartner, VWI.Transaktion.IODivision3, EXG.exg_firma, EXG.exg_niederlassung) + frmDYNachrichtenVerarbeitung.setFirmaNL(VWI.Transaktion.IOPartner, VWI.Transaktion.IODivision3, EXG.exg_firma, EXG.exg_niederlassung, EXG.exg_ObjectName) + ' frmDYNachrichtenVerarbeitung.tryGetFirmaNiederlassung(EXG.exg_firma, EXG.exg_niederlassung, If(EXG.exg_Representative_ContactPerson_EMailAddress, "").ToString, EXG.exg_ObjectName) If RESP.HeaderData.Consignee IsNot Nothing Then EXG.exg_Consignee_Name = RESP.HeaderData.Consignee.Name @@ -82,13 +84,23 @@ Public Class cWorker_AES_EXG EXG.exg_Consignor_SubsidiaryNumber = RESP.HeaderData.Exporter.SubsidiaryNumber End If - + EXG.exg_POSITION.Clear() If RESP.GoodsItem IsNot Nothing Then For Each ITEM In RESP.GoodsItem Dim EXG_ITEM As New cDakosy_EXG_Position EXG_ITEM.exgPos_GoodsItemNumber = ITEM.GoodsItemNumber - EXG_ITEM.exgPos_CommodityCode = ITEM.HarmonizedSystemSubHeadingCode & ITEM.CombinedNomenclatureCode + + + 'Tarifnummer prüfen und zusammenstellen + Dim hsCode As String = If(ITEM.HarmonizedSystemSubHeadingCode, "").Trim() + Dim cnCode As String = If(ITEM.CombinedNomenclatureCode, "").Trim() + EXG_ITEM.exgPos_CommodityCode = hsCode & cnCode + If (hsCode <> "" AndAlso hsCode.Length <> 6) OrElse (cnCode <> "" AndAlso cnCode.Length <> 2) OrElse (hsCode = "" AndAlso cnCode <> "") Then + Debug.WriteLine("Ungültige Warentarifnummer in Position " & ITEM.GoodsItemNumber & ": " & EXG_ITEM.exgPos_CommodityCode) + End If + + EXG_ITEM.exgPos_DescriptionOfGoods = ITEM.DescriptionOfGoods EXG_ITEM.exgPos_NetMass = ITEM.NetMass EXG_ITEM.exgPos_GrossMass = ITEM.GrossMass @@ -138,90 +150,76 @@ Public Class cWorker_AES_EXG '---------------------------------------------------------------------- 'Wenn markiert wurde, dass die NCTS Daten ergänzt werden sollten '---------------------------------------------------------------------- - Dim testDY = True - If testDY Or (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then - Console.WriteLine("EXG: NCTS Verarbeitung starten...") - '---------------------------------------------------------------------- - 'NCTS BEFÜLLEN! - '---------------------------------------------------------------------- - Dim NCTS_OUT = fillNCTS_WithEXG_AutoFill(EXG, "TEEEEEEESTTT") - '---------------------------------------------------------------------- - '---------------------------------------------------------------------- - testDY = True + ' Dim testDY = True + '---------------------------------------------------------------------- + 'NCTS aktualisieren und nach letztem EXG-Rücklauf senden + '---------------------------------------------------------------------- + If EXG.exg_AutoFill_DyId IsNot Nothing Then + Dim dyId As Integer = Convert.ToInt32(EXG.exg_AutoFill_DyId) - 'Prüfen ob alle EXG Daten gekommen sind --> NCTS Senden! - If testDY Or (cDakosyEXG.isFillNCTS_ID_ALLCompleted(EXG.exg_AutoFill_DyId)) Then + If dyId > 0 Then + Dim DY_ANM As New cDakosy_Zollanmeldungen(dyId) + Dim NCTS_OUT = fillNCTS_WithEXG_AutoFill(EXG, "") '<<<<<-- Befüllung der NCTS-Daten mit den EXG-Daten. Danach wird geprüft, ob alle Positionen befüllt wurden. + + If NCTS_OUT Is Nothing Then + Throw New Exception("NCTS-Befüllung fehlgeschlagen. EXG-ID: " & EXG.exg_Id) + End If - Dim DY_ANM = New cDakosy_Zollanmeldungen(EXG.exg_AutoFill_DyId) - If NCTS_OUT IsNot Nothing Then + If cDakosyEXG.isFillNCTS_ID_ALLCompleted(dyId) Then + 'Alle EXG-Rückmeldungen vollständig: NCTS ergänzen und versenden + Dim BezugsNr As String = NCTS_OUT.ncts_ObjectName + If String.IsNullOrWhiteSpace(BezugsNr) Then BezugsNr = DY_ANM.dy_BezugsNr + If String.IsNullOrWhiteSpace(BezugsNr) Then Throw New Exception("NCTS-Bezugsnummer fehlt: " & dyId) - 'Dim cDY As New cDakosyNCTSOut(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB) + Dim firma As String = If(String.IsNullOrWhiteSpace(EXG.exg_firma), "VERAG", EXG.exg_firma) + Dim niederlassung As String = If(String.IsNullOrWhiteSpace(EXG.exg_niederlassung), "SUB", EXG.exg_niederlassung) + Dim nctsArt As String = If(String.IsNullOrWhiteSpace(DY_ANM.dy_ART), "T2", DY_ANM.dy_ART) + + 'AVISO und Sendung anhand der bestehenden Zollanmeldung laden + Dim AVISO As cAviso = Nothing + Dim SENDUNG As cSendungen = Nothing + + If DY_ANM.dy_AvisoId IsNot Nothing AndAlso Convert.ToInt32(DY_ANM.dy_AvisoId) > 0 Then + AVISO = cAviso.getAvisoById(DY_ANM.dy_AvisoId) + End If + + If DY_ANM.dy_SendungsId IsNot Nothing AndAlso Convert.ToInt32(DY_ANM.dy_SendungsId) > 0 Then + SENDUNG = New cSendungen(Convert.ToInt32(DY_ANM.dy_SendungsId)) + End If + + 'AVISO-Vorblendung wie bei SendNCTS übernehmen + If AVISO IsNot Nothing Then + cDakosyNCTSOut004.loaddataFromAVISO(AVISO, SENDUNG, "", BezugsNr, NCTS_OUT, firma, False) + End If + + 'Bestehende NCTS-Anmeldung weiterverwenden + NCTS_OUT.ncts_ObjectName = BezugsNr NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB NCTS_OUT.ncts_LetzteBearbeitung = Now NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB - NCTS_OUT.ncts_firma = EXG.exg_firma - NCTS_OUT.ncts_niederlassung = EXG.exg_niederlassung - ' DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(NCTS_OUT, Me, DY_ANM, Me.FIRMA_DY) + NCTS_OUT.ncts_firma = firma + NCTS_OUT.ncts_niederlassung = niederlassung + NCTS_OUT.ncts_Declarationtype = nctsArt + NCTS_OUT.ncts_Trans_Referenz = BezugsNr & "_" & Now.ToString("ddMMyyHHmmss") - 'VON HIER löschnen ohne test - If testDY OrElse NCTS_OUT.SAVE_ALL() Then - - - If If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Nur speichern wenn bei test exg_AutoFill_DyId befüllt ist - NCTS_OUT.SAVE_ALL() - End If - Dim saveFile = "" - - If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then - - If saveFile <> "" Then - - frmStartOptions.copyFile(saveFile, "\\datenarchiv\Datenarchiv\DAKOSY\ECHTSYSTEM\EXG\upl\NCTS\") - - End If - End If - - Else - 'BIS HIER löschnen ohne test - - If NCTS_OUT.SAVE_ALL() Then - - Dim saveFile = "" - If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then - If saveFile <> "" Then - - If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, NCTS_OUT.ncts_ObjectName, DY_ANM.dy_Id, NCTS_OUT.ncts_firma) Then - DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03) - 'If SENDUNG IsNot Nothing Then SENDUNG.SET_VGMA() ' MA Vorgeschrieben in Sendung setzen. - Else - DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09) - MsgBox("Sendefehler!") - End If - - End If - End If - End If + If NCTS_OUT.ncts_HOUSE_CONSIGNMENT Is Nothing OrElse NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Count = 0 Then + Throw New Exception("Keine NCTS-House-Consignments vorhanden: " & dyId) End If - End If + 'Identischer Speicher- und Versandweg wie bei SendNCTS + Dim result As String = cDakosyNCTSOut004.SaveAndSendNCTS( + NCTS_OUT, DY_ANM, BezugsNr, firma, True, SENDUNG, "CREATE", nctsArt) - If Not testDY Or If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Kann ganz weg kenn kein test - - DY_ANM.UPDATE_DATA() - - 'Beim Senden soll die Sendung überhnommen + tblSnd_VG_MA gesetzt werden --> damit gleich gesehen wird, dass der Akt in Bearbeitung ist. - DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId) + Console.WriteLine("EXG: Automatischer NCTS-Versand: " & BezugsNr & " - " & result) End If - End If End If - '---------------------------------------------------------------------- 'QULAIFIZIERUNG! '---------------------------------------------------------------------- @@ -298,24 +296,24 @@ Public Class cWorker_AES_EXG End Function Shared Function fillNCTS_WithEXG_AutoFill(EXG As cDakosyEXG, ObjectName As String) As cDakosyNCTSOut004 + If EXG Is Nothing OrElse EXG.exg_AutoFill_DyId Is Nothing Then Return Nothing - If (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then - Dim NCTS_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(EXG.exg_AutoFill_DyId, True) + Dim dyId As Integer = Convert.ToInt32(EXG.exg_AutoFill_DyId) + If dyId <= 0 Then Return Nothing - If NCTS_OUT Is Nothing Then - NCTS_OUT = New DAKOSY_Worker.cDakosyNCTSOut004 - NCTS_OUT.ncts_ObjectName = ObjectName - End If + Dim NCTS_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(dyId, True) + If NCTS_OUT Is Nothing Then Throw New Exception("NCTS-Entwurf nicht gefunden. DY-ID: " & dyId) - Console.WriteLine("EXG: NCTS befüllen...") - DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, ObjectName) - Console.WriteLine("EXG: NCTS updaten...") - cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id) 'Eintrag, dass AutoFill durchgelaufen ist + Console.WriteLine("EXG: NCTS befüllen: " & EXG.exg_Id) + DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, NCTS_OUT.ncts_ObjectName) - Return NCTS_OUT + If Not NCTS_OUT.SAVE_ALL() Then + Throw New Exception("NCTS konnte nicht gespeichert werden. DY-ID: " & dyId) End If - Return Nothing + cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id) + + Return NCTS_OUT End Function diff --git a/initATLASAufschubkonten/frmDYNachrichtenVerarbeitung.vb b/initATLASAufschubkonten/frmDYNachrichtenVerarbeitung.vb index 585613b..ff40469 100644 --- a/initATLASAufschubkonten/frmDYNachrichtenVerarbeitung.vb +++ b/initATLASAufschubkonten/frmDYNachrichtenVerarbeitung.vb @@ -946,7 +946,13 @@ Public Class frmDYNachrichtenVerarbeitung End If End Sub - Shared Sub setFirmaNL(iopartner As String, division As String, ByRef firma As String, ByRef nl As String) + Shared Sub setFirmaNL(iopartner As String, division As String, ByRef firma As String, ByRef nl As String, BezugsNr As String) + + If iopartner = "UNAT" Then + firma = "UNISPED" + nl = "SUB" + End If + If division Is Nothing Then Exit Sub If division <> "" Then Select Case division @@ -979,15 +985,40 @@ Public Class frmDYNachrichtenVerarbeitung nl = "AMBAR" Case "IME" firma = "IMEX" - nl = "IMX" + nl = "SUB" Case "UNAT", "ATSPED" firma = "UNISPED" - nl = "ATSP" + nl = "SUB" End Select End If + + If String.IsNullOrWhiteSpace(firma) OrElse String.IsNullOrWhiteSpace(nl) Then + If Not String.IsNullOrWhiteSpace(BezugsNr) AndAlso BezugsNr.Length >= 4 Then + Dim neueFirma As String = "" + Dim neueNL As String = "" + + Select Case BezugsNr.Substring(0, 4) + Case "5501" : neueFirma = "IMEX" : neueNL = "SUB" + Case "5701" : neueFirma = "AMBAR" : neueNL = "SBG" + Case "4801", "4802" : neueFirma = "ATILLA" : neueNL = "SUB" + Case "5801" : neueFirma = "FRONTOFFICE" : neueNL = "SUB" + Case "5802" : neueFirma = "FRONTOFFICE" : neueNL = "KLIPP" + Case "5003" : neueFirma = "VERAG" : neueNL = "SBG" + Case "5103" : neueFirma = "VERAG" : neueNL = "WAI" + Case "5303" : neueFirma = "VERAG" : neueNL = "NKD" + Case "4803", "4805", "4811", "7001" : neueFirma = "VERAG" : neueNL = "SUB" + Case "5601" : neueFirma = "UNISPED" : neueNL = "SUB" + End Select + + If String.IsNullOrWhiteSpace(firma) Then firma = neueFirma + If String.IsNullOrWhiteSpace(nl) Then nl = neueNL + End If + End If + + End Sub @@ -1004,7 +1035,7 @@ Public Class frmDYNachrichtenVerarbeitung Function getVerahrensartFromBezugsNr(bezugsNr) As String Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL - If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_NCTSOut004 WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS" + If SQL.getValueTxtBySql("Select TOP 1 COUNT(*) FROM tblDakosy_NCTSOut004 WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS" If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_NCTSOut WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS" If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_EZA WHERE eza_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "EZA" Return "" @@ -7214,6 +7245,7 @@ Public Class frmDYNachrichtenVerarbeitung Public Shared Sub tryGetFirmaNiederlassung(ByRef firma As String, ByRef niederlassung As String, Mail As String, BezugsNr As String) + If Mail.Contains("@imex") Then firma = "IMEX" niederlassung = "IMEX"