Zooflow: CheckInOut

This commit is contained in:
Jonathan Jenne
2022-03-28 16:42:47 +02:00
parent c833f486ac
commit ea8b4242ae
20 changed files with 696 additions and 98 deletions

View File

@@ -8,6 +8,18 @@ Namespace Methods.IDB.CheckInOutFile
Public Class CheckInOutFileMethod
Inherits BaseMethod
Private Enum CheckOutResult
CheckoutSuccessful
AlreadyCheckedOut
InternalError
End Enum
Private Enum CheckInResult
CheckinSuccessful
NotCheckedOut
InternalError
End Enum
Private ReadOnly Connection As SqlConnection
Private ReadOnly Transaction As SqlTransaction
@@ -23,10 +35,30 @@ Namespace Methods.IDB.CheckInOutFile
Dim oResult = False
If pData.Action = CheckInOutFileAction.CheckOut Then
oResult = CheckOutFile(pData.ObjectId, pData.User.UserName, pData.Comment)
Select Case CheckOutFile(pData.ObjectId, pData.User.UserName, pData.Comment)
Case CheckOutResult.CheckoutSuccessful
oResult = True
Case CheckOutResult.AlreadyCheckedOut
LogAndThrow($"File '{pData.ObjectId}' is already checked out.")
Case CheckOutResult.InternalError
LogAndThrow($"Internal Error occurred while checking out file [{pData.ObjectId}].")
End Select
ElseIf pData.Action = CheckInOutFileAction.CheckIn Then
oResult = CheckInFile(pData.ObjectId, pData.User.UserName)
Select Case CheckInFile(pData.ObjectId, pData.User.UserName)
Case CheckInResult.CheckinSuccessful
oResult = True
Case CheckInResult.NotCheckedOut
LogAndThrow($"File '{pData.ObjectId}' is not checked out.")
Case CheckInResult.InternalError
LogAndThrow($"Internal Error occurred while checking in file [{pData.ObjectId}].")
End Select
Else
LogAndThrow("Invalid action supplied!")
@@ -50,22 +82,31 @@ Namespace Methods.IDB.CheckInOutFile
End Try
End Function
Private Function CheckOutFile(pObjectId As Long, pUsername As String, pComment As String) As Boolean
Private Function CheckOutFile(pObjectId As Long, pUsername As String, pComment As String) As CheckOutResult
Try
Dim oTable = TestFileIsCheckedOut(pObjectId)
If oTable Is Nothing Then
Return False
Logger.Warn("File [{0}] could not be checked out because of an internal error!", pObjectId)
Return CheckOutResult.InternalError
End If
' If there are rows, the file is already checked out (either by the calling user or somebody else)
If oTable.Rows.Count > 0 Then
' TODO: Return the person who has this file checked out
Return False
Logger.Warn("File [{0}] is already checked out!", pObjectId)
Return CheckOutResult.AlreadyCheckedOut
End If
Dim oSQL = $"INSERT INTO TBIDB_OBJECT_CHECK_IN_OUT (IDB_OBJ_ID, CHECKED_OUT_WHEN, COMMENT, ADDED_WHO)
VALUES ({pObjectId}, GETDATE(), '{pComment}', '{pUsername}')"
Return DatabaseIDB.ExecuteNonQuery(oSQL)
If DatabaseIDB.ExecuteNonQuery(oSQL) = True Then
Logger.Info("File [{0}] checked out successfully!", pObjectId)
Return CheckOutResult.CheckoutSuccessful
Else
Logger.Warn("File [{0}] could not be checked out because of an internal error!", pObjectId)
Return CheckOutResult.InternalError
End If
Catch ex As Exception
Logger.Error(ex)
@@ -78,18 +119,27 @@ Namespace Methods.IDB.CheckInOutFile
Try
Dim oTable = TestFileIsCheckedOut(pObjectId)
If oTable Is Nothing Then
Return False
Logger.Warn("File [{0}] could not be checked in because of an internal error!", pObjectId)
Return CheckOutResult.InternalError
End If
' If there are no rows, the file is not checked out
If oTable.Rows.Count > 0 Then
Return True
If oTable.Rows.Count = 0 Then
Logger.Warn("File [{0}] is not checked out!", pObjectId)
Return CheckInResult.NotCheckedOut
End If
Dim oSQL = $"UPDATE TBIDB_OBJECT_CHECK_IN_OUT
SET CHECKED_IN_WHEN = GETDATE(), CHANGED_WHO = '{pUsername}'
WHERE IDB_OBJ_ID = {pObjectId} AND ADDED_WHO = '{pUsername}' AND CHECKED_IN_WHEN IS NULL"
Return DatabaseIDB.ExecuteNonQuery(oSQL)
If DatabaseIDB.ExecuteNonQuery(oSQL) = True Then
Logger.Info("File [{0}] checked in successfully!", pObjectId)
Return CheckInResult.CheckinSuccessful
Else
Logger.Warn("File [{0}] could not be checked in because of an internal error!", pObjectId)
Return CheckInResult.InternalError
End If
Catch ex As Exception
Logger.Error(ex)
@@ -100,6 +150,7 @@ Namespace Methods.IDB.CheckInOutFile
Private Function TestFileIsCheckedOut(pObjectId As Long) As DataTable
Try
Logger.Debug("Checking if file [{0}] is checked out.", pObjectId)
Dim oSqlCheck = $"SELECT * FROM TBIDB_OBJECT_CHECK_IN_OUT WHERE IDB_OBJ_ID = {pObjectId} AND CHECKED_IN_WHEN IS NULL"
Dim oTable As DataTable = DatabaseIDB.GetDatatable(oSqlCheck)