diff --git a/Aviso/My Project/AssemblyInfo.vb b/Aviso/My Project/AssemblyInfo.vb index 73eb643..b2a515b 100644 --- a/Aviso/My Project/AssemblyInfo.vb +++ b/Aviso/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/Aviso/frmSendungsdetailsNEU.vb b/Aviso/frmSendungsdetailsNEU.vb index e764e60..645972d 100644 --- a/Aviso/frmSendungsdetailsNEU.vb +++ b/Aviso/frmSendungsdetailsNEU.vb @@ -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 diff --git a/Aviso/usrCntlSND_ATBGestellung.vb b/Aviso/usrCntlSND_ATBGestellung.vb index 919c893..5633313 100644 --- a/Aviso/usrCntlSND_ATBGestellung.vb +++ b/Aviso/usrCntlSND_ATBGestellung.vb @@ -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