255 lines
9.7 KiB
VB.net

Imports System.Data.SqlClient
Imports DigitalData.Modules.Base
Imports EnvelopeGenerator.Domain
Imports EnvelopeGenerator.Domain.Entities
Public Class ElementModel
Inherits BaseModel
Public Sub New(pState As State)
MyBase.New(pState)
End Sub
Private Function ToElement(pRow As DataRow) As DocumentReceiverElement
Return New DocumentReceiverElement() With {
.Id = pRow.ItemEx("GUID", 0),
.DocumentId = pRow.ItemEx("DOCUMENT_ID", 0),
.ReceiverId = pRow.ItemEx("RECEIVER_ID", 0),
.ElementType = [Enum].Parse(GetType(Constants.ElementType), pRow.ItemEx("ELEMENT_TYPE", Constants.ElementType.Signature)),
.X = pRow.ItemEx("POSITION_X", 0.0),
.Y = pRow.ItemEx("POSITION_Y", 0.0),
.Width = pRow.ItemEx("WIDTH", 0.0),
.Height = pRow.ItemEx("HEIGHT", 0.0),
.Page = pRow.ItemEx("PAGE", 0)
}
End Function
Private Function ToElements(pTable As DataTable) As List(Of DocumentReceiverElement)
Return pTable?.Rows.Cast(Of DataRow).
Select(AddressOf ToElement).
ToList()
End Function
Public Function ElementsExist(pEnvelopeId As Integer, pReceiverId As Integer) As Boolean
Try
Dim oSql = $"SELECT COUNT(*) FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] T
JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.DOCUMENT_ID = T2.GUID
WHERE T.RECEIVER_ID = {pReceiverId} AND T2.ENVELOPE_ID = {pEnvelopeId}"
Dim oElementCount As Integer = Database.GetScalarValue(oSql)
Return oElementCount > 0
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Public Function OneElementPerReceiverExist(pEnvelopeId As Integer) As Boolean
Try
Dim oSql = "SELECT COUNT(*) FROM ("
oSql += " SELECT DISTINCT RECEIVER_ID FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] T"
oSql += " JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.DOCUMENT_ID = T2.GUID"
oSql += $" WHERE T2.ENVELOPE_ID = {pEnvelopeId}"
oSql += " ) TMAX"
Dim oElementReceiverCount As Integer = Database.GetScalarValue(oSql)
Dim oSql2 = $"SELECT COUNT(*) FROM TBSIG_ENVELOPE_RECEIVER WHERE ENVELOPE_ID = {pEnvelopeId}"
Dim oEnvelopeReceiverCount As Integer = Database.GetScalarValue(oSql2)
Return oElementReceiverCount = oEnvelopeReceiverCount
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Public Function ElementsExist(pEnvelopeId As Integer) As Boolean
Try
Dim oSql = $"SELECT COUNT(*) FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] T
JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.DOCUMENT_ID = T2.GUID
WHERE T2.ENVELOPE_ID = {pEnvelopeId}"
Dim oElementCount As Integer = Database.GetScalarValue(oSql)
Return oElementCount > 0
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Public Function List(pDocumentId As Integer) As List(Of DocumentReceiverElement)
Try
Dim oSql = $"SELECT * FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] WHERE DOCUMENT_ID = {pDocumentId} ORDER BY PAGE ASC"
Dim oTable = Database.GetDatatable(oSql)
Return ToElements(oTable)
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Public Function List(pDocumentId As Integer, pReceiverId As Integer) As List(Of DocumentReceiverElement)
Try
Dim oReceiverConstraint = ""
If pReceiverId > 0 Then
oReceiverConstraint = $"AND RECEIVER_ID = {pReceiverId}"
End If
Dim oSql = $"SELECT * FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] WHERE DOCUMENT_ID = {pDocumentId} {oReceiverConstraint} ORDER BY PAGE ASC"
Dim oTable = Database.GetDatatable(oSql)
Return ToElements(oTable)
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Public Function Insert(pElement As DocumentReceiverElement) As Boolean
Try
Dim oSql = "INSERT INTO [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT]
([DOCUMENT_ID]
,[RECEIVER_ID]
,[ELEMENT_TYPE]
,[POSITION_X]
,[POSITION_Y]
,[WIDTH]
,[HEIGHT]
,[REQUIRED]
,[READ_ONLY]
,[PAGE])
VALUES
(@DOCUMENT_ID
,@RECEIVER_ID
,@ELEMENT_TYPE
,@POSITION_X
,@POSITION_Y
,@WIDTH
,@HEIGHT
,@REQUIRED
,@READ_ONLY
,@PAGE)"
Dim oCommand As New SqlCommand(oSql)
oCommand.Parameters.Add("DOCUMENT_ID", SqlDbType.NVarChar).Value = pElement.DocumentId
oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pElement.ReceiverId
oCommand.Parameters.Add("ELEMENT_TYPE", SqlDbType.Int).Value = pElement.ElementType
oCommand.Parameters.Add("POSITION_X", SqlDbType.Float).Value = pElement.X
oCommand.Parameters.Add("POSITION_Y", SqlDbType.Float).Value = pElement.Y
oCommand.Parameters.Add("WIDTH", SqlDbType.Float).Value = pElement.Width
oCommand.Parameters.Add("HEIGHT", SqlDbType.Float).Value = pElement.Height
oCommand.Parameters.Add("REQUIRED", SqlDbType.Bit).Value = pElement.Required
oCommand.Parameters.Add("READ_ONLY", SqlDbType.Bit).Value = pElement.ReadOnly
oCommand.Parameters.Add("PAGE", SqlDbType.Int).Value = pElement.Page
If Database.ExecuteNonQuery(oCommand) Then
pElement.Id = GetElementId(pElement)
Return True
Else
Dim filledSql As String = GetFilledSql(oCommand)
Logger.Warn(filledSql)
Return False
End If
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Function GetFilledSql(command As SqlCommand) As String
Dim oSql As String = command.CommandText
For Each oParam As SqlParameter In command.Parameters
Dim oValue As String
If oParam.Value Is Nothing OrElse oParam.Value Is DBNull.Value Then
oValue = "NULL"
ElseIf TypeOf oParam.Value Is String OrElse TypeOf oParam.Value Is Date Then
oValue = $"'{oParam.Value.ToString().Replace("'", "''")}'"
ElseIf TypeOf oParam.Value Is Boolean Then
oValue = If(CBool(oParam.Value), "1", "0")
Else
oValue = oParam.Value.ToString()
End If
oSql = oSql.Replace("@" & oParam.ParameterName, oValue)
Next
Return oSql
End Function
Public Function Update(pElement As DocumentReceiverElement) As Boolean
Try
Dim oSql = "UPDATE [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT]
SET [POSITION_X] = @POSITION_X
,[POSITION_Y] = @POSITION_Y
,[WIDTH] = @WIDTH
,[HEIGHT] = @HEIGHT
WHERE GUID = @GUID"
Dim oCommand As New SqlCommand(oSql)
oCommand.Parameters.Add("GUID", SqlDbType.NVarChar).Value = pElement.Id
oCommand.Parameters.Add("POSITION_X", SqlDbType.Float).Value = pElement.X
oCommand.Parameters.Add("POSITION_Y", SqlDbType.Float).Value = pElement.Y
oCommand.Parameters.Add("WIDTH", SqlDbType.Float).Value = pElement.Width
oCommand.Parameters.Add("HEIGHT", SqlDbType.Float).Value = pElement.Height
Return Database.ExecuteNonQuery(oCommand)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Private Function GetElementId(pElement As DocumentReceiverElement) As Integer
Try
Return Database.GetScalarValue($"SELECT MAX(GUID) FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT
WHERE DOCUMENT_ID = {pElement.DocumentId} AND RECEIVER_ID = {pElement.ReceiverId}")
Catch ex As Exception
Logger.Error(ex)
Return Nothing
End Try
End Function
Public Function DeleteElement(pElement As DocumentReceiverElement) As Boolean
Try
Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE GUID = {pElement.Id}"
Return Database.ExecuteNonQuery(oSql)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Public Function DeleteElements(pReceiverId As Integer, pDocumentId As Integer, pTransaction As SqlTransaction) As Boolean
Try
Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE RECEIVER_ID = {pReceiverId} AND DOCUMENT_ID = {pDocumentId}"
Return Database.ExecuteNonQuery(oSql, pTransaction)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Public Function DeleteElements(pDocumentId As Integer, pTransaction As SqlTransaction) As Boolean
Try
Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE DOCUMENT_ID = {pDocumentId}"
Return Database.ExecuteNonQuery(oSql, pTransaction)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
End Class