Imports System.Data Imports System.Data.Common Imports System.Data.SqlClient Imports DigitalData.Modules.Base Public Class ReceiverModel Inherits BaseModel Public Sub New(pState As State) MyBase.New(pState) End Sub Private Function ToReceiver(pRow As DataRow) As EnvelopeReceiver Return New EnvelopeReceiver() With { .Id = pRow.ItemEx("GUID", 0), .Email = pRow.ItemEx("EMAIL_ADDRESS", ""), .Name = pRow.ItemEx("NAME", ""), .Sequence = pRow.ItemEx("SEQUENCE", 0) } End Function Public Function TestReceiverExists(pReceiver As EnvelopeReceiver) As Boolean Try Dim oGuid = Database.GetScalarValue($"SELECT COALESCE(GUID, 0) FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pReceiver.Email}'") pReceiver.Id = oGuid Return oGuid > 0 Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Insert(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Try Dim oSql As String = "INSERT INTO [dbo].[TBSIG_RECEIVER] ([EMAIL_ADDRESS] ,[SIGNATURE]) VALUES (@EMAIL ,@SIGNATURE)" Dim oCommand = New SqlCommand(oSql) oCommand.Parameters.Add("EMAIL", SqlDbType.NVarChar).Value = pReceiver.Email oCommand.Parameters.Add("SIGNATURE", SqlDbType.NVarChar).Value = pReceiver.Signature Dim oResult = Database.ExecuteNonQuery(oCommand) If oResult = True Then pReceiver.Id = GetReceiverId(pReceiver.Email, pTransaction) Else Return False End If Return True Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Update(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Try Dim oSql As String = "UPDATE [dbo].[TBSIG_USER_RECEIVER] SET [NAME] = @NAME ,[COMPANY_NAME] = @COMPANY ,[JOB_TITLE] = @JOB WHERE RECEIVER_ID = @RECEIVER_ID" Dim oCommand = New SqlCommand(oSql) oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.Int).Value = pReceiver.Id oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pReceiver.Id Return Database.ExecuteNonQuery(oCommand, pTransaction) Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Unassign(pEnvelope As Envelope, pTransaction As SqlTransaction) As Boolean Try Return Database.ExecuteNonQuery($"DELETE FROM [dbo].[TBSIG_ENVELOPE_RECEIVER] WHERE [ENVELOPE_ID] = {pEnvelope.Id}", pTransaction) Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function Assign(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE_RECEIVER] ([ENVELOPE_ID] ,[RECEIVER_ID] ,[PRIVATE_MESSAGE] ,[ACCESS_CODE] ,[NAME] ,[JOB_TITLE] ,[COMPANY_NAME] ,[SEQUENCE]) VALUES (@ENVELOPE_ID ,@RECEIVER_ID ,@MESSAGE ,@ACCESS_CODE ,@NAME ,@JOB ,@COMPANY ,@SEQUENCE)" Dim oCommand As New SqlCommand(oSql) oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.NVarChar).Value = pEnvelope.Id oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pReceiver.Id oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pReceiver.PrivateMessage oCommand.Parameters.Add("ACCESS_CODE", SqlDbType.NVarChar).Value = pReceiver.AccessCode oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company oCommand.Parameters.Add("SEQUENCE", SqlDbType.NVarChar).Value = pReceiver.Sequence Return Database.ExecuteNonQuery(oCommand, pTransaction) End Function Public Function ListEnvelopeReceivers(pEnvelopeId As Integer) As IEnumerable(Of EnvelopeReceiver) Try Dim oSql = $"SELECT * FROM [dbo].[VWSIG_ENVELOPE_RECEIVERS] WHERE ENVELOPE_ID = {pEnvelopeId}" Dim oTable = Database.GetDatatable(oSql) Return oTable?.Rows.Cast(Of DataRow). Select(AddressOf ToReceiver). ToList() Catch ex As Exception Logger.Error(ex) Return Nothing End Try End Function Public Function ListReceivers(pExistingReceivers As IEnumerable(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver) Try If pExistingReceivers.Count = 0 Then Return New List(Of EnvelopeReceiver) End If Dim oAddresses = pExistingReceivers.Select(Function(r) $"'{r.Email}'").JoinToString(",") Dim oSql = $"SELECT * FROM [dbo].[TBSIG_RECEIVER] WHERE EMAIL_ADDRESS IN ({oAddresses})" Dim oTable = Database.GetDatatable(oSql) Return oTable?.Rows.Cast(Of DataRow). Select(AddressOf ToReceiver). ToList() Catch ex As Exception Logger.Error(ex) Return Nothing End Try End Function Public Function Delete(pReceiverId As Integer, pEnvelopeId As Integer, pTransaction As SqlTransaction) As Boolean Try Dim oSql = $"DELETE FROM TBSIG_ENVELOPE_RECEIVER WHERE RECEIVER_ID = {pReceiverId} AND ENVELOPE_ID = {pEnvelopeId}" Return Database.ExecuteNonQuery(oSql, pTransaction) Catch ex As Exception Logger.Error(ex) Return False End Try End Function Private Function GetReceiverId(pEmailAddress As String, pTransaction As SqlTransaction) As Integer Try Return Database.GetScalarValue($"SELECT GUID FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pEmailAddress}'", pTransaction) Catch ex As Exception Logger.Error(ex) Return Nothing End Try End Function End Class