138 lines
5.1 KiB
VB.net
138 lines
5.1 KiB
VB.net
Imports DevExpress.Spreadsheet
|
|
Imports DevExpress.Spreadsheet.Functions
|
|
Imports DevExpress.XtraSpreadsheet
|
|
Imports DevExpress.ExpressApp
|
|
Imports DevExpress.Data.Filtering
|
|
|
|
Public Class BallanceSpreadCustomFunctions
|
|
Inherits Object
|
|
Implements ICustomFunction
|
|
|
|
Private Const functionName As String = "GETGLBALLANCE"
|
|
Private ReadOnly functionParameters() As ParameterInfo
|
|
Private _BallanceHeader As BallanceHeader
|
|
Private _ocur As Xpo.XPObjectSpace
|
|
Private Structure stBalance
|
|
Dim Side As String
|
|
Dim AccountNumber As String
|
|
Dim Balance As String
|
|
Dim Operation As String
|
|
End Structure
|
|
Private _BalanceArray() As stBalance
|
|
Public Sub New(_p_BallanceHeader As BallanceHeader, _p_ocur As Xpo.XPObjectSpace)
|
|
' Missing optional parameters do not result in an error message.
|
|
Me.functionParameters = New ParameterInfo() {New ParameterInfo(ParameterType.Value, ParameterAttributes.Required), New ParameterInfo(ParameterType.Value, ParameterAttributes.Optional)}
|
|
_BallanceHeader = _p_BallanceHeader
|
|
_ocur = _p_ocur
|
|
End Sub
|
|
|
|
Public Function Evaluate(parameters As IList(Of ParameterValue), context As EvaluationContext) As ParameterValue Implements IFunction.Evaluate
|
|
Dim _GetGLBallance As Double = 0
|
|
ReDim _BalanceArray(100)
|
|
|
|
Try
|
|
If parameters.Count = 2 Then
|
|
|
|
MakeBalanceArray(parameters(1).TextValue)
|
|
_GetGLBallance = Math.Round(GetValuefromArray(parameters(0).NumericValue) / 1000, 0, MidpointRounding.AwayFromZero)
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
Return _GetGLBallance
|
|
End Function
|
|
|
|
Private Sub MakeBalanceArray(_BalanceString As String)
|
|
Dim _act_ballancestring As String = ""
|
|
Dim _act_arrayindex As Long = 0
|
|
Dim i As Long = 0
|
|
|
|
For i = LBound(_BalanceArray) To UBound(_BalanceArray)
|
|
_BalanceArray(i).AccountNumber = ""
|
|
_BalanceArray(i).Balance = ""
|
|
_BalanceArray(i).Operation = ""
|
|
_BalanceArray(i).Side = ""
|
|
Next
|
|
|
|
For i = 1 To Len(_BalanceString)
|
|
_act_ballancestring = Mid(_BalanceString, i, 1)
|
|
Select Case _act_ballancestring
|
|
Case "T", "K"
|
|
_BalanceArray(_act_arrayindex).Side = _act_ballancestring
|
|
Case "+", "-"
|
|
_act_arrayindex += 1
|
|
_BalanceArray(_act_arrayindex).Operation = _act_ballancestring
|
|
Case Else
|
|
_BalanceArray(_act_arrayindex).AccountNumber += _act_ballancestring
|
|
End Select
|
|
Next
|
|
|
|
End Sub
|
|
Private Function GetValuefromArray(_Mode As Long) As Double
|
|
Dim i As Long = 0
|
|
Dim _GetValueFromArray As Double = 0
|
|
|
|
For i = LBound(_BalanceArray) To UBound(_BalanceArray)
|
|
Select Case _BalanceArray(i).Operation
|
|
Case "+"
|
|
_GetValueFromArray += GetValuefromTrialBallance(_Mode, _BalanceArray(i).Side, _BalanceArray(i).AccountNumber)
|
|
Case "-"
|
|
_GetValueFromArray -= GetValuefromTrialBallance(_Mode, _BalanceArray(i).Side, _BalanceArray(i).AccountNumber)
|
|
End Select
|
|
Next
|
|
Return _GetValueFromArray
|
|
End Function
|
|
Private Function GetValuefromTrialBallance(_Mode As Long, _Side As String, _AccountNumber As String) As Double
|
|
Dim _TrialBalanceHeader As TrialBalanceHeader
|
|
Dim _GetValuefromTrialBallance As Double = 0
|
|
Dim _TrialBalance As TrialBalance = Nothing
|
|
If _Mode = 0 Then
|
|
_TrialBalanceHeader = _BallanceHeader.TrialBalanceHeader
|
|
Else
|
|
_TrialBalanceHeader = _BallanceHeader.TrialBalanceHeaderBefore
|
|
End If
|
|
|
|
_TrialBalance = _ocur.FindObject(Of TrialBalance)(CriteriaOperator.Parse("TrialBalanceHeader=? and AccountNumber=?", _TrialBalanceHeader, _AccountNumber))
|
|
If _TrialBalance IsNot Nothing Then
|
|
If _Side = "T" Then
|
|
_GetValuefromTrialBallance = _TrialBalance.DebitRAmountHUF
|
|
End If
|
|
If _Side = "K" Then
|
|
_GetValuefromTrialBallance = _TrialBalance.CreditRAmountHUF
|
|
End If
|
|
End If
|
|
Return _GetValuefromTrialBallance
|
|
End Function
|
|
#Region "BASE"
|
|
Public Function GetName(culture As Globalization.CultureInfo) As String Implements IFunction.GetName
|
|
Return functionName
|
|
End Function
|
|
|
|
Public ReadOnly Property Name As String Implements IFunction.Name
|
|
Get
|
|
Return functionName
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Parameters As ParameterInfo() Implements IFunction.Parameters
|
|
Get
|
|
Return functionParameters
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ReturnType As ParameterType Implements IFunction.ReturnType
|
|
Get
|
|
Return ParameterType.Value
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Volatile As Boolean Implements IFunction.Volatile
|
|
Get
|
|
Return False
|
|
End Get
|
|
End Property
|
|
#End Region
|
|
End Class
|