Asfinag_Datenaustausch

This commit is contained in:
2023-08-30 17:19:36 +02:00
parent 8f5fa223a5
commit 6ed2f79fe0
6 changed files with 778 additions and 485 deletions

View File

@@ -1,5 +1,6 @@
Imports System.Data.SqlClient
Imports System.Reflection
Imports System.Security.Cryptography
Imports DocumentFormat.OpenXml.VariantTypes
Public Class cAsfinag
@@ -7,14 +8,14 @@ Public Class cAsfinag
Public Class CLFHeader
Property PKFileName As Object = Nothing
Property recordType As Integer
Property recordType As String
Property fileVersion As Integer
Property fileNumber As Integer
Property inidcator As Object = Nothing
Property indcator As Object = Nothing
Property senderID As Object = Nothing
Property receiverID As Object = Nothing
Property fileCreationDate As Object = Nothing
Property fileCreationTime As Object = Nothing
Property fileCreationDate As DateTime
Property fileCreationTime As DateTime
Property ISOCountryCode As Object = Nothing
Property creationName As Object = Nothing
@@ -22,17 +23,23 @@ Public Class cAsfinag
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Sub New(PKFileName)
Sub New(PKFileName, fileNumber)
Me.PKFileName = PKFileName
Me.fileNumber = fileNumber
LOAD()
End Sub
Sub New()
End Sub
Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", fileNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileversion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", filenumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("inidcator", inidcator))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("indcator", indcator))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("senderID", senderID))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("receiverID", receiverID))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileCreationDate", fileCreationDate))
@@ -46,7 +53,7 @@ Public Class cAsfinag
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFHeader WHERE PKFileName=@PKFileName AND filenumber = @filenumber) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFHeader WHERE PKFileName=@PKFileName AND fileNumber = @fileNumber) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -59,8 +66,9 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM CLFHeader WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM CLFHeader WHERE PKFileName=@PKFileName AND fileNumber = @fileNumber", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
cmd.Parameters.AddWithValue("@filenumber", fileNumber)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
@@ -96,7 +104,7 @@ Public Class cAsfinag
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [CLFHeader] SET " & str & " WHERE PKFileName=@PKFileName AND filenumber = @filenumber")
Return (" UPDATE [CLFHeader] SET " & str & " WHERE PKFileName=@PKFileName ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
@@ -130,10 +138,10 @@ Public Class cAsfinag
Public Class CLFBody
Property PKFileName As Object = Nothing
Property recordType As Integer
Property RecordType As String
Property fileVersion As Integer
Property fileNumber As Integer
Property cardNumber As Integer
Property cardNumber As String
Property validTo As Integer
Property OBUID As Object = Nothing
Property vehicleLicensePlate As Object = Nothing
@@ -142,22 +150,24 @@ Public Class cAsfinag
Property emissionCategory As Object = Nothing
Property status As Object = Nothing
Property contractDate As Object = Nothing
Property PKLine As Long
Public hasEntry = False
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Sub New(PKFileName)
Sub New(PKFileName, PKLine)
Me.PKFileName = PKFileName
Me.PKLine = PKLine
LOAD()
End Sub
Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKLine", PKLine))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RecordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", filenumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", fileNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cardNumber", cardNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("validTo", validTo))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OBUID", OBUID))
@@ -168,13 +178,14 @@ Public Class cAsfinag
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("status", status))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("contractDate", contractDate))
Return list
End Function
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFBody WHERE PKFileName=@PKFileName AND filenumber = @filenumber) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFBody WHERE PKFileName=@PKFileName AND PKLine = @PKLine) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -187,8 +198,9 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM CLFBody WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM CLFBody WHERE PKFileName=@PKFileName AND PKLine = @PKLine ", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
cmd.Parameters.AddWithValue("@PKLine", PKLine)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
@@ -224,7 +236,7 @@ Public Class cAsfinag
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [CLFBody] SET " & str & " WHERE PKFileName=@PKFileName AND filenumber = @filenumbere ")
Return (" UPDATE [CLFBody] SET " & str & " WHERE PKFileName=@PKFileName AND PKLine = @PKLine ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
@@ -259,10 +271,10 @@ Public Class cAsfinag
End Class
Public Class CLTrailer
Public Class CLFTrailer
Property PKFileName As Object = Nothing
Property recordType As Integer
Property recordType As String
Property fileVersion As Integer
Property fileNumber As Integer
Property recordCount As Integer
@@ -291,7 +303,7 @@ Public Class cAsfinag
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFTrailer WHERE _BASE_id=@_BASE_id) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM CLFTrailer WHERE PKFileName=@PKFileName) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -304,7 +316,7 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM CLFTrailer WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM CLFTrailer WHERE PKFileName=@PKFileName", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
@@ -341,7 +353,7 @@ Public Class cAsfinag
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [CLFTrailer] SET " & str & " WHERE PKFileName=@PKFileName AND filenumber = @filenumbere ")
Return (" UPDATE [CLFTrailer] SET " & str & " WHERE PKFileName=@PKFileName")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
@@ -381,33 +393,36 @@ Public Class cAsfinag
Property recordType As Integer
Property fileVersion As Integer
Property fileNumber As Integer
Property inidcator As Object = Nothing
Property senderID As Object = Nothing
Property receiverID As Object = Nothing
Property fileCreationDate As Object = Nothing
Property fileCreationTime As Object = Nothing
Property fileCreationDate As DateTime
Property fileCreationTime As DateTime
Property ISOCountryCode As Object = Nothing
Property description As Object = Nothing
Property currencyCode As Object = Nothing
Public hasEntry = False
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Sub New(PKFileName)
Sub New(PKFileName, filenummer)
Me.PKFileName = PKFileName
Me.fileNumber = filenummer
LOAD()
End Sub
Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileversion", fileversion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("filenumber", filenumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("inidcator", inidcator))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", fileNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("senderID", senderID))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("receiverID", receiverID))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileCreationDate", fileCreationDate))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileCreationTime", fileCreationTime))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ISOCountryCode", ISOCountryCode))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("description", description))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("currencyCode", currencyCode))
Return list
End Function
@@ -415,7 +430,7 @@ Public Class cAsfinag
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRHeader WHERE PKFileName=@PKFileName AND filenumber = @filenumber) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRHeader WHERE PKFileName=@PKFileName AND fileNumber = @fileNumber) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -428,8 +443,9 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM TTRHeader WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM TTRHeader WHERE PKFileName=@PKFileName AND fileNumber = @fileNumber ", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
cmd.Parameters.AddWithValue("@fileNumber", fileNumber)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
@@ -501,9 +517,9 @@ Public Class cAsfinag
Property PKFileName As Object = Nothing
Property recordType As Integer
Property fileVersion As Integer
Property siteId As Integer
Property siteId As String
Property fileNumber As Integer
Property cardNumber As Integer
Property cardNumber As String
Property fileCreationDate As Date
Property deliveryNoteNumber As Integer
Property deliveryDate As Date
@@ -514,33 +530,48 @@ Public Class cAsfinag
Property amountInclVAT As Double
Property VATrate As Double
Property VATamount As Double
Property PKLine As Integer
Property km As Integer
Property driverId As Integer
Property receiptNumber As String
Property OBUID As String
Public hasEntry = False
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Sub New(PKFileName)
Sub New()
End Sub
Sub New(PKFileName, PKLine)
Me.PKFileName = PKFileName
Me.PKLine = PKLine
LOAD()
End Sub
Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKLine", PKLine))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileversion", fileversion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("siteId", siteId))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", fileNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cardNumber", cardNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileCreationDate", fileCreationDate))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("deliveryNoteNumber", deliveryNoteNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cardNumber", cardNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("deliveryDate", deliveryDate))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("deliveryTime", deliveryTime))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("transactionType", transactionType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("productCode", productCode))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("km", km))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("driverId", driverId))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("productQuantity", productQuantity))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("amountInclVAT", amountInclVAT))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VATrate", VATrate))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VATamount", VATamount))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("receiptNumber", receiptNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OBUID", OBUID))
Return list
End Function
@@ -548,7 +579,7 @@ Public Class cAsfinag
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRBody WHERE PKFileName=@PKFileName AND filenumber = @filenumber) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRBody WHERE PKFileName=@PKFileName AND PKLine = @PKLine) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -561,8 +592,9 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM TTRBody WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM TTRBody WHERE PKFileName=@PKFileName AND PKLine = @PKLine ", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
cmd.Parameters.AddWithValue("@PKLine", PKLine)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
@@ -598,7 +630,7 @@ Public Class cAsfinag
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [TTRBody] SET " & str & " WHERE PKFileName=@PKFileName AND filenumber = @filenumbere ")
Return (" UPDATE [TTRBody] SET " & str & " WHERE PKFileName=@PKFileName AND PKLine = @PKLine ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
@@ -642,8 +674,6 @@ Public Class cAsfinag
Property checksumProductQuantity As Double
Property checksumAmounntInclVAT As Double
Public hasEntry = False
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
@@ -656,8 +686,7 @@ Public Class cAsfinag
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileversion", fileversion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("filenumber", filenumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("recordCount", recordCount))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("checksumProductQuantity", checksumProductQuantity))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("checksumAmounntInclVAT", checksumAmounntInclVAT))
@@ -668,7 +697,7 @@ Public Class cAsfinag
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRTrailer WHERE _BASE_id=@_BASE_id) " &
Dim sqlstr = " BEGIN TRAN If EXISTS(Select * FROM TTRTrailer WHERE PKFileName=@PKFileName) " &
" BEGIN " & getUpdateCmd() & " End " &
" Else " &
" BEGIN " & getInsertCmd() & " End " &
@@ -681,7 +710,7 @@ Public Class cAsfinag
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionAsfinag()
Using cmd As New SqlCommand("Select * FROM TTRTrailer WHERE PKFileName=@PKFileName AND filenumber = @filenumber ", conn)
Using cmd As New SqlCommand("Select * FROM TTRTrailer WHERE PKFileName=@PKFileName", conn)
cmd.Parameters.AddWithValue("@PKFileName", PKFileName)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
@@ -718,7 +747,7 @@ Public Class cAsfinag
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [TTRTrailer] SET " & str & " WHERE PKFileName=@PKFileName AND filenumber = @filenumbere ")
Return (" UPDATE [TTRTrailer] SET " & str & " WHERE PKFileName=@PKFileName")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
@@ -759,4 +788,28 @@ Public Class cAsfinag
End Function
End Class
Shared Function fktMod10Prüfziffer(strNummer As String) As String
' Der Funktion wird im Feld strNummer der Wert ohne Prüfziffer übergeben.
' Die Funktion berechnet und liefert die Prüfziffer zurück.
Dim intIX As Integer
Dim intZSum As Integer
Dim intSum As Integer
Dim boo1 As Boolean
For intIX = Len(strNummer) To 1 Step -1
intZSum = IIf(boo1, Mid(strNummer, intIX, 1) * 1, Mid(strNummer, intIX, 1) * 2)
If intZSum < 10 Then
intSum = intSum + intZSum
Else
intSum = intSum + ((intZSum Mod 10) + ((intZSum - (intZSum Mod 10)) / 10))
End If
boo1 = Not boo1
Next intIX
fktMod10Prüfziffer = CStr((10 - (intSum Mod 10)) Mod 10)
End Function
End Class