Skip to main content
November 16, 2021
Solved

Journal validation

  • November 16, 2021
  • 1 reply
  • 0 views
Is there a way to validate the Total Debit or Total Credit amount of a journal and send back a warning/fail message if the total is over a certain threshold when we try to post/save the journal?
Thanks
Best answer by ChristianW

here is a sample:

 

	Public Class MainClass
		Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As JournalsEventHandlerArgs) As Object
			Try
				Dim returnValue As Object = args.DefaultReturnValue
				args.UseReturnValueFromBusinessRule = False
				args.Cancel = False
				
				If args.OperationName = BREventOperationType.Journals.PostJournal Then
					Me.HandlePostJournal(si, globals, api, args)
				End If		

				Return returnValue
			Catch ex As Exception
				Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
			End Try
		End Function

#Region "Post Helpers"

		Private Sub HandlePostJournal(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As JournalsEventHandlerArgs)
			'------------------------------------------------------------------------------------------------------------
			'Reference Code: 	HandlePostJournal 
			'
			'Description:		
			'
			'------------------------------------------------------------------------------------------------------------
			Try

				If (args.IsBeforeEvent = True) Then
					Dim scenarioTypeId As Integer = BRApi.Workflow.General.GetScenarioTypeId(si, si.WorkflowClusterPk)
					Dim journalID As Guid = CType(args.Inputs(0), Guid)
					Dim journal As JournalEx = BRApi.Journals.Metadata.GetJournalOrTemplate(si, journalID)								

					If Not journal Is Nothing Then						
						Dim debitAmount As Decimal = 0
						Dim creditAmount As Decimal = 0
						For Each oneJournal As JournalLineItemEx In journal.LineItems
							
							debitAmount += oneJournal.LineItem.DebitAmount.Amount
							creditAmount += oneJournal.LineItem.CreditAmount.Amount

						Next

						If Math.Abs(debitAmount - creditAmount) > 100 Then
							
							Throw New Exception("Don't mess with Debit and Credit")
							
						End If	
							
					End If
				End If
				
			Catch ex As Exception
				Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
			End Try
		End Sub

#End Region	
	End Class

 

 

1 reply

November 16, 2021

Yes, you can use the journal event handler for this.

November 17, 2021

here is a sample:

 

	Public Class MainClass
		Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As JournalsEventHandlerArgs) As Object
			Try
				Dim returnValue As Object = args.DefaultReturnValue
				args.UseReturnValueFromBusinessRule = False
				args.Cancel = False
				
				If args.OperationName = BREventOperationType.Journals.PostJournal Then
					Me.HandlePostJournal(si, globals, api, args)
				End If		

				Return returnValue
			Catch ex As Exception
				Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
			End Try
		End Function

#Region "Post Helpers"

		Private Sub HandlePostJournal(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As JournalsEventHandlerArgs)
			'------------------------------------------------------------------------------------------------------------
			'Reference Code: 	HandlePostJournal 
			'
			'Description:		
			'
			'------------------------------------------------------------------------------------------------------------
			Try

				If (args.IsBeforeEvent = True) Then
					Dim scenarioTypeId As Integer = BRApi.Workflow.General.GetScenarioTypeId(si, si.WorkflowClusterPk)
					Dim journalID As Guid = CType(args.Inputs(0), Guid)
					Dim journal As JournalEx = BRApi.Journals.Metadata.GetJournalOrTemplate(si, journalID)								

					If Not journal Is Nothing Then						
						Dim debitAmount As Decimal = 0
						Dim creditAmount As Decimal = 0
						For Each oneJournal As JournalLineItemEx In journal.LineItems
							
							debitAmount += oneJournal.LineItem.DebitAmount.Amount
							creditAmount += oneJournal.LineItem.CreditAmount.Amount

						Next

						If Math.Abs(debitAmount - creditAmount) > 100 Then
							
							Throw New Exception("Don't mess with Debit and Credit")
							
						End If	
							
					End If
				End If
				
			Catch ex As Exception
				Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
			End Try
		End Sub

#End Region	
	End Class

 

 

November 17, 2021

After the exception the screen is not updating and the journal isn't rejected but still approve state.

But you can force the reject with the following line just before the Throw line

brapi.Journals.Process.ExecuteReject(si, journalID)