This commit is contained in:
2026-10-23 23:24:29 +02:00
parent ed2e63a004
commit b51ec8adc9
5 changed files with 561 additions and 97 deletions

View File

@@ -3090,7 +3090,8 @@ Public Class cDakosyNCTSOut004
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
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, Optional VersLandAusVersender As Boolean = False, Optional BestLandAusEmpfaenger As Boolean = False) As cDakosyNCTSOut004
If NCTS_OUT Is Nothing Then
NCTS_OUT = New DAKOSY_Worker.cDakosyNCTSOut004
@@ -3129,12 +3130,18 @@ Public Class cDakosyNCTSOut004
'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()
If String.IsNullOrWhiteSpace(HC.nctsHC_CountryOfDispatch) Then
HC.nctsHC_CountryOfDispatch = If(exg.exg_Consignor_Country, "").Trim().ToUpperInvariant()
'Versendungs- und Bestimmungsland aus EXG
HC.nctsHC_CountryOfDispatch = exg.exg_CountryOfDispatch
HC.nctsHC_CountryOfDestination = exg.exg_CountryOfDestination
'Optionale Übernahme aus Versender- bzw. Empfängeradresse
If VersLandAusVersender AndAlso Not String.IsNullOrWhiteSpace(Convert.ToString(HC.nctsHC_Consignor_Country)) Then
HC.nctsHC_CountryOfDispatch = HC.nctsHC_Consignor_Country
End If
If BestLandAusEmpfaenger AndAlso Not String.IsNullOrWhiteSpace(Convert.ToString(HC.nctsHC_Consignee_Country)) Then
HC.nctsHC_CountryOfDestination = HC.nctsHC_Consignee_Country
End If
'UCR bewusst nicht übernehmen
@@ -3205,10 +3212,9 @@ Public Class cDakosyNCTSOut004
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
'Packstücke zunächst ohne Beipackverweise übernehmen
If EXG_POS.exgPos_PACKAGING IsNot Nothing Then
For Each EXG_PK In EXG_POS.exgPos_PACKAGING
@@ -3218,31 +3224,61 @@ Public Class cDakosyNCTSOut004
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
End If
HC.nctsWP_CONSIGNMENT_ITEM.Add(HC_ITEM)
Next
'Beipackverweise erst nach vollständiger Erstellung aller Warenpositionen ermitteln
For Each item In HC.nctsWP_CONSIGNMENT_ITEM
For Each pk In item.nctsHCCI_PACKAGING
'Nur Packstücke mit expliziter Anzahl 0 sind Beipack-Kandidaten
Dim packageCount As String = Convert.ToString(pk.nctsHCCIPK_NumberOfPackages).Trim()
If packageCount <> "0" Then Continue For
Dim shippingMarks As String = Convert.ToString(pk.nctsHCCIPK_ShippingMarks).Trim()
If shippingMarks = "" Then
Debug.WriteLine("NCTS Beipack: Versandzeichen fehlen / EXG " & exg.exg_ObjectName)
Continue For
End If
Dim referencePosition As Integer = 0
'Erste Warenposition mit identischem Versandzeichen und Packstückanzahl > 0 suchen
For i As Integer = 0 To HC.nctsWP_CONSIGNMENT_ITEM.Count - 1
Dim candidate = HC.nctsWP_CONSIGNMENT_ITEM(i)
If candidate Is item Then Continue For
Dim matchingPK = candidate.nctsHCCI_PACKAGING.FirstOrDefault(
Function(p) Val(Convert.ToString(p.nctsHCCIPK_NumberOfPackages)) > 0 AndAlso
String.Equals(Convert.ToString(p.nctsHCCIPK_ShippingMarks).Trim(), shippingMarks, StringComparison.OrdinalIgnoreCase))
If matchingPK IsNot Nothing Then
referencePosition = i + 1
Exit For
End If
Next
If referencePosition > 0 Then
pk.nctsHCCIPK_GoodsItemNumber = referencePosition
Else
Debug.WriteLine("NCTS Beipack: Keine Hauptpackposition für Versandzeichen '" & shippingMarks & "' gefunden / EXG " & exg.exg_ObjectName)
End If
Next
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