Gestellung, etc.

This commit is contained in:
2026-05-28 14:30:11 +02:00
parent a5320bb2d9
commit d8db88ec25
3 changed files with 144 additions and 57 deletions

View File

@@ -37,32 +37,38 @@ Public Class usrCntlSND_ATBGestellung
Dim f As frmSendungsdetailsNEU = Me.FindForm
If f.SAVE_ME() Then
Dim INfoVorpapier As String = ""
If Not checkSendungenVorpapierte(f.SENDUNG_LIST, INfoVorpapier) Then MsgBox(INfoVorpapier) : Exit Sub
SND = f.SENDUNG_LIST(f.CURRENT_INDEX)
If Not IsNumeric(SND.AbfertigungsNr) OrElse CInt(SND.AbfertigungsNr) < 100000 Then MsgBox("Abfertigungsnummer angeben!") : Exit Sub
If Not IsNumeric(SND.AbfertigungsNr) OrElse CInt(SND.AbfertigungsNr) < 100000 Then MsgBox("Abfertigungsnummer angeben!") : Exit Sub
If Not IsNumeric(SND.tblSnd_Warenwert) OrElse CInt(SND.tblSnd_Warenwert) < 0 Then MsgBox("Warenwert angeben!") : Exit Sub
If Not IsNumeric(SND.tblSnd_Warenwert) OrElse CInt(SND.tblSnd_Warenwert) < 0 Then MsgBox("Warenwert angeben!") : Exit Sub
If (SND.tblSnd_WarenwertWaehrung) Is Nothing Then MsgBox("Währungseinheit angeben!") : Exit Sub
If (SND.tblSnd_WarenwertWaehrung) Is Nothing Then MsgBox("Währungseinheit angeben!") : Exit Sub
If SND.tblSnd_WarenwertWaehrung <> "EUR" Then
Dim kurs As New cFremdwaehrungskurse(SND.tblSnd_WarenwertWaehrung)
If kurs.hasEntry Then
WarenwertEUR = Math.Round(kurs.EXCHANGE_CURTOEUR(SND.tblSnd_Warenwert, SND.tblSnd_WarenwertWaehrung, CDate(Today)), 2)
Else
MsgBox("Umrechnungskurs kann nicht ermittelt werden, bitte EUR-Betrag eingeben!")
Exit Sub
End If
If SND.tblSnd_WarenwertWaehrung <> "EUR" Then
Dim kurs As New cFremdwaehrungskurse(SND.tblSnd_WarenwertWaehrung)
If kurs.hasEntry Then
WarenwertEUR = Math.Round(kurs.EXCHANGE_CURTOEUR(SND.tblSnd_Warenwert, SND.tblSnd_WarenwertWaehrung, CDate(Today)), 2)
Else
MsgBox("Umrechnungskurs kann nicht ermittelt werden, bitte EUR-Betrag eingeben!")
Exit Sub
WarenwertEUR = SND.tblSnd_Warenwert
End If
Else
WarenwertEUR = SND.tblSnd_Warenwert
End If
If If(SND.tblSnd_ATB_T1, "") = "" Then MsgBox("T1/Vorpapier angeben!") : Exit Sub
If If(SND.tblSnd_ATB_T1, "") = "" Then MsgBox("MRN (Gestellung) angeben!") : Exit Sub
If Not IsValid18AlphaNumericCode(If(SND.tblSnd_ATB_T1, "")) Then MsgBox("T1/Vorpapier nicht korrekt (18-stellig)!") : Exit Sub
If If(SND.tblSnd_Zollsystem_Land, "") = "" Then MsgBox("Abf-Land muss angegeben werden!") : Exit Sub
If SND.tblSnd_T1_Frist IsNot Nothing AndAlso IsDate(SND.tblSnd_T1_Frist) Then
If SND.tblSnd_T1_Frist IsNot Nothing AndAlso IsDate(SND.tblSnd_T1_Frist) Then
If CDate(SND.tblSnd_T1_Frist) >= Today() Then
'-> OK
Else
@@ -81,62 +87,62 @@ Public Class usrCntlSND_ATBGestellung
End If
Dim Standort As String = ""
Dim firmaID As Integer = -1
Select Case SND.FilialenNr
Case 4803, 4809
Standort = Sicherheiten_Standort.VERAG_AG : firmaID = 1
Case 5601
Standort = Sicherheiten_Standort.UNISPED : firmaID = 21
Case 5701
Standort = Sicherheiten_Standort.AMBAR : firmaID = 24
Case 4810, 5103, 5901
Standort = Sicherheiten_Standort.VERAG_GMBH : firmaID = 2
Case 5501
Standort = Sicherheiten_Standort.IMEX : firmaID = 20
End Select
'sonderfälle lt. Mestan
If SND.tblSnd_Zollsystem_Land = "DE" Then
Dim Standort As String = ""
Dim firmaID As Integer = -1
Select Case SND.FilialenNr
Case 5501, 4803, 4809, 5103
Case 4803, 4809
Standort = Sicherheiten_Standort.VERAG_AG : firmaID = 1
Case 5601
Standort = Sicherheiten_Standort.UNISPED : firmaID = 21
Case 5701
Standort = Sicherheiten_Standort.AMBAR : firmaID = 24
Case 4810, 5103, 5901
Standort = Sicherheiten_Standort.VERAG_GMBH : firmaID = 2
Case 5501
Standort = Sicherheiten_Standort.IMEX : firmaID = 20
End Select
ElseIf SND.tblSnd_Zollsystem_Land = "AT" Then
'sonderfälle lt. Mestan
If SND.tblSnd_Zollsystem_Land = "DE" Then
If SND.tblSnd_Abfertigungsart_ID = 1 Then 'ZA
Standort = Sicherheiten_Standort.VERAG_CS : firmaID = 11
ElseIf SND.tblSnd_Abfertigungsart_ID = 38 Then 'EV-Verz
Select Case SND.FilialenNr
Case 4803, 5303, 4809, 5103
Standort = Sicherheiten_Standort.VERAG_CS : firmaID = 11
Case 5501, 4803, 4809, 5103
Standort = Sicherheiten_Standort.VERAG_GMBH : firmaID = 2
End Select
ElseIf SND.tblSnd_Zollsystem_Land = "AT" Then
If SND.tblSnd_Abfertigungsart_ID = 1 Then 'ZA
Standort = Sicherheiten_Standort.VERAG_CS : firmaID = 11
ElseIf SND.tblSnd_Abfertigungsart_ID = 38 Then 'EV-Verz
Select Case SND.FilialenNr
Case 4803, 5303, 4809, 5103
Standort = Sicherheiten_Standort.VERAG_CS : firmaID = 11
End Select
End If
End If
End If
If isZollern(SND) Then
If isZollern(SND) Then
Standort = Sicherheiten_Standort.ZOLLERN : firmaID = 99
Standort = Sicherheiten_Standort.ZOLLERN : firmaID = 99
End If
End If
Dim GesSichRef = New VERAG_PROG_ALLGEMEIN.cAufschubKonten(Standort, firmaID)
If GesSichRef Is Nothing Then MsgBox("Verwahrungsreferenz kann nicht ermittelt werden!") : Exit Sub
Dim GesSichRef = New VERAG_PROG_ALLGEMEIN.cAufschubKonten(Standort, firmaID)
If GesSichRef Is Nothing Then MsgBox("Verwahrungsreferenz kann nicht ermittelt werden!") : Exit Sub
Dim saldo = CDbl(GesSichRef.CalcSaldo())
Dim sicherheitsbertrag As Double = WarenwertEUR * (GesSichRef.brgakto_gs_zollsatz / 100)
Dim sicherheitsbertrag As Double = WarenwertEUR * (GesSichRef.brgakto_gs_zollsatz / 100)
If sicherheitsbertrag > saldo Then
If MsgBox(Standort & vbNewLine & "Gestellung kann NICHT durchgeführt werden!" & vbNewLine & "Eingetragener Warenwert in EUR: " & WarenwertEUR & " (Sicherheitsbetrag: " & sicherheitsbertrag & ") übersteigt den vorhandenen Sicherheitssaldo von: " & saldo & vbNewLine & "Trotzdem fortfahren", vbYesNoCancel) <> vbYes Then Exit Sub
End If
If sicherheitsbertrag > saldo Then
If MsgBox(Standort & vbNewLine & "Gestellung kann NICHT durchgeführt werden!" & vbNewLine & "Eingetragener Warenwert in EUR: " & WarenwertEUR & " (Sicherheitsbetrag: " & sicherheitsbertrag & ") übersteigt den vorhandenen Sicherheitssaldo von: " & saldo & vbNewLine & "Trotzdem fortfahren", vbYesNoCancel) <> vbYes Then Exit Sub
End If
Dim frMZA As New SDL.frmZollanmeldung("AA", Nothing, AVISO, SND, Now.ToString("yy"), GesSichRef, Standort, WarenwertEUR, gsnr_proLKW_global)
@@ -395,4 +401,50 @@ Public Class usrCntlSND_ATBGestellung
End Function
Private Function IsValid18AlphaNumericCode(value As String) As Boolean
value = value.Trim()
If value.Length <> 18 Then Return False
Return value.All(Function(c) Char.IsLetterOrDigit(c))
End Function
Private Function checkSendungenVorpapierte(list As List(Of cSendungen), ByRef MsgInfo As String) As Boolean
Dim index As Integer = 1
Dim existingVorpapier As Boolean = False
For Each SND As cSendungen In list
Dim existing As Boolean =
(SND.tblSnd_Vorpapier.ToString.Trim <> "") OrElse
(SND.tblSnd_Vorpapier2.ToString.Trim <> "") OrElse
(SND.tblSnd_Vorpapier3.ToString.Trim <> "")
If existing Then existingVorpapier = existing
Dim invalidPrepaper As Boolean =
(SND.tblSnd_Vorpapier.ToString.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(SND.tblSnd_Vorpapier.ToString.Trim)) OrElse
(SND.tblSnd_Vorpapier2.ToString.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(SND.tblSnd_Vorpapier2.ToString.Trim)) OrElse
(SND.tblSnd_Vorpapier3.ToString.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(SND.tblSnd_Vorpapier3.ToString.Trim))
If invalidPrepaper Then
MsgInfo = "Vorpapier-Nr bei Sendung " & index & " ist ungültig!"
Return False
End If
index += 1
Next
If Not existingVorpapier Then
MsgInfo = "keine Vorpapier-Nr bei den Sendung(en) hinterlegt!"
End If
Return existingVorpapier
End Function
End Class