Imports System.Data Imports System.Data.SqlClient Imports DigitalData.Modules.Base Public Class ElementModel Inherits BaseModel Public Sub New(pState As State) MyBase.New(pState) End Sub Private Function ToElement(pRow As DataRow) As EnvelopeDocumentElement Return New EnvelopeDocumentElement() 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 EnvelopeDocumentElement) 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 EnvelopeDocumentElement) 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 EnvelopeDocumentElement) 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 EnvelopeDocumentElement) 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 Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Update(pElement As EnvelopeDocumentElement) 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 EnvelopeDocumentElement) 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 EnvelopeDocumentElement) 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