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

@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("4.2.8.5")>
<Assembly: AssemblyFileVersion("4.2.8.5")>
<Assembly: AssemblyVersion("4.2.8.6")>
<Assembly: AssemblyFileVersion("4.2.8.6")>

View File

@@ -306,19 +306,46 @@ Public Class frmSendungsdetailsNEU
End If
End If
Dim isVerimex As Boolean = (VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERIMEX")
If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERIMEX" Then
Dim invalidPrepaper As Boolean =
(cboVorpapier.Text.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(cboVorpapier.Text) AndAlso txtVorpapierPos.Text.Trim = "") OrElse
(cboVorpapier2.Text.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(cboVorpapier2.Text) AndAlso txtVorpapier2Pos.Text.Trim = "") OrElse
(cboVorpapier3.Text.Trim <> "" AndAlso Not IsValid18AlphaNumericCode(cboVorpapier3.Text) AndAlso txtVorpapier3Pos.Text.Trim = "")
If (cboVorpapier.Text.Trim <> String.Empty And txtVorpapierPos.Text.Trim = String.Empty) Or
(cboVorpapier2.Text.Trim <> String.Empty And txtVorpapier2Pos.Text.Trim = String.Empty) Or
(cboVorpapier3.Text.Trim <> String.Empty And txtVorpapier3Pos.Text.Trim = String.Empty) Then
If showErr AndAlso MsgBox("Pre-Paper Position is not filled. Really continue?", vbYesNoCancel) <> vbYes Then
Dim missingPosition As Boolean =
(cboVorpapier.Text.Trim <> "" AndAlso txtVorpapierPos.Text.Trim = "" Or cboVorpapier.Text.Trim = "" AndAlso txtVorpapierPos.Text.Trim <> "") OrElse
(cboVorpapier2.Text.Trim <> "" AndAlso txtVorpapier2Pos.Text.Trim = "" Or cboVorpapier2.Text.Trim = "" AndAlso txtVorpapier2Pos.Text.Trim <> "") OrElse
(cboVorpapier3.Text.Trim <> "" AndAlso txtVorpapier3Pos.Text.Trim = "" Or cboVorpapier3.Text.Trim = "" AndAlso txtVorpapier3Pos.Text.Trim <> "")
Dim hasIssue As Boolean
If isVerimex Then
hasIssue = (invalidPrepaper OrElse missingPosition)
Else
hasIssue = (invalidPrepaper OrElse missingPosition)
End If
Dim InfoMsg As String
If isVerimex Then
InfoMsg = "Pre-Paper/PosNr data is invalid or incomplete. Continue?"
Else
InfoMsg = "Vorpapier-Nr/PosNr ist ungültig oder nicht vollständig, fortfahren?"
End If
If hasIssue Then
If showErr Then
If MsgBox(InfoMsg, vbYesNoCancel) <> vbYes Then
Return False
End If
End If
End If
If cntlAvisierer_Abf.Visible = False And
cntlAuftr_Abf.Visible = False And
cntlEmpf_Abf.Visible = False And
@@ -8231,4 +8258,12 @@ Public Class frmSendungsdetailsNEU
End If
End Sub
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
End Class

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