Files
SDL/VERAG_PROG_ALLGEMEIN/Classes/cRechnungsnummern.vb

248 lines
12 KiB
VB.net

Imports System.Data.SqlClient
Public Class cRechnungsnummern
Property SpeditionsbuchNr As String = "" 'FIRMA!
Property Buchungsjahr As String = ""
Property VonRechnungsNr As Integer = -1
Property BisRechnungsNr As Integer = -1
Property LfdRechnungsNr As Integer = 0
' Property upsize_ts As String
Dim SQL As New SQL
Public Sub New(SpeditionsbuchNr As String, Buchungsjahr As String)
Me.SpeditionsbuchNr = SpeditionsbuchNr
Me.Buchungsjahr = Buchungsjahr
'Default-Werte:
'-------------------------------------
Select Case SpeditionsbuchNr
Case 1
VonRechnungsNr = Now.ToString("yy") & "100001"
BisRechnungsNr = Now.ToString("yy") & "199999"
Case 3
VonRechnungsNr = Now.ToString("yy") & "300001"
BisRechnungsNr = Now.ToString("yy") & "399999"
Case 7
VonRechnungsNr = Now.ToString("yy") & "700001"
BisRechnungsNr = Now.ToString("yy") & "799999"
Case 11
VonRechnungsNr = Now.ToString("yy") & "900001"
BisRechnungsNr = Now.ToString("yy") & "999999"
Case 15
VonRechnungsNr = Now.ToString("yy") & "200001"
BisRechnungsNr = Now.ToString("yy") & "299999"
Case 20
VonRechnungsNr = Now.ToString("yy") & "400001"
BisRechnungsNr = Now.ToString("yy") & "499999"
Case 17 'FrontOffice
VonRechnungsNr = Now.ToString("yy") & "500001"
BisRechnungsNr = Now.ToString("yy") & "599999"
Case 21 ' UNISPED AT
VonRechnungsNr = "7000000"
BisRechnungsNr = "7999999"
Case 22 ' UNISPED DE
VonRechnungsNr = "9000000"
BisRechnungsNr = "9999999"
Case 23 ' UNISPED Zollservice
VonRechnungsNr = "5000000"
BisRechnungsNr = "5999999"
Case 26 ' VERAG-UNISPED
VonRechnungsNr = Now.ToString("yy") & "0000001"
BisRechnungsNr = Now.ToString("yy") & "9999999"
End Select
LfdRechnungsNr = VonRechnungsNr
'-------------------------------------
LOADANDUPDATE(SpeditionsbuchNr, Buchungsjahr, LfdRechnungsNr, VonRechnungsNr, BisRechnungsNr)
'LOAD(SpeditionsbuchNr, Buchungsjahr)
End Sub
Public Function INCREASE_RGNR() As Integer
If LfdRechnungsNr > 0 Then
LfdRechnungsNr += 1
Else
LfdRechnungsNr = 1
End If
SAVE()
'ROWVERSION
Return LfdRechnungsNr
End Function
Public Function DECREASE_RGNR() As Integer
If LfdRechnungsNr > 0 Then
LfdRechnungsNr -= 1
End If
SAVE()
Return LfdRechnungsNr
End Function
Public Function CHECK_RGNR(Optional sleep = False) As Integer ' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr.
Dim increased = False
If sleep Then System.Threading.Thread.Sleep(200) ' nur, um abzuwarten falls parallel eine Nr vergeben wird
While SQL.DLookup("count(*)", "Rechnungsausgang", " RechnungsNr='" & LfdRechnungsNr & "' and Firma_ID='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0) > 0
LfdRechnungsNr += 1
increased = True
System.Threading.Thread.Sleep(50) ' nur, um abzuwarten falls parallel eine Nr vergeben wird
End While
If increased Then SAVE()
Return LfdRechnungsNr
End Function
Public Shared Function CHECK_RGNR_NEW(aktuelleRechnungsnummer, SpeditionsbuchNr, Buchungsjahr) As Integer ' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr.
CHECK_RGNR_NEW = aktuelleRechnungsnummer
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
' If sleep Then System.Threading.Thread.Sleep(200) ' nur, um abzuwarten falls parallel eine Nr vergeben wird
While SQL.DLookup("count(*)", "Rechnungsausgang", " RechnungsNr='" & aktuelleRechnungsnummer & "' and Firma_ID='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0) > 0
'Wenn eine Doppelvergabe festgestellt wurde --> LfdRgNr aus DB neu ziehen:...
Dim RG_NR As New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(SpeditionsbuchNr, Buchungsjahr)
aktuelleRechnungsnummer = RG_NR.LfdRechnungsNr ' --> Die in der DB gespeicherte RgNr wird verwendet
CHECK_RGNR_NEW = RG_NR.LfdRechnungsNr ' --> Die in der DB gespeicherte RgNr wird verwendet
'RG_NR.INCREASE_RGNR() ' ..... und gelcih wieder hcoh zählen
System.Threading.Thread.Sleep(50) ' nur, um abzuwarten falls parallel eine Nr vergeben wird
End While
End Function
Public Shared Function DECREASE_RGNR_NEW(SpeditionsbuchNr, Buchungsjahr) As Boolean
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Return SQL.doSQL("UPDATE [Rechnungsnummern] SET LfdRechnungsNr=LfdRechnungsNr-1 WHERE SpeditionsbuchNr='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0)
End Function
Public Function SAVE() As Boolean 'obj As Object, tablename As String, where As String) As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()
Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM [Rechnungsnummern] WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr) " &
" BEGIN " & getUpdateCmd() & " END " &
" Else " &
" BEGIN " & getInsertCmd() & " END " &
" commit tran "
'MsgBox(sqlstr)
' Dim returnBool = SQL.doSQL(sqlstr, "FMZOLL", , list)
' Me.upsize_ts = SQL.DLookup("upsize_ts", "Rechnungsnummern", "SpeditionsbuchNr ='" & Me.SpeditionsbuchNr & "' AND Buchungsjahr='" & Me.Buchungsjahr & "'")
' Return returnBool
Return SQL.doSQL(sqlstr, "FMZOLL", , list)
End Function
Public Sub LOAD(SpeditionsbuchNr As String, Buchungsjahr As String)
Try
Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand("SELECT * FROM Rechnungsnummern WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr ", conn)
cmd.Parameters.AddWithValue("@SpeditionsbuchNr", SpeditionsbuchNr)
cmd.Parameters.AddWithValue("@Buchungsjahr", Buchungsjahr)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
Me.SpeditionsbuchNr = cSqlDb.checkNullStr(dr.Item("SpeditionsbuchNr"))
Me.Buchungsjahr = cSqlDb.checkNullStr(dr.Item("Buchungsjahr"))
Me.LfdRechnungsNr = cSqlDb.checkNullStr(dr.Item("LfdRechnungsNr"))
Me.VonRechnungsNr = cSqlDb.checkNullInteger(dr.Item("VonRechnungsNr"))
Me.BisRechnungsNr = cSqlDb.checkNullInteger(dr.Item("BisRechnungsNr"))
' Me.upsize_ts = dr.Item("upsize_ts")
End If
dr.Close()
End Using
End Using
'Return Nothing
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
' Return Nothing
End Sub
Public Sub LOADANDUPDATE(ByVal SpeditionsbuchNr As String, ByVal Buchungsjahr As String, ByRef LfdRechnungsNr As Integer, ByVal VonRechnungsNr As String, ByVal BisRechnungsNr As String)
Try
Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand(
"BEGIN TRAN IF EXISTS (SELECT * FROM Rechnungsnummern WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr)
BEGIN
SELECT [LfdRechnungsNr] FROM dbo.Rechnungsnummern WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr
UPDATE dbo.Rechnungsnummern SET LfdRechnungsNr= (SELECT [LfdRechnungsNr] as newNr FROM dbo.Rechnungsnummern WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr) + 1 WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr
END;
else
BEGIN
INSERT INTO [Rechnungsnummern](SpeditionsbuchNr,[Buchungsjahr],[VonRechnungsNr],[BisRechnungsNr],[LfdRechnungsNr])
OUTPUT @LfdRechnungsNr AS [LfdRechnungsNr]
VALUES (@SpeditionsbuchNr, @Buchungsjahr,@VonRechnungsNr,@BisRechnungsNr,@LfdRechnungsNr)
END
COMMIT TRAN", conn)
cmd.Parameters.AddWithValue("@SpeditionsbuchNr", SpeditionsbuchNr)
cmd.Parameters.AddWithValue("@Buchungsjahr", Buchungsjahr)
cmd.Parameters.AddWithValue("@LfdRechnungsNr", LfdRechnungsNr)
cmd.Parameters.AddWithValue("@VonRechnungsNr", VonRechnungsNr)
cmd.Parameters.AddWithValue("@BisRechnungsNr", BisRechnungsNr)
Dim dr = cmd.ExecuteScalar()
'Dim dr = cmd.ExecuteReader()
LfdRechnungsNr = dr
End Using
End Using
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
' Return Nothing
End Sub
Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.MyListItem2)
list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("SpeditionsbuchNr", SpeditionsbuchNr))
list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Buchungsjahr", Buchungsjahr))
list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("LfdRechnungsNr", LfdRechnungsNr))
list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("VonRechnungsNr", VonRechnungsNr))
list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("BisRechnungsNr", BisRechnungsNr))
Return list
End Function
Public Function getUpdateCmd() As String
Try
Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()
Dim str As String = ""
For Each i In list
str &= "[" & i.Text & "] = @" & i.Text.Replace("-", "").Replace(" ", "") & ","
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [Rechnungsnummern] SET " & str & " WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
Return ""
End Function
Public Function getInsertCmd() As String
Try
Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList()
Dim str As String = ""
Dim values As String = ""
For Each i In list
str &= "[" & i.Text & "],"
values &= "@" & i.Text.Replace("-", "").Replace(" ", "") & ","
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
values = values.Substring(0, values.Length - 1) 'wg. ','
Return (" INSERT INTO [Rechnungsnummern] (" & str & ") VALUES(" & values & ") ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
Return ""
End Function
End Class