Files
SDL/VERAG_PROG_ALLGEMEIN/cAllgemein.vb

2034 lines
96 KiB
VB.net

Imports System.Data.SqlClient
Imports System.IO
Public Class cAllgemein
Public Shared FIRMA As String
Public Shared NIEDERLASSUNG As String 'SUB, WAI, ...
Public Shared ABTEILUNG As String 'QS ZOLL ...
Public Shared STAMMFILIALE As String 'IMEX,UNISPED;ATILLA...
Public Shared WARENORT_ZUGANG As Boolean = False
Public Shared WARENORT As String
Public Shared ATILLA_SND As Boolean = True
Public Shared NEWLOGIN As Boolean = False
Public Shared CLUSTER As String = "" 'Firmenverbund
Public Shared FIRMEN_GRUPPE As String = "VERAGDCS" 'Firmenverbund-Gruppe
' Public Shared SPECIFIC As cSPECIFIC = New cSPECIFIC
Public Shared ERR_OP_GLOBAL As String = ERROR_OP.SHOW
' Public Shared AVISO_SERVER As String = "[BUCHHALTUNG\SQLEXPRESS]"
'Public Shared AVISO_SERVER As String = "[SQL01.verag.ost.dmn\VERAG]"
'Public Shared AVISO_SERVER As String = "[SQLGUIDE.verag.ost.dmn\VERAG]"
Public Shared AVISO_SERVER As String = "[SQLGUIDE01.verag.ost.dmn]" '"[SQLGUIDE01.verag.ost.dmn]"
Public Shared FMZOLL_SERVER As String = "[SQLGUIDE01.verag.ost.dmn]" '"[sqlcluster\verag]" '"[FMZOLL\SQLFMZOLL]"
Public Shared SQLGUIDE01_USED As Boolean = True 'FM-ZOLL Ablöse!!!!
Public Shared AVISO_LAYOUT_NEW As Boolean = False
Public Shared CBAM_LIST As List(Of String) = Nothing
'Public Shared FMZOLL_ATLAS_Datensicherung As String = "\\192.168.0.91\f\FMZoll\Datensicherung\atlas\atlas\fssouzb"
Public Shared FMZOLL_ATLAS_Datensicherung_OLD As String = "\\share01\F\FMZoll\Datensicherung\atlas\atlas\fssouzb"
Public Shared UK_EORI_LTD = "GB078068385000"
Public Shared BÜRO As String
Public Shared PRINTER_BON As String
Public Shared PRINTER_STANDARD As String
Public Shared PRINTER_LIST As ArrayList = Nothing
Public Shared dpi As Integer
Public Shared TESTSYSTEM As Boolean = False
Public Shared PROGNAME = ""
Public Shared PROGID As Integer = 16 'AVISO
Public Shared PROGVERSION As String = ""
Public Shared USRNAME As String
Public Shared ABW_USRNAME As String
'Public Shared USRBER As Integer
Public Shared USRID As Integer
Public Shared USR_VNAME As String
Public Shared USR_NNAME As String
Public Shared USRKURZNAME As String
Public Shared USR_HrFrNAME As String
Public Shared FIRMA_ID As Integer
Public Shared FIRMA_NAME As String
Public Shared AUTO_ABF_NR As Boolean = True
Public Shared BENUTZER_BERECHTIGUNGS_GRUPPEN As cBerechtigungenBenutzerGruppenZuordnung_List = Nothing
Public Shared BENUTZER_BERECHTIGUNGS_GRUPPEN_WHEREIN_SDL As String = "('XXXXXXXX')"
Public Shared PARAMS As cParameterList = Nothing
Public Shared TRANSLATE As cTranslate_LIST = Nothing
Public Shared TRANSLATE_AUTO As cTranslateAuto_LIST = Nothing
Public Shared _LAN As String = "DE" '"EN"
Public Shared SESSION As New cSession
Public Shared _DummyCNT As Integer
Public Shared EMailTOBB_Error As String = "info@verimextransit.com"
Public Shared EMOJI_PATH As String = ""
Shared SQL As New SQL
Public Shared MITARBEITER As cMitarbeiter
Public Shared FIRMEN As List(Of cFirmen)
Public Shared FILIALEN As List(Of cFilialen)
Public Const LeerDatum As Date = #12/30/1899# 'wird als leerer Datumswert verwendet, da sonst Probleme bei Null/Date
Public Shared Sub LOAD_DATA(Optional switchCompany = False, Optional firmaTmp = False, Optional NLTmp = "")
MITARBEITER = New cMitarbeiter
If MITARBEITER.LOAD(USRID) Then
USR_NNAME = MITARBEITER.mit_nname
USR_VNAME = MITARBEITER.mit_vname
_LAN = MITARBEITER.mit_sprache
USR_HrFrNAME = ""
Select Case MITARBEITER.mit_geschlecht
Case "m" : USR_HrFrNAME = "Herr "
Case "w" : USR_HrFrNAME = "Frau "
End Select
USR_HrFrNAME &= MITARBEITER.mit_nname
If switchCompany Then
FIRMA = firmaTmp
NIEDERLASSUNG = If(NLTmp <> "", NLTmp, MITARBEITER.mit_niederlassung)
Else
If FIRMA = "" Then FIRMA = If(MITARBEITER.mit_firma = "BEIDE", "VERAG", MITARBEITER.mit_firma)
End If
cSPECIFIC.FIRMA_BgColor = Drawing.Color.FromArgb(0, 54, 128)
Select Case FIRMA
Case "VERAG"
CLUSTER = "FRONTOFFICE"
Case "IMEX"
STAMMFILIALE = "5501"
CLUSTER = "FRONTOFFICE"
Case "UNISPED"
STAMMFILIALE = "5601"
cSPECIFIC.FIRMA_BgColor = Drawing.Color.FromArgb(200, 0, 0)
CLUSTER = "FRONTOFFICE"
Case "AMBAR"
STAMMFILIALE = "5701"
CLUSTER = "FRONTOFFICE"
Case "ATILLA"
STAMMFILIALE = "4801"
Case "FRONTOFFICE"
STAMMFILIALE = "5801"
CLUSTER = "FRONTOFFICE"
Case "VERIMEX"
STAMMFILIALE = "6001"
CLUSTER = "FRONTOFFICE"
End Select
USRNAME = (MITARBEITER.mit_vname & " " & MITARBEITER.mit_nname)
ABW_USRNAME = MITARBEITER.mit_abweichenderAnzeigename
If NIEDERLASSUNG = "" Then NIEDERLASSUNG = MITARBEITER.mit_niederlassung
If ABTEILUNG = "" Then ABTEILUNG = MITARBEITER.mit_abteilung
Else
MITARBEITER = Nothing
End If
LOAD_PROGRAMM()
LOAD_PARAM()
LOAD_TRANSLATE()
LOAD_TRANSLATE_AUTO()
LOAD_FIRMEN()
LOAD_FILIALEN()
LOAD_CHAT_EMOJIS()
Try 'DRUCKER LADEN
Dim sPrinters As New ArrayList
For Each sPrinter As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
sPrinters.add(sPrinter)
Next
VERAG_PROG_ALLGEMEIN.cAllgemein.PRINTER_LIST = sPrinters
Catch ex As Exception
End Try
If TESTSYSTEM Then
AVISO_SERVER = "[DEVELOPER\DEVSQL]"
FMZOLL_SERVER = "[DEVELOPER\DEVSQL]"
End If
End Sub
Public Shared Sub LOAD_BER()
BENUTZER_BERECHTIGUNGS_GRUPPEN = New cBerechtigungenBenutzerGruppenZuordnung_List(USRID)
BENUTZER_BERECHTIGUNGS_GRUPPEN_WHEREIN_SDL = VERAG_PROG_ALLGEMEIN.cBerechtignunen.GetBenutzerBerechtigungsBezeichnungen_FormatWhereIn_SDL()
End Sub
Public Shared Sub LOAD_CHAT_EMOJIS()
Try
If System.IO.Directory.Exists(DATENVERVER_OPTIONS.getRootDir & "\DOKUMENTE\CHAT_EMOJIS\") Then
Dim EMOJI_SOURCEPATH = DATENVERVER_OPTIONS.getRootDir & "\DOKUMENTE\CHAT_EMOJIS\"
Dim EMOJI_SOURCELIST = System.IO.Directory.GetFiles(EMOJI_SOURCEPATH).ToList
EMOJI_PATH = System.IO.Path.GetFullPath(My.Application.Info.DirectoryPath & "\Resources\CHAT_EMOJIS\")
If Not System.IO.Directory.Exists(EMOJI_PATH) Then
System.IO.Directory.CreateDirectory(EMOJI_PATH)
End If
For Each f In System.IO.Directory.GetFiles(EMOJI_PATH)
Dim fi As New System.IO.FileInfo(f)
If Not System.IO.Directory.GetFiles(EMOJI_PATH).Any(Function(c) c.Equals(fi.Name, StringComparison.OrdinalIgnoreCase)) Then
System.IO.File.Delete(f)
End If
Next
For Each f In System.IO.Directory.GetFiles(EMOJI_SOURCEPATH)
Dim fi As New System.IO.FileInfo(f)
fi.CopyTo(EMOJI_PATH & fi.Name, False)
Next
Else
MsgBox("Fehler: Chat-Emojis Verzeichnis existiert nicht!")
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
Public Shared Sub LOAD_PROGRAMM()
Dim prog_Name = My.Application.Info.ProductName
Select Case prog_Name.ToUpper
Case "AVISO", "VERAG_PROG_ALLGEMEIN"
PROGID = 16
Case "SDL"
PROGID = 7
Case Else
PROGID = SQL.getValueTxtBySql("SELECT isnull([prog_id],0) FROM [tblProgramme] WHERe [prog_codename]='" & prog_Name & "'", "ADMIN")
End Select
PROGNAME = SQL.getValueTxtBySql("SELECT prog_name FROM [tblProgramme] WHERe [prog_id]='" & PROGID & "'", "ADMIN")
End Sub
Public Shared Sub LOAD_PARAM()
PARAMS = New cParameterList(PROGID, FIRMA)
End Sub
Public Shared Sub LOAD_FIRMEN()
FIRMEN = cFirmen.LOAD_LIST
End Sub
Public Shared Sub LOAD_FILIALEN()
FILIALEN = cFilialen.LOAD_LIST
End Sub
Public Shared Sub LOAD_TRANSLATE()
TRANSLATE = New cTranslate_LIST(PROGID)
End Sub
Public Shared Sub LOAD_TRANSLATE_AUTO()
TRANSLATE_AUTO = New cTranslateAuto_LIST()
End Sub
Public Shared Function GET_LAND() As String
Select Case FIRMA
Case "AMBAR" : Return "DE"
End Select
Return "AT"
End Function
Public Shared Function checkSteuerschluessel(firmenID As Integer, landKz As String, Optional UIDLandKz As String = "", Optional UstIdNr As String = "", Optional UstIdGeprüft As Object = Nothing) As Integer
'Return -1
If firmenID < 1 Then Return -1
Dim FIRMA_TMP = New VERAG_PROG_ALLGEMEIN.cFirmen(firmenID)
Dim isEU As Boolean = False
Dim sql As New SQL
If landKz Is Nothing OrElse landKz = "" Then Return -1
Select Case FIRMA_TMP.Firma_LandKz
Case "A", "AT"
If landKz = "A" Then Return 2
isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",)
If isEU Then
If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then
Return 10
Else
Return 2
End If
Else
Return 0
End If
Case "D", "DE"
If landKz = "D" Then Return 19
isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",)
If isEU Then
If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then
Return 10
Else
Return 19
End If
Else
Return 0
End If
Case "GB"
If landKz = "GB" Then Return 20
isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",)
If isEU Then
If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then
Return 10
Else
Return 20
End If
Else
Return 0
End If
'Case "TR"
' If landKz = "TR" Then Return 20
' isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",)
' If isEU Then
' If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing Then
' Return 0
' Else
' Return 20
' End If
' End If
End Select
Return -1
End Function
Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control)
_TRANSLATE(o, o, _LAN)
End Sub
Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control, lan As String)
_TRANSLATE(o, o, lan)
End Sub
Public Shared Function _getTRANSLATE_SUB(oMain As System.Windows.Forms.Control, o As System.Windows.Forms.Control, s As Object, Optional defaultStr As String = "") As String
If defaultStr = "" Then defaultStr = s.Text
If _LAN = "DE" Then Return defaultStr
Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = oMain.Name And x.trs_control = o.Name And (x.trs_subControl IsNot DBNull.Value AndAlso x.trs_subControl = s.Name) And x.trs_sprache = _LAN)
If TextTmp IsNot Nothing And TextTmp.Count > 0 Then
Return TextTmp(0).trs_text
End If
Return defaultStr
End Function
Public Shared Function _getTRANSLATE(oMain As System.Windows.Forms.Control, o As System.Windows.Forms.Control, Optional defaultStr As String = "") As String
If defaultStr = "" Then defaultStr = o.Text
Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = oMain.Name And x.trs_control = o.Name And x.trs_sprache = _LAN)
If TextTmp IsNot Nothing And TextTmp.Count > 0 Then
Return TextTmp(0).trs_text
End If
Return defaultStr
End Function
Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control, s As System.Windows.Forms.Control, lan As String)
If lan = "" Then Exit Sub
If lan = "DE" Then Exit Sub
'o... Form
's... SubContainer
'c... Control
' MsgBox(o.GetType.ToString & " - " & o.name)
Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = o.Name And x.trs_sprache = lan)
If TextTmp IsNot Nothing Then
For Each TXT As cTranslate In TextTmp
Dim found = o.Controls.Find(TXT.trs_control, True)
' MsgBox(TXT.trs_control)
If found IsNot Nothing AndAlso found.Count > 0 Then
' MsgBox("JA")
Dim obj As System.Windows.Forms.Control = found(0)
If obj IsNot Nothing Then
If (TypeOf obj Is System.Windows.Forms.Label) Then
DirectCast(obj, System.Windows.Forms.Label).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.Button) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.FlatButton) Then
DirectCast(obj, System.Windows.Forms.Button).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.CheckBox) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyCheckbox) Then
DirectCast(obj, System.Windows.Forms.CheckBox).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.TabPage) Then
DirectCast(obj, System.Windows.Forms.TabPage).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.RadioButton) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyRadioButton) Then
DirectCast(obj, System.Windows.Forms.RadioButton).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.GroupBox) Then
DirectCast(obj, System.Windows.Forms.GroupBox).Text = TXT.trs_text
End If
If (TypeOf obj Is System.Windows.Forms.MenuStrip) Then
For Each tb As System.Windows.Forms.ToolStripMenuItem In DirectCast(obj, System.Windows.Forms.MenuStrip).Items
If tb.Name = TXT.trs_subControl Then
tb.Text = TXT.trs_text
End If
Next
End If
'If (TypeOf obj Is System.Windows.Forms.TabControl) Then -->in Tabpage geregelt
' For Each tb As System.Windows.Forms.TabPage In DirectCast(obj, System.Windows.Forms.TabControl).TabPages
' If tb.Name = TXT.trs_subControl Then
' tb.Text = TXT.trs_text
' End If
' Next
'End If
If (TypeOf obj Is System.Windows.Forms.ComboBox) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyComboBox) Then
'DirectCast(obj, System.Windows.Forms.Label).Text = TXT.trs_text
End If
'If (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyComboBox) Then
' Dim cboItems = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = o.Name And x.trs_sprache = lan And x.trs_control = TXT.trs_control)
' For Each item As VERAG_PROG_ALLGEMEIN.MyListItem In DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items
' For Each sitem As cTranslate In cboItems
' If item.Text = sitem.trs_subControl Then
' Dim index = DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items(0).Equals
' DirectCast(DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items(item), VERAG_PROG_ALLGEMEIN.MyListItem).Text = sitem.trs_text
' End If
' Next
' Next
'End If
End If
End If
Next
End If
End Sub
Public Shared Function getMaxPosNrIncrement(FilialeNr As Integer, year As Integer) As Integer
Dim cnt = 0
Dim returnValue = -1
Dim newMaxwert = CInt(year.ToString.Substring(2, 2) & "000000") '16000000
Do
Dim conn As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL
Dim sql As String = " begin tran" &
" if exists (select * from tblPosNr with (updlock,serializable) WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr) " &
" begin " &
" UPDATE tblPosNr " &
" SET wert=(select MAX(wert) FROM tblPosNr WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr)+1 " &
" WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr " &
" End " &
" Else " &
" begin " &
" INSERT INTO tblPosNr " &
" (wert,FilialeNr,Jahr) " &
" VALUES(@newMaxwert, @FilialeNr,@Jahr) " &
" End " &
" commit tran " &
" SELECT isnull(wert,-1) FROM tblPosNr WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr"
Dim dr As SqlDataReader
Using cmd As New SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@FilialeNr", FilialeNr)
cmd.Parameters.AddWithValue("@Jahr", year)
cmd.Parameters.AddWithValue("@newMaxwert", newMaxwert)
Try
dr = cmd.ExecuteReader()
If dr.Read Then returnValue = CInt(dr.Item(0))
Catch ex As Exception
MsgBox(System.Reflection.MethodInfo.GetCurrentMethod.Name & ": Fehler mit der Datenbankverbindung:" & vbCrLf & vbCrLf & ex.Message, vbExclamation, "Datenbankfehler")
Finally
dr.Close()
End Try
End Using
cnt += 1
Loop While (SpedBuchExists(FilialeNr, returnValue) And cnt < 100000)
' conn.Close()
Return returnValue
End Function
Public Shared Function isCLUSTER() As Boolean
Return (FIRMA = CLUSTER)
End Function
Public Shared Function getFirmaFromFiliale2(FilialenNr As Object, Optional usedefaultFirma As Boolean = True, Optional defaultFIRMA As String = "VERAG") As String
Dim FirmaTMP = ""
If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then
' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' ", "FMZOLL")
If FILIALEN Is Nothing Then LOAD_FILIALEN()
Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr)
If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Firma, "")
End If
If usedefaultFirma AndAlso FirmaTMP = "" Then FirmaTMP = defaultFIRMA
Return FirmaTMP
End Function
Public Shared Function getClusterFromFiliale(FilialenNr As Object, Optional usedefaultCLUSTER As Boolean = True, Optional defaultCLUSTER As String = "VERAG") As String
Dim FirmaTMP = ""
If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then
' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' ", "FMZOLL")
If FILIALEN Is Nothing Then LOAD_FILIALEN()
Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr)
If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Cluster, "")
End If
If usedefaultCLUSTER AndAlso FirmaTMP = "" Then FirmaTMP = defaultCLUSTER
Return FirmaTMP
End Function
Public Shared Function getFirmaFromFiliale(FilialenNr As Object, Optional defaultVERAG As Boolean = True) As String
Dim FirmaTMP = ""
If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then
' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' AND ( Firma='" & FIRMA & "' OR Cluster='" & CLUSTER & "')", "FMZOLL")
If FILIALEN Is Nothing Then LOAD_FILIALEN()
Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr And (x.Firma = FIRMA Or x.Cluster = CLUSTER))
If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Firma, "")
End If
If defaultVERAG AndAlso FirmaTMP = "" Then FirmaTMP = "VERAG"
Return FirmaTMP
End Function
Public Shared Function getFirmaFromKdNr(KundenNr As Integer, Optional defaultVERAG As Boolean = True) As String
Dim FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] inner join Kunden ON Kunden.FilialenNr=Filialen.FilialenNr WHERE KundenNr='" & KundenNr & "' ", "FMZOLL")
If defaultVERAG AndAlso FirmaTMP = "" Then FirmaTMP = "VERAG"
Return FirmaTMP
End Function
Public Shared Function SpedBuchExists(FilialenNr As Integer, AbfertigungsNr As Integer) As Boolean
Return (CInt(SQL.getValueTxtBySql("SELECT count(*) FROM Speditionsbuch WHERE FilialenNr=" & FilialenNr & " AND AbfertigungsNr=" & AbfertigungsNr & " ", "FMZOLL")) > 0)
End Function
Class cSPECIFIC
Public Shared FIRMA_BgColor As System.Drawing.Color = Drawing.Color.FromArgb(0, 54, 128)
Public Shared FIRMA_ForeColor As System.Drawing.Color = Drawing.Color.White
End Class
Public Shared Sub buildConnectionDATENARCHIV()
Exit Sub
buildConnectionDATENARCHIV_NEW()
' buildConnectionDATENARCHIV_OLD()
End Sub
Public Shared Sub buildConnectionDATENARCHIV_OLD()
Try
Dim netuse As New System.Diagnostics.ProcessStartInfo()
netuse.FileName = "C:\Windows\system32\net"
' netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956"
If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" Then
netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956"
Else
netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956"
End If
netuse.CreateNoWindow = True
netuse.WindowStyle = ProcessWindowStyle.Hidden
System.Diagnostics.Process.Start(netuse)
Catch ex As Exception
MsgBox("ERR: DATENARCHIV Netzwerkzugriff fehlgeschlagen...")
End Try
End Sub
Public Shared Sub buildConnectionDATENARCHIV_NEW()
Try
Dim netuse As New System.Diagnostics.ProcessStartInfo()
netuse.FileName = "C:\Windows\system32\net"
' netuse.Arguments = "use \\datenarchiv.verag.ost.dmn\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956"
If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" Then
netuse.Arguments = "use " & VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir(False) & " /User:VERAGOST\AVISOSMB BmWr501956"
Else
netuse.Arguments = "use " & VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir(False) & " /User:VERAGOST\AVISOSMB BmWr501956"
End If
netuse.CreateNoWindow = True
netuse.WindowStyle = ProcessWindowStyle.Hidden
System.Diagnostics.Process.Start(netuse)
Catch ex As Exception
MsgBox("ERR: DATENARCHIV Netzwerkzugriff fehlgeschlagen...")
End Try
End Sub
Public Shared Function getSTAMMFILIALE() As String
If IsNumeric(VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE) Then
Return VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE
Else
Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
Case "VERAG"
Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG
Case "SUB" : Return 4803
Case "SBG" : Return 5003
Case "WAI" : Return 5103
Case "NKD" : Return 5303
Case "NEU" : Return 4819
End Select
Case "IMEX" : Return 5501
Case "UNISPED" : Return 5601
Case "AMBAR" : Return 5701
Case "ATILLA" : Return 4801
Case "FRONTOFFICE" : Return 5801
End Select
End If
Return ""
End Function
Public Shared Function ExtractPdfPages(ByVal SourceFile As String, ByVal TargetFile As String, pageStart As Integer, pagesEnd As Integer) As Boolean 'ITEXTSHARP
Try
Dim impPage As iTextSharp.text.pdf.PdfImportedPage = Nothing
If SourceFile.Contains(" ") Then SourceFile = SourceFile
Dim Reader As New iTextSharp.text.pdf.PdfReader(SourceFile)
If Not TargetFile.ToLower.EndsWith(".pdf") Then TargetFile = TargetFile & ".pdf"
Dim srcDoc As New iTextSharp.text.Document() 'Reader.GetPageSizeWithRotation(0))
Dim PdfCopyProvider As New iTextSharp.text.pdf.PdfCopy(srcDoc, New FileStream(TargetFile, System.IO.FileMode.Create))
PdfCopyProvider.SetFullCompression()
srcDoc.Open()
For p As Integer = pageStart To (pageStart + pagesEnd) - 1
If p > Reader.NumberOfPages Then
MsgBox("Seitenanzahl überschritten!")
srcDoc.Close() : Reader.Close()
Return False
End If
impPage = PdfCopyProvider.GetImportedPage(Reader, p)
' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite
PdfCopyProvider.SetPageSize(New iTextSharp.text.Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height, Reader.GetPageRotation(p)))
' ----- PDF Seite in das neue Dokument einfügen
PdfCopyProvider.AddPage(impPage)
Next
' ----- neues PDF Dokument und den Reader schließen
srcDoc.Close()
Reader.Close()
Return True
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return False
End Function
End Class
Public Class cNCTS_GUARANTEES
Public Shared TOBB() As String = {"17TR0004000032349", "20TR0004000069756", "13TR0004000009323", "21TR0004000097157", "12TR0004000004665", "15TR0004000020917",
"17TR0004000029518", "20DE0000000078205", "19IT01TR000003323", "21TR0004000079552", "21TR0004000078157", "21TR0004000090364", "21TR0004000092350", "20TR0004000069557",
"21TR0004000097564", "21TR0004000084967", "19TR0004000056358", "19TR0004000053175", "19TR0004000053356", "22TR0004000126963", "22TR0004000114169", "19TR0004000059957",
"21TR0004000097555", "23TR0004000151181", "21TR0004000096368", "23TR0004000154183"}
Public Shared OREGON() As String = {"18DE0000000073276", "19DE0000000075520", "18DE0000000075520", "15TR0004000020500", "ITTR0000000000153", "21DE0000000079716", "21DE0000000081910"}
Public Shared VERAG() As String = {"17DE0000000071678", "05AT510000G000FP7"}
Public Shared IMEX() As String = {"16AT520000G000VA6"}
Public Shared ATILLA() As String = {"20AT520000G000092"}
Public Shared SGS() As String = {"16DE0000000068410"}
Public Shared MARS() As String = {"15TR0004000020908"}
Public Shared EKOL() As String = {"13TR0004000005094"}
'old: {"15TR0004000020917", "12TR0004000004665", "17TR0004000032349", "17TR0004000029518"f, "21TR0004000079552", "21TR00x04000078157", "21TR0004000092350", "20TR0004000069756", "21TR0004000090364", "21TR0004000097157"}
'cboBRG.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("TOBB - 15TR0004000020917 / 12TR0004000004665 / 17TR0004000032349 / 17TR0004000029518 / 21TR0004000079552 / 21TR0004000078157 / 21TR0004000092350", " '12TR0004000004665','15TR0004000020917','17TR0004000032349','17TR0004000029518','21TR0004000079552','21TR0004000078157','21TR0004000092350'"))
Public Shared Function getSQLList(arr() As String) As String
getSQLList = ""
For Each i In arr
getSQLList &= "'" & i & "',"
Next
If getSQLList <> "" Then getSQLList = getSQLList.Substring(0, getSQLList.Length - 1)
End Function
Public Shared Function getSlashList(arr) As String
getSlashList = ""
For Each i In arr
getSlashList &= "" & i & " / "
Next
If getSlashList <> "" Then getSlashList = getSlashList.Substring(0, getSlashList.Length - 3)
End Function
End Class
Public Class cSpeditionsbuchReport
Public Function RunReport_VERAG_ZA_DETAIL(KDNR As Integer,
AbfVon As Date,
AbfBis As Date,
Optional whereStr As String = "",
Optional Open As Boolean = True, Optional list As List(Of SQLVariable) = Nothing,
Optional showMessage As Boolean = True) As String
Try
Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr, list)
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return ""
End If
Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_DETAIL_")
Dim templateBytes() As Byte = My.Resources.KVI_report ', My.Resources.KVI_report_general)
My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False)
Dim exclApp As Object = Nothing
Dim datei As Object = Nothing
Dim blatt As Object = Nothing
Try
exclApp = CreateObject("Excel.Application")
exclApp.Visible = False
datei = exclApp.Workbooks.Open(path)
blatt = datei.Worksheets(1)
Dim errorTmp = ""
CreateDetailReport(blatt, dt, KDNR, errorTmp)
' CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis)
If errorTmp <> "" AndAlso showMessage Then
MsgBox("Fehlende Datensätze des Detailberichtes (SpedBuch vorhanden): " & vbCrLf & errorTmp.Trim)
End If
datei.Save()
If Open Then
exclApp.Visible = True
Else
datei.Close(True)
exclApp.Quit()
End If
Catch ex As Exception
Try
If datei IsNot Nothing Then datei.Close(False)
Catch
End Try
Try
If exclApp IsNot Nothing Then exclApp.Quit()
Catch
End Try
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
Return ""
End Try
Return path
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
Return ""
End Try
End Function
Public Function RunReport_VERAG_ZA_GENERAL(KDNR As Integer,
AbfVon As Date,
AbfBis As Date,
Optional whereStr As String = "",
Optional Open As Boolean = True,
Optional DL_Kosten As Boolean = False,
Optional list As List(Of SQLVariable) = Nothing,
Optional showMessage As Boolean = True) As String
Try
Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr, list)
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return ""
End If
Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_GENERAL")
Dim templateBytes() As Byte = My.Resources.KVI_report_general
My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False)
Dim exclApp As Object = Nothing
Dim datei As Object = Nothing
Dim blatt As Object = Nothing
Try
exclApp = CreateObject("Excel.Application")
exclApp.Visible = False
datei = exclApp.Workbooks.Open(path)
blatt = datei.Worksheets(1)
CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis, DL_Kosten, showMessage)
datei.Save()
If Open Then
exclApp.Visible = True
Else
datei.Close(True)
exclApp.Quit()
End If
Catch ex As Exception
Try
If datei IsNot Nothing Then datei.Close(False)
Catch
End Try
Try
If exclApp IsNot Nothing Then exclApp.Quit()
Catch
End Try
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
Return ""
End Try
Return path
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
Return ""
End Try
End Function
Private Function LoadSpeditionsbuchData(KDNR As Integer,
AbfVon As Date,
AbfBis As Date,
Optional whereStr As String = "", Optional list As List(Of SQLVariable) = Nothing) As DataTable
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Dim sqlText As String =
"Select CAST([FilialenNr] As varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer, " &
" CAST([Abfertigungsdatum] as date) Abfertigungsdatum, " &
" Absender, Empfänger, " &
" Rechnungsbetrag Betrag, " &
" BelegNr, " &
" [FilialenNr], [AbfertigungsNr], " &
" Speditionsbuch.Abfertigungsart, " &
" Abfertigungsbezeichnung, " &
" Speditionsbuch.Zollsystem_Land, " &
" ISNULL(KdAuftragsNr,'') KdAuftragsNr, " &
" SendungID " &
"FROM Speditionsbuch " &
"INNER JOIN [Abfertigungsarten] " &
" ON Speditionsbuch.Abfertigungsart = Abfertigungsarten.Abfertigungsart " &
"WHERE 1=1 AND" & If(KDNR > 0, " (EmpfängerKundenNr IN (" & KDNR & ") OR VermittlerKundenNr IN (" & KDNR & ")) AND ", "") &
" Abfertigungsdatum BETWEEN '" & AbfVon.ToShortDateString & "' AND '" & AbfBis.ToShortDateString & "' " &
" AND isAbfertigung = 1 "
Return SQL.loadDgvBySql_Param(sqlText & " " & whereStr, "FMZOLL",, list)
End Function
Private Function CreateTargetPath(AbfVon As Date, AbfBis As Date, prefix As String) As String
Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
My.Computer.FileSystem.CreateDirectory(sPath)
End If
Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".xlsx"
While System.IO.File.Exists(path)
path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
End While
Return path
End Function
Private Function LoadCustomsDeclaration(r As DataRow) As cVERAG_CustomsDeclarations
Dim cd As cVERAG_CustomsDeclarations = Nothing
Dim belegNr As String = If(r("BelegNr"), "").ToString().Trim()
If belegNr <> "" Then
cd = cVERAG_CustomsDeclarations.loadByMRN(belegNr, True)
End If
If cd Is Nothing OrElse Not cd.hasEntry Then
Dim sendungsId As String = If(r("SendungID"), "").ToString().Trim()
If sendungsId <> "" Then
cd = cVERAG_CustomsDeclarations.loadBySendungsID(sendungsId, True)
End If
End If
If cd Is Nothing Then cd = New cVERAG_CustomsDeclarations
Return cd
End Function
Private Sub CreateDetailReport(blatt As Object, dt As DataTable, kdnr As Integer, ByRef errorTmp As String)
Dim cnt As Integer = 2
For Each r As DataRow In dt.Rows
Try
Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)
If Not cd.hasEntry Then
errorTmp &= If(r("BelegNr"), "").ToString() & " " &
If(r("FilialenNr"), "").ToString() & "/" &
If(r("AbfertigungsNr"), "").ToString() & vbNewLine
Else 'Durch else wird nur Zeile geschrieben, wenn auch eine Zolldeklaration gefunden wurde. Sonst wird nur eine Fehlermeldung ausgegeben.
WriteDetailReportRow(blatt, r, cd, cnt, kdnr)
End If
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try
Next
End Sub
Private Sub CreateGeneralReport(blatt As Object,
dt As DataTable,
kdnr As Integer,
AbfVon As Date,
AbfBis As Date, Optional DL_Kosten As Boolean = False, Optional ShowMessage As Boolean = True)
blatt.Range("I1").Value = AbfVon.ToShortDateString & "-" & AbfBis.ToShortDateString
Dim cnt As Integer = 3
For Each r As DataRow In dt.Rows
Try
Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)
If Not cd.hasEntry AndAlso ShowMessage Then
MsgBox("ERROR: Nicht gefunden: " &
If(r("BelegNr"), "").ToString() & " " &
If(r("FilialenNr"), "").ToString() & "/" &
If(r("AbfertigungsNr"), "").ToString())
End If
WriteGeneralReportRow(blatt, r, cd, cnt, kdnr, DL_Kosten)
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try
Next
End Sub
Private Sub WriteDetailReportRow(blatt As Object,
r As DataRow,
cd As cVERAG_CustomsDeclarations,
ByRef cnt As Integer,
kdnrsrch As Integer)
Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch)
If cd IsNot Nothing AndAlso cd.hasEntry Then
Dim empfaenger As String = GetPartyName(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES, "")
Dim absender As String = GetPartyName(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES, "")
If cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then
For Each item As cVERAG_CustomsDeclarations_Item In cd.Items
' Abgaben kommen jetzt von der Position
Dim eustBetrag As Decimal = GetDutyAmount(item, {"B%", "B00", "EUST", "VAT"})
Dim zollBetrag As Decimal = GetDutyAmountExcluding(item, {"B%", "B00", "EUST", "VAT"})
Dim itemInvoiceAmount As Decimal =
If(item.zaItem_InvoiceValueForeign, item.zaItem_InvoiceValueEUR)
Dim zollInProzent As Double = 0
If itemInvoiceAmount <> 0 Then
zollInProzent = CDbl(zollBetrag / itemInvoiceAmount * 100D)
End If
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = empfaenger
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value =
If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()),
r("BelegNr"),
cd.za_MRN)
blatt.Range("H" & cnt).Value = item.zaItem_PosNo
blatt.Range("I" & cnt).Value = item.zaItem_HSCode
blatt.Range("J" & cnt).Value = "-"
blatt.Range("K" & cnt).Value = item.zaItem_Description
blatt.Range("L" & cnt).Value = ""
blatt.Range("M" & cnt).Value =
If(Not String.IsNullOrWhiteSpace(If(item.zaItem_InvoiceCurrency, "")),
item.zaItem_InvoiceCurrency,
cd.za_InvoiceCurrency)
blatt.Range("N" & cnt).Value = item.zaItem_MainProcedure
blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
blatt.Range("P" & cnt).Value = If(item.zaItem_PosNo = 1, cd.za_TotGrossMass, "")
blatt.Range("Q" & cnt).Value = item.zaItem_NetMass
blatt.Range("R" & cnt).Value = itemInvoiceAmount
blatt.Range("S" & cnt).Value = eustBetrag
blatt.Range("T" & cnt).Value = zollBetrag
blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %"
blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
blatt.Range("W" & cnt).Value = absender
blatt.Range("X" & cnt).Value = item.zaItem_OriginCountry
blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
blatt.Range("Z" & cnt).Value = cd.za_Incoterms
blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
blatt.Range("AB" & cnt).Value =
item.zaItem_MainProcedure &
If(Not String.IsNullOrWhiteSpace(item.zaItem_AdditionalProc),
"/" & item.zaItem_AdditionalProc,
"")
blatt.Range("AC" & cnt).Value = item.zaItem_PreferenceCode
blatt.Range("AD" & cnt).Value = If(IsItemCBAM(item), "Y", "N")
blatt.Range("AE" & cnt).Value = item.GetInvoiceListString()
cnt += 1
Next
Else
'Fallback: wenn keine Positionen vorhanden sind,
'weiterhin Header-Duties verwenden
Dim eustBetrag As Decimal =
GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"})
Dim zollBetrag As Decimal =
GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})
Dim invoiceAmount As Decimal = If(cd.za_InvoiceAmount, 0D)
Dim zollInProzent As Double = 0
If invoiceAmount <> 0 Then
zollInProzent = CDbl(zollBetrag / invoiceAmount * 100D)
End If
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = empfaenger
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value =
If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()),
r("BelegNr"),
cd.za_MRN)
blatt.Range("H" & cnt).Value = ""
blatt.Range("I" & cnt).Value = ""
blatt.Range("J" & cnt).Value = "-"
blatt.Range("K" & cnt).Value = ""
blatt.Range("L" & cnt).Value = ""
blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency
blatt.Range("N" & cnt).Value = cd.za_MainProcedure
blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
blatt.Range("P" & cnt).Value = cd.za_TotGrossMass
blatt.Range("Q" & cnt).Value = ""
blatt.Range("R" & cnt).Value = cd.za_InvoiceAmount
blatt.Range("S" & cnt).Value = eustBetrag
blatt.Range("T" & cnt).Value = zollBetrag
blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %"
blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
blatt.Range("W" & cnt).Value = absender
blatt.Range("X" & cnt).Value = ""
blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
blatt.Range("Z" & cnt).Value = cd.za_Incoterms
blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
blatt.Range("AB" & cnt).Value = ""
blatt.Range("AC" & cnt).Value = ""
blatt.Range("AD" & cnt).Value = ""
blatt.Range("AE" & cnt).Value = ""
cnt += 1
End If
Else
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = r("Empfänger")
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value = r("BelegNr")
cnt += 1
End If
End Sub
Private Function GetDienstleistungskosten(r As DataRow, kdnrsrch As Integer) As Decimal
Try
Dim sqlstr As String =
"SELECT ISNULL(SUM(pos.SteuerfreierBetrag + pos.SteuerpflichtigerBetrag), 0) " &
"FROM Rechnungsausgang RK " &
"INNER JOIN RechnungsausgangPositionen POS ON RK.RK_ID = POS.RK_ID " &
"INNER JOIN Leistungen ON POS.LeistungsNr = Leistungen.LeistungsNr " &
"WHERE RK.FilialenNr = " & CInt(r("FilialenNr")) & " " &
"AND RK.AbfertigungsNr = " & CInt(r("AbfertigungsNr")) & " " &
"AND Leistungen.Abfertigungskosten = 1 " &
"AND Leistungen.abzugsfaehigInZZ = 0 " &
"AND RK.RechnungsKundenNr = " & kdnrsrch
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL",,, 0)
Catch
Return 0D
End Try
End Function
Private Sub WriteDetailReportRow_OLD(blatt As Object,
r As DataRow,
cd As cVERAG_CustomsDeclarations,
ByRef cnt As Integer,
kdnrsrch As Integer)
Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch)
If cd IsNot Nothing AndAlso cd.hasEntry Then
Dim empfaenger As String = GetPartyName(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES, "")
Dim absender As String = GetPartyName(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES, "")
Dim eustBetrag As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"})
Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})
Dim invoiceAmount As Decimal = If(cd.za_InvoiceAmount, 0D)
Dim zollInProzent As Double = 0
If invoiceAmount <> 0 Then
zollInProzent = CDbl(zollBetrag / invoiceAmount * 100D)
End If
If cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then
Dim rowcounter As Integer = 0
For Each item As cVERAG_CustomsDeclarations_Item In cd.Items
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = empfaenger
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN)
blatt.Range("H" & cnt).Value = item.zaItem_PosNo
blatt.Range("I" & cnt).Value = item.zaItem_HSCode
blatt.Range("J" & cnt).Value = "-"
blatt.Range("K" & cnt).Value = item.zaItem_Description
blatt.Range("L" & cnt).Value = ""
blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency
blatt.Range("N" & cnt).Value = item.zaItem_MainProcedure 'cd.za_MainProcedure
blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
blatt.Range("P" & cnt).Value = If(item.zaItem_PosNo = 1, cd.za_TotGrossMass, "")
blatt.Range("Q" & cnt).Value = item.zaItem_NetMass
blatt.Range("R" & cnt).Value = If(item.zaItem_InvoiceValueForeign, item.zaItem_InvoiceValueEUR)
blatt.Range("S" & cnt).Value = If(rowcounter = 0, eustBetrag, "")
blatt.Range("T" & cnt).Value = If(rowcounter = 0, zollBetrag, "")
blatt.Range("U" & cnt).Value = If(rowcounter = 0, zollInProzent.ToString("N2") & " %", "")
blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
blatt.Range("W" & cnt).Value = absender
blatt.Range("X" & cnt).Value = item.zaItem_OriginCountry
blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
blatt.Range("Z" & cnt).Value = cd.za_Incoterms
blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
blatt.Range("AB" & cnt).Value = item.zaItem_MainProcedure & If(Not String.IsNullOrWhiteSpace(item.zaItem_AdditionalProc), "/" & item.zaItem_AdditionalProc, "")
blatt.Range("AC" & cnt).Value = item.zaItem_PreferenceCode
blatt.Range("AD" & cnt).Value = If(IsItemCBAM(item), "Y", "N")
blatt.Range("AE" & cnt).Value = item.GetInvoiceListString()
cnt += 1
rowcounter += 1
Next
Else
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = empfaenger
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN)
blatt.Range("H" & cnt).Value = ""
blatt.Range("I" & cnt).Value = ""
blatt.Range("J" & cnt).Value = "-"
blatt.Range("K" & cnt).Value = ""
blatt.Range("L" & cnt).Value = ""
blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency
blatt.Range("N" & cnt).Value = cd.za_MainProcedure
blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
blatt.Range("P" & cnt).Value = ""
blatt.Range("Q" & cnt).Value = ""
blatt.Range("R" & cnt).Value = ""
blatt.Range("S" & cnt).Value = eustBetrag
blatt.Range("T" & cnt).Value = zollBetrag
blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %"
blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
blatt.Range("W" & cnt).Value = absender
blatt.Range("X" & cnt).Value = ""
blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
blatt.Range("Z" & cnt).Value = cd.za_Incoterms
blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
blatt.Range("AB" & cnt).Value = ""
blatt.Range("AC" & cnt).Value = ""
blatt.Range("AD" & cnt).Value = ""
cnt += 1
End If
Else
blatt.Range("A" & cnt).Value = cnt - 1
blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
blatt.Range("D" & cnt).Value = r("Empfänger")
blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
blatt.Range("F" & cnt).Value = kdAtrNr
blatt.Range("G" & cnt).Value = r("BelegNr")
cnt += 1
End If
End Sub
Private Sub WriteGeneralReportRow(blatt As Object,
r As DataRow,
cd As cVERAG_CustomsDeclarations,
ByRef cnt As Integer,
kdnrsrch As Integer,
Optional DL_Kosten As Boolean = False)
Dim dienstleistungsKosten As Decimal = 0D
If DL_Kosten Then
blatt.Range("P2").Value = "Service Costs"
dienstleistungsKosten = GetDienstleistungskosten(r, kdnrsrch)
End If
Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch)
blatt.Range("A" & cnt).Value = cnt - 2
blatt.Range("B" & cnt).Value = r("Abfertigungsnummer")
blatt.Range("C" & cnt).Value = r("Abfertigungsdatum")
blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung")
blatt.Range("E" & cnt).Value = r("Absender")
blatt.Range("F" & cnt).Value = r("Empfänger")
blatt.Range("G" & cnt).Value = kdAtrNr
blatt.Range("H" & cnt).Value = ""
If cd IsNot Nothing AndAlso cd.hasEntry Then
Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})
blatt.Range("H" & cnt).Value = cd.za_InvoiceAmount
blatt.Range("I" & cnt).Value = GetInvoiceReferences(cd)
blatt.Range("J" & cnt).Value = cd.za_MRN
blatt.Range("K" & cnt).Value = zollBetrag
blatt.Range("L" & cnt).Value = If(cd.Items IsNot Nothing, cd.Items.Count, 0)
blatt.Range("M" & cnt).Value = GetPartyName(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES, "")
blatt.Range("N" & cnt).Value = GetItemsDescription(cd)
blatt.Range("O" & cnt).Value = cd.za_CountryDispatch & " --> " & cd.za_CountryDestination
If DL_Kosten Then
blatt.Range("P" & cnt).Value = dienstleistungsKosten
End If
Else
If DL_Kosten Then
blatt.Range("I" & cnt).Value = dienstleistungsKosten
End If
End If
cnt += 1
End Sub
Private Function GetPartyName(cd As cVERAG_CustomsDeclarations,
roles As String(),
Optional fallback As String = "") As String
If cd Is Nothing OrElse cd.Parties Is Nothing Then Return fallback
Dim p = cd.Parties.FirstOrDefault(Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper()))
If p Is Nothing Then Return fallback
Return If(p.zaParty_Name, fallback)
End Function
Private Function GetDutyAmount(cd As cVERAG_CustomsDeclarations, dutyTypes As String()) As Decimal
If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
Return cd.Duties.
Where(Function(d) DutyTypeMatches(If(d.zaDuty_DutyType, ""), dutyTypes)).
Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
End Function
Private Function GetDutyAmountExcluding(cd As cVERAG_CustomsDeclarations, excludedDutyTypes As String()) As Decimal
If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
Return cd.Duties.
Where(Function(d) Not DutyTypeMatches(If(d.zaDuty_DutyType, ""), excludedDutyTypes)).
Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
End Function
Private Function GetDutyAmount(cd As cVERAG_CustomsDeclarations_Item, dutyTypes As String()) As Decimal
If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
Return cd.Duties.
Where(Function(d) DutyTypeMatches(If(d.zaDuty_DutyType, ""), dutyTypes)).
Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
End Function
Private Function GetDutyAmountExcluding(cd As cVERAG_CustomsDeclarations_Item, excludedDutyTypes As String()) As Decimal
If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
Return cd.Duties.
Where(Function(d) Not DutyTypeMatches(If(d.zaDuty_DutyType, ""), excludedDutyTypes)).
Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
End Function
Private Function DutyTypeMatches(dutyType As String, patterns As String()) As Boolean
Dim value As String = If(dutyType, "").Trim().ToUpper()
If value = "" OrElse patterns Is Nothing Then Return False
For Each p In patterns
Dim pattern As String = If(p, "").Trim().ToUpper()
If pattern = "" Then Continue For
If pattern.Contains("%") Then
Dim regexPattern As String =
"^" & System.Text.RegularExpressions.Regex.Escape(pattern).Replace("%", ".*") & "$"
If System.Text.RegularExpressions.Regex.IsMatch(value, regexPattern) Then
Return True
End If
Else
If value = pattern Then
Return True
End If
End If
Next
Return False
End Function
Private Function GetInvoiceReferences(cd As cVERAG_CustomsDeclarations) As String
If cd Is Nothing OrElse cd.Documents Is Nothing OrElse cd.Documents.Count = 0 Then Return ""
Return String.Join(vbNewLine,
cd.Documents.
Where(Function(d) Not String.IsNullOrWhiteSpace(If(d.zaDoc_Reference, ""))).
Select(Function(d) d.zaDoc_Reference).
Distinct())
End Function
Private Function GetItemsDescription(cd As cVERAG_CustomsDeclarations) As String
If cd Is Nothing OrElse cd.Items Is Nothing OrElse cd.Items.Count = 0 Then Return ""
Return String.Join(" | ",
cd.Items.
Where(Function(i) Not String.IsNullOrWhiteSpace(If(i.zaItem_Description, ""))).
Select(Function(i) i.zaItem_Description).
Distinct())
End Function
Private Function IsItemCBAM_TNR(item As cVERAG_CustomsDeclarations_Item) As Boolean
Try
If item Is Nothing Then Return False
If VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST Is Nothing Then VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST = cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers
Dim cbamList = VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST ' VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers()
Dim hs = If(item.zaItem_HSCode, "").Trim()
If hs = "" OrElse cbamList Is Nothing Then Return False
For Each p In cbamList
If hs.StartsWith(If(p, "").Trim()) Then Return True
Next
Catch
End Try
Return False
End Function
Private Function IsItemCBAM(item As cVERAG_CustomsDeclarations_Item) As Boolean
Try
If item Is Nothing Then Return False
' Ursprungsland prüfen (nicht CBAM-pflichtige Länder ausschließen)
Dim originCountry = If(item.zaItem_OriginCountry, "").Trim().ToUpper()
Select Case originCountry
' EU-27
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", ' Ausnahmen
"CH", ' Schweiz
"NO", ' Norwegen
"IS", ' Island
"LI", ' Liechtenstein
"XI" ' Nordirland
Return False
End Select
If VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST Is Nothing Then VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST = cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers
Dim cbamList = VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST ' VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers()
Dim hs = If(item.zaItem_HSCode, "").Trim()
If hs = "" OrElse cbamList Is Nothing Then Return False
For Each p In cbamList
If hs.StartsWith(If(p, "").Trim()) Then Return True
Next
Catch
End Try
Return False
End Function
Private Function NormalizeKdAuftragsNr(value As Object, kdnrsrch As Integer) As String
Dim kdAtrNr As String = If(value, "").ToString()
If kdnrsrch = 770931 AndAlso kdAtrNr.Contains("/") Then
kdAtrNr = kdAtrNr.Split("/"c)(0)
End If
Return kdAtrNr
End Function
Private Function LeftSafe(value As String, length As Integer) As String
value = If(value, "")
If value.Length < length Then Return value
Return value.Substring(0, length)
End Function
Private Function RightSafe(value As String, length As Integer) As String
value = If(value, "")
If value.Length < length Then Return value
Return value.Substring(value.Length - length, length)
End Function
Public Function RunReport_VERAG_ZA_DETAIL_FULL(KDNR As Integer,
AbfVon As Date,
AbfBis As Date,
Optional whereStr As String = "",
Optional Open As Boolean = True, Optional list As List(Of SQLVariable) = Nothing) As String
Try
Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr)
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return ""
End If
Dim path As String = CreateTargetPathCsv(AbfVon, AbfBis, "KVI_DETAIL_FULL_")
Using sw As New System.IO.StreamWriter(path, False, System.Text.Encoding.UTF8)
sw.WriteLine(String.Join(";", {
CsvField("Speditionsbuch_Abfertigungsnummer"),
CsvField("Speditionsbuch_Abfertigungsdatum"),
CsvField("Speditionsbuch_Absender"),
CsvField("Speditionsbuch_Empfaenger"),
CsvField("Speditionsbuch_BelegNr"),
CsvField("Speditionsbuch_KdAuftragsNr"),
CsvField("Speditionsbuch_FilialenNr"),
CsvField("Speditionsbuch_AbfertigungsNr"),
CsvField("Speditionsbuch_Abfertigungsart"),
CsvField("Speditionsbuch_Abfertigungsbezeichnung"),
CsvField("Speditionsbuch_Zollsystem_Land"),
CsvField("Speditionsbuch_SendungID"),
CsvField("za_Id"),
CsvField("za_System"),
CsvField("za_CustomsSystem"),
CsvField("za_CustomsSystemCountry"),
CsvField("za_IsExternalSystem"),
CsvField("za_IsFinalDeclaration"),
CsvField("za_UCR"),
CsvField("za_Mandant_ID"),
CsvField("za_Bereich_ID"),
CsvField("za_Firma"),
CsvField("za_Niederlassung"),
CsvField("za_MRN"),
CsvField("za_LRN"),
CsvField("za_DeclarationNo"),
CsvField("za_ReferenceCustomer"),
CsvField("za_REGIME"),
CsvField("za_RegistrationType"),
CsvField("za_MainProcedure"),
CsvField("za_AdditionalProcedure"),
CsvField("za_DeclarationDate"),
CsvField("za_ReleaseDate"),
CsvField("za_AcceptanceDate"),
CsvField("za_CustomsOffice"),
CsvField("za_EntryCustomsOffice"),
CsvField("za_RepresentationCode"),
CsvField("za_TransportModeInland"),
CsvField("za_TransportModeBorder"),
CsvField("za_MeansOfTransport_Vehicle"),
CsvField("za_MeansOfTransport_Type"),
CsvField("za_MeansOfTransport_Nationality"),
CsvField("za_ContainerNr1"),
CsvField("za_ContainerNr2"),
CsvField("za_ContainerNr3"),
CsvField("za_ContainerNr4"),
CsvField("za_ContainerNr5"),
CsvField("za_ContainerNr6"),
CsvField("za_ContainerNr7"),
CsvField("za_ContainerNr8"),
CsvField("za_ContainerNr9"),
CsvField("za_CountryDispatch"),
CsvField("za_CountryDestination"),
CsvField("za_CountryDestinationState"),
CsvField("za_CountryImport"),
CsvField("za_WarehouseCode"),
CsvField("za_Incoterms"),
CsvField("za_IncotermsPlace"),
CsvField("za_InvoiceAmount"),
CsvField("za_InvoiceCurrency"),
CsvField("za_FiscalRepFlag"),
CsvField("za_TaxDeduction"),
CsvField("za_ApplicantTaxOffice"),
CsvField("za_ApplicantVATNo"),
CsvField("za_DV1Flag"),
CsvField("za_PrevDocument_Type"),
CsvField("za_PrevDocument_No"),
CsvField("za_AvisoId"),
CsvField("za_SendungsId"),
CsvField("za_Remarks"),
CsvField("za_Sachbearbeiter"),
CsvField("za_SachbearbeiterId"),
CsvField("za_TotGrossMass"),
CsvField("Parties_All"),
CsvField("Importer_Name"),
CsvField("Importer_EORI"),
CsvField("Exporter_Name"),
CsvField("Exporter_EORI"),
CsvField("Declarant_Name"),
CsvField("Declarant_EORI"),
CsvField("Duties_All"),
CsvField("Duty_Total"),
CsvField("Duty_EUST"),
CsvField("Duty_Excluding_EUST"),
CsvField("Header_Documents_All"),
CsvField("Item_Documents_All"),
CsvField("All_Documents_Merged"),
CsvField("Item_PosNo"),
CsvField("Item_ArticleCode"),
CsvField("Item_HSCode"),
CsvField("Item_HSAddition1"),
CsvField("Item_HSAddition2"),
CsvField("Item_HSAddCodes1"),
CsvField("Item_HSAddCodes2"),
CsvField("Item_HSAddCodes3"),
CsvField("Item_HSAddCodes4"),
CsvField("Item_HSAddCodes5"),
CsvField("Item_HSAddCodes6"),
CsvField("Item_HSAddCodes7"),
CsvField("Item_HSAddCodes8"),
CsvField("Item_HSAddCodes9"),
CsvField("Item_HSAddCodes10"),
CsvField("Item_Description"),
CsvField("Item_PackageColli"),
CsvField("Item_PackageType"),
CsvField("Item_PackageMark"),
CsvField("Item_OriginCountry"),
CsvField("Item_PreferentialCountry"),
CsvField("Item_PreferenceCode"),
CsvField("Item_QuotaNo"),
CsvField("Item_MainProcedure"),
CsvField("Item_AdditionalProc"),
CsvField("Item_PrevProcedure"),
CsvField("Item_GrossMass"),
CsvField("Item_NetMass"),
CsvField("Item_SuppUnitCode"),
CsvField("Item_SuppQuantity"),
CsvField("Item_StatisticalValueEUR"),
CsvField("Item_CustomsValueEUR"),
CsvField("Item_InvoiceCurrency"),
CsvField("Item_InvoiceValueForeign"),
CsvField("Item_InvoiceValueEUR"),
CsvField("Item_BeguenstigungCode"),
CsvField("Item_DV1Flag"),
CsvField("Item_PosAddition"),
CsvField("Item_Remarks"),
CsvField("Item_isCBAM")
}))
For Each r As DataRow In dt.Rows
Try
Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)
Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), KDNR)
Dim importer = GetParty(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES)
Dim exporter = GetParty(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES)
Dim declarant = GetParty(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES)
Dim allParties As String = JoinParties(cd)
Dim allDuties As String = JoinDuties(cd)
Dim headerDocs As String = JoinDocuments(cd.Documents)
Dim dutyTotal As Decimal = GetDutyAmountTotal(cd)
Dim dutyEust As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"})
Dim dutyExcludingEust As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})
If cd IsNot Nothing AndAlso cd.hasEntry AndAlso cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then
For Each item As cVERAG_CustomsDeclarations_Item In cd.Items
Dim itemDocs As String = JoinDocuments(item.Documents)
Dim allDocsMerged As String = MergeDocumentStrings(headerDocs, itemDocs)
sw.WriteLine(String.Join(";", {
CsvField(If(r("Abfertigungsnummer"), "")),
CsvField(FormatDateForCsv(r("Abfertigungsdatum"))),
CsvField(If(r("Absender"), "")),
CsvField(If(r("Empfänger"), "")),
CsvField(If(r("BelegNr"), "")),
CsvField(kdAtrNr),
CsvField(If(r("FilialenNr"), "")),
CsvField(If(r("AbfertigungsNr"), "")),
CsvField(If(r("Abfertigungsart"), "")),
CsvField(If(r("Abfertigungsbezeichnung"), "")),
CsvField(If(r("Zollsystem_Land"), "")),
CsvField(If(r("SendungID"), "")),
CsvField(cd.za_Id),
CsvField(cd.za_System),
CsvField(cd.za_CustomsSystem),
CsvField(cd.za_CustomsSystemCountry),
CsvField(FormatBoolForCsv(cd.za_IsExternalSystem)),
CsvField(FormatBoolForCsv(cd.za_IsFinalDeclaration)),
CsvField(cd.za_UCR),
CsvField(cd.za_Mandant_ID),
CsvField(cd.za_Bereich_ID),
CsvField(cd.za_Firma),
CsvField(cd.za_Niederlassung),
CsvField(cd.za_MRN),
CsvField(cd.za_LRN),
CsvField(cd.za_DeclarationNo),
CsvField(cd.za_ReferenceCustomer),
CsvField(cd.za_REGIME),
CsvField(cd.za_RegistrationType),
CsvField(cd.za_MainProcedure),
CsvField(cd.za_AdditionalProcedure),
CsvField(FormatDateForCsv(cd.za_DeclarationDate)),
CsvField(FormatDateForCsv(cd.za_ReleaseDate)),
CsvField(FormatDateForCsv(cd.za_AcceptanceDate)),
CsvField(cd.za_CustomsOffice),
CsvField(cd.za_EntryCustomsOffice),
CsvField(cd.za_RepresentationCode),
CsvField(cd.za_TransportModeInland),
CsvField(cd.za_TransportModeBorder),
CsvField(cd.za_MeansOfTransport_Vehicle),
CsvField(cd.za_MeansOfTransport_Type),
CsvField(cd.za_MeansOfTransport_Nationality),
CsvField(cd.za_ContainerNr1),
CsvField(cd.za_ContainerNr2),
CsvField(cd.za_ContainerNr3),
CsvField(cd.za_ContainerNr4),
CsvField(cd.za_ContainerNr5),
CsvField(cd.za_ContainerNr6),
CsvField(cd.za_ContainerNr7),
CsvField(cd.za_ContainerNr8),
CsvField(cd.za_ContainerNr9),
CsvField(cd.za_CountryDispatch),
CsvField(cd.za_CountryDestination),
CsvField(cd.za_CountryDestinationState),
CsvField(cd.za_CountryImport),
CsvField(cd.za_WarehouseCode),
CsvField(cd.za_Incoterms),
CsvField(cd.za_IncotermsPlace),
CsvField(FormatDecimalForCsv(cd.za_InvoiceAmount)),
CsvField(cd.za_InvoiceCurrency),
CsvField(FormatNullableBoolForCsv(cd.za_FiscalRepFlag)),
CsvField(FormatNullableBoolForCsv(cd.za_TaxDeduction)),
CsvField(cd.za_ApplicantTaxOffice),
CsvField(cd.za_ApplicantVATNo),
CsvField(FormatNullableBoolForCsv(cd.za_DV1Flag)),
CsvField(cd.za_PrevDocument_Type),
CsvField(cd.za_PrevDocument_No),
CsvField(If(cd.za_AvisoId.HasValue, cd.za_AvisoId.Value.ToString(), "")),
CsvField(If(cd.za_SendungsId.HasValue, cd.za_SendungsId.Value.ToString(), "")),
CsvField(cd.za_Remarks),
CsvField(cd.za_Sachbearbeiter),
CsvField(cd.za_SachbearbeiterId),
CsvField(FormatDecimalForCsv(cd.za_TotGrossMass)),
CsvField(allParties),
CsvField(If(importer Is Nothing, "", importer.zaParty_Name)),
CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)),
CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)),
CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)),
CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)),
CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)),
CsvField(allDuties),
CsvField(FormatDecimalForCsv(dutyTotal)),
CsvField(FormatDecimalForCsv(dutyEust)),
CsvField(FormatDecimalForCsv(dutyExcludingEust)),
CsvField(headerDocs),
CsvField(itemDocs),
CsvField(allDocsMerged),
CsvField(item.zaItem_PosNo),
CsvField(item.zaItem_ArticleCode),
CsvField(item.zaItem_HSCode),
CsvField(item.zaItem_HSAddition1),
CsvField(item.zaItem_HSAddition2),
CsvField(item.zaItem_HSAddCodes1),
CsvField(item.zaItem_HSAddCodes2),
CsvField(item.zaItem_HSAddCodes3),
CsvField(item.zaItem_HSAddCodes4),
CsvField(item.zaItem_HSAddCodes5),
CsvField(item.zaItem_HSAddCodes6),
CsvField(item.zaItem_HSAddCodes7),
CsvField(item.zaItem_HSAddCodes8),
CsvField(item.zaItem_HSAddCodes9),
CsvField(item.zaItem_HSAddCodes10),
CsvField(item.zaItem_Description),
CsvField(item.zaItem_PackageColli),
CsvField(item.zaItem_PackageType),
CsvField(item.zaItem_PackageMark),
CsvField(item.zaItem_OriginCountry),
CsvField(item.zaItem_PreferentialCountry),
CsvField(item.zaItem_PreferenceCode),
CsvField(item.zaItem_QuotaNo),
CsvField(item.zaItem_MainProcedure),
CsvField(item.zaItem_AdditionalProc),
CsvField(item.zaItem_PrevProcedure),
CsvField(FormatDecimalForCsv(item.zaItem_GrossMass)),
CsvField(FormatDecimalForCsv(item.zaItem_NetMass)),
CsvField(item.zaItem_SuppUnitCode),
CsvField(FormatDecimalForCsv(item.zaItem_SuppQuantity)),
CsvField(FormatDecimalForCsv(item.zaItem_StatisticalValueEUR)),
CsvField(FormatDecimalForCsv(item.zaItem_CustomsValueEUR)),
CsvField(item.zaItem_InvoiceCurrency),
CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueForeign)),
CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueEUR)),
CsvField(item.zaItem_BeguenstigungCode),
CsvField(FormatNullableBoolForCsv(item.zaItem_DV1Flag)),
CsvField(item.zaItem_PosAddition),
CsvField(item.zaItem_Remarks),
CsvField(If(IsItemCBAM(item), "Y", "N"))
}))
Next
Else
sw.WriteLine(String.Join(";", {
CsvField(If(r("Abfertigungsnummer"), "")),
CsvField(FormatDateForCsv(r("Abfertigungsdatum"))),
CsvField(If(r("Absender"), "")),
CsvField(If(r("Empfänger"), "")),
CsvField(If(r("BelegNr"), "")),
CsvField(kdAtrNr),
CsvField(If(r("FilialenNr"), "")),
CsvField(If(r("AbfertigungsNr"), "")),
CsvField(If(r("Abfertigungsart"), "")),
CsvField(If(r("Abfertigungsbezeichnung"), "")),
CsvField(If(r("Zollsystem_Land"), "")),
CsvField(If(r("SendungID"), "")),
CsvField(If(cd Is Nothing, "", cd.za_Id.ToString())),
CsvField(If(cd Is Nothing, "", cd.za_System)),
CsvField(If(cd Is Nothing, "", cd.za_CustomsSystem)),
CsvField(If(cd Is Nothing, "", cd.za_CustomsSystemCountry)),
CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsExternalSystem))),
CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsFinalDeclaration))),
CsvField(If(cd Is Nothing, "", cd.za_UCR)),
CsvField(If(cd Is Nothing, "", cd.za_Mandant_ID)),
CsvField(If(cd Is Nothing, "", cd.za_Bereich_ID)),
CsvField(If(cd Is Nothing, "", cd.za_Firma)),
CsvField(If(cd Is Nothing, "", cd.za_Niederlassung)),
CsvField(If(cd Is Nothing, "", cd.za_MRN)),
CsvField(If(cd Is Nothing, "", cd.za_LRN)),
CsvField(If(cd Is Nothing, "", cd.za_DeclarationNo)),
CsvField(If(cd Is Nothing, "", cd.za_ReferenceCustomer)),
CsvField(If(cd Is Nothing, "", cd.za_REGIME)),
CsvField(If(cd Is Nothing, "", cd.za_RegistrationType)),
CsvField(If(cd Is Nothing, "", cd.za_MainProcedure)),
CsvField(If(cd Is Nothing, "", cd.za_AdditionalProcedure)),
CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_DeclarationDate))),
CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_ReleaseDate))),
CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_AcceptanceDate))),
CsvField(If(cd Is Nothing, "", cd.za_CustomsOffice)),
CsvField(If(cd Is Nothing, "", cd.za_EntryCustomsOffice)),
CsvField(If(cd Is Nothing, "", cd.za_RepresentationCode)),
CsvField(If(cd Is Nothing, "", cd.za_TransportModeInland)),
CsvField(If(cd Is Nothing, "", cd.za_TransportModeBorder)),
CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Vehicle)),
CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Type)),
CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Nationality)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr1)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr2)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr3)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr4)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr5)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr6)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr7)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr8)),
CsvField(If(cd Is Nothing, "", cd.za_ContainerNr9)),
CsvField(If(cd Is Nothing, "", cd.za_CountryDispatch)),
CsvField(If(cd Is Nothing, "", cd.za_CountryDestination)),
CsvField(If(cd Is Nothing, "", cd.za_CountryDestinationState)),
CsvField(If(cd Is Nothing, "", cd.za_CountryImport)),
CsvField(If(cd Is Nothing, "", cd.za_WarehouseCode)),
CsvField(If(cd Is Nothing, "", cd.za_Incoterms)),
CsvField(If(cd Is Nothing, "", cd.za_IncotermsPlace)),
CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_InvoiceAmount))),
CsvField(If(cd Is Nothing, "", cd.za_InvoiceCurrency)),
CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_FiscalRepFlag))),
CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_TaxDeduction))),
CsvField(If(cd Is Nothing, "", cd.za_ApplicantTaxOffice)),
CsvField(If(cd Is Nothing, "", cd.za_ApplicantVATNo)),
CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_DV1Flag))),
CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_Type)),
CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_No)),
CsvField(If(cd Is Nothing OrElse Not cd.za_AvisoId.HasValue, "", cd.za_AvisoId.Value.ToString())),
CsvField(If(cd Is Nothing OrElse Not cd.za_SendungsId.HasValue, "", cd.za_SendungsId.Value.ToString())),
CsvField(If(cd Is Nothing, "", cd.za_Remarks)),
CsvField(If(cd Is Nothing, "", cd.za_Sachbearbeiter)),
CsvField(If(cd Is Nothing, "", cd.za_SachbearbeiterId)),
CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_TotGrossMass))),
CsvField(If(cd Is Nothing, "", allParties)),
CsvField(If(importer Is Nothing, "", importer.zaParty_Name)),
CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)),
CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)),
CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)),
CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)),
CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)),
CsvField(If(cd Is Nothing, "", allDuties)),
CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyTotal))),
CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyEust))),
CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyExcludingEust))),
CsvField(If(cd Is Nothing, "", headerDocs)),
CsvField(""),
CsvField(If(cd Is Nothing, "", headerDocs)),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField(""),
CsvField("")
}))
End If
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try
Next
End Using
If Open Then
Process.Start(path)
End If
Return path
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
Return ""
End Try
End Function
Private Function CreateTargetPathCsv(AbfVon As Date, AbfBis As Date, prefix As String) As String
Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
My.Computer.FileSystem.CreateDirectory(sPath)
End If
Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".csv"
While System.IO.File.Exists(path)
path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".csv"
End While
Return path
End Function
Private Function CsvField(value As Object) As String
Dim s As String = If(value, "").ToString()
s = s.Replace("""", """""")
Return """" & s & """"
End Function
Private Function FormatDateForCsv(value As Object) As String
If value Is Nothing OrElse value Is DBNull.Value Then Return ""
If IsDate(value) Then Return CDate(value).ToString("yyyy-MM-dd")
Return value.ToString()
End Function
Private Function FormatDecimalForCsv(value As Object) As String
If value Is Nothing OrElse value Is DBNull.Value Then Return ""
If IsNumeric(value) Then Return Convert.ToDecimal(value).ToString(System.Globalization.CultureInfo.InvariantCulture)
Return value.ToString()
End Function
Private Function FormatBoolForCsv(value As Boolean) As String
Return If(value, "1", "0")
End Function
Private Function FormatNullableBoolForCsv(value As Boolean?) As String
If Not value.HasValue Then Return ""
Return If(value.Value, "1", "0")
End Function
Private Function GetDutyAmountTotal(cd As cVERAG_CustomsDeclarations) As Decimal
If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
Return cd.Duties.Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
End Function
Private Function GetParty(cd As cVERAG_CustomsDeclarations, roles As String()) As cVERAG_CustomsDeclarations_Parties
If cd Is Nothing OrElse cd.Parties Is Nothing Then Return Nothing
Return cd.Parties.FirstOrDefault(
Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper())
)
End Function
Private Function JoinParties(cd As cVERAG_CustomsDeclarations) As String
If cd Is Nothing OrElse cd.Parties Is Nothing OrElse cd.Parties.Count = 0 Then Return ""
Return String.Join(" || ",
cd.Parties.Select(Function(p)
Return String.Join(" | ", {
"Role=" & If(p.zaParty_Role, ""),
"Name=" & If(p.zaParty_Name, ""),
"EORI=" & If(p.zaParty_EORI, ""),
"EORI_NL=" & If(p.zaParty_EORI_NL, ""),
"Street=" & If(p.zaParty_Street, ""),
"PostalCode=" & If(p.zaParty_PostalCode, ""),
"City=" & If(p.zaParty_City, ""),
"Country=" & If(p.zaParty_Country, ""),
"TIN=" & If(p.zaParty_TIN, ""),
"VAT=" & If(p.zaParty_VATNumber, ""),
"TaxOffice=" & If(p.zaParty_TaxOffice, ""),
"Contact=" & If(p.zaParty_ContactName, ""),
"Phone=" & If(p.zaParty_Phone, ""),
"Email=" & If(p.zaParty_Email, "")
})
End Function))
End Function
Private Function JoinDuties(cd As cVERAG_CustomsDeclarations) As String
If cd Is Nothing OrElse cd.Duties Is Nothing OrElse cd.Duties.Count = 0 Then Return ""
Return String.Join(" || ",
cd.Duties.Select(Function(d)
Return String.Join(" | ", {
"DutyType=" & If(d.zaDuty_DutyType, ""),
"AmountEUR=" & FormatDecimalForCsv(d.zaDuty_AmountEUR),
"AmountForeign=" & FormatDecimalForCsv(d.zaDuty_AmountForeign),
"Currency=" & If(d.zaDuty_Currency, ""),
"BIN=" & If(d.zaDuty_BIN, ""),
"AccountType=" & If(d.zaDuty_AccountType, ""),
"AccountHeadCustoms=" & If(d.zaDuty_AccountHeadCustoms, ""),
"ApplicationType=" & If(d.zaDuty_ApplicationType, ""),
"AccountNo=" & If(d.zaDuty_AccountNo, ""),
"AccountEORI=" & If(d.zaDuty_AccountEORI, ""),
"AccountHolderName=" & If(d.zaDuty_AccountHolderName, ""),
"LimitDate=" & FormatDateForCsv(d.zaDuty_LimitDate)
})
End Function))
End Function
Private Function JoinDocuments(docs As List(Of cVERAG_CustomsDeclarations_Document)) As String
If docs Is Nothing OrElse docs.Count = 0 Then Return ""
Return String.Join(" || ",
docs.Select(Function(d)
Return String.Join(" | ", {
"Date=" & If(d.zaDoc_Date, ""),
"Section=" & If(d.zaDoc_Section, ""),
"Code=" & If(d.zaDoc_Code, ""),
"Reference=" & If(d.zaDoc_Reference, ""),
"Presentation=" & If(d.zaDoc_Presentation, ""),
"DepAmount=" & If(d.zaDoc_DepreciationAmount, ""),
"DepUnit=" & If(d.zaDoc_DepreciationUnitmeasurement, ""),
"DepQual=" & If(d.zaDoc_DepreciationUnitmeasurementQualifier, ""),
"Description=" & If(d.zaDoc_Description, "")
})
End Function))
End Function
Private Function MergeDocumentStrings(headerDocs As String, itemDocs As String) As String
If headerDocs = "" Then Return itemDocs
If itemDocs = "" Then Return headerDocs
Return headerDocs & " || " & itemDocs
End Function
End Class