From 18a563ecd18fd8485e763e2dd5a86f1a294a7a2d Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 10 Mar 2026 00:02:22 +0100 Subject: [PATCH] Improve annotation handling and date retrieval robustness Refactored annotation processing in PDFBurner.vb to handle null elements and annotations safely, preventing possible errors and improving code clarity. Updated GetSignedDate in ReceiverModel.vb to ensure consistent DateTime return values, handle DBNull and type conversions, and improve error handling. --- .../Jobs/FinalizeDocument/PDFBurner.vb | 31 ++++++++++++++++--- .../Models/ReceiverModel.vb | 18 +++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb b/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb index 781615ac..97347a72 100644 --- a/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb +++ b/EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb @@ -85,16 +85,37 @@ Namespace Jobs.FinalizeDocument 'Add annotations For Each element In elements + If element Is Nothing Then + Continue For + End If + + Dim elementAnnotations = If(element.Annotations, Enumerable.Empty(Of ElementAnnotation)()) + If Not elementAnnotations.Any() Then + Continue For + End If Dim frameX = (element.Left - 0.7 - margin) - Dim frame = element.Annotations.FirstOrDefault(Function(a) a.Name = "frame") + Dim frame = elementAnnotations.FirstOrDefault(Function(a) a.Name = "frame") Dim frameY = element.Top - 0.5 - margin - Dim frameYShift = frame.Y - frameY * inchFactor - Dim frameXShift = frame.X - frameX * inchFactor + Dim frameYShift As Double = 0 + Dim frameXShift As Double = 0 + + If frame IsNot Nothing Then + frameYShift = frame.Y - frameY * inchFactor + frameXShift = frame.X - frameX * inchFactor + End If + + For Each annot In elementAnnotations + If annot Is Nothing Then + Continue For + End If + + Dim yOffsetofFF As Double = 0 + If Not String.IsNullOrEmpty(annot.Name) Then + yOffsetsOfFF.TryGetValue(annot.Name, yOffsetofFF) + End If - For Each annot In element.Annotations - Dim yOffsetofFF As Double = If(yOffsetsOfFF.TryGetValue(annot.Name, yOffsetofFF), yOffsetofFF, 0) Dim y = frameY + yOffsetofFF If annot.Type = AnnotationType.FormField Then diff --git a/EnvelopeGenerator.CommonServices/Models/ReceiverModel.vb b/EnvelopeGenerator.CommonServices/Models/ReceiverModel.vb index 2d2395c9..78408d40 100644 --- a/EnvelopeGenerator.CommonServices/Models/ReceiverModel.vb +++ b/EnvelopeGenerator.CommonServices/Models/ReceiverModel.vb @@ -270,12 +270,26 @@ Public Class ReceiverModel Private Function GetSignedDate(pEmailAddress As String, pEnvelopeId As Integer) As Date Try Dim oStatusInt As Integer = EnvelopeStatus.DocumentSigned - Return Database.GetScalarValue($"SELECT ACTION_DATE FROM [DD_ECM].[dbo].[TBSIG_ENVELOPE_HISTORY] WHERE ENVELOPE_ID = {pEnvelopeId} + Dim value = Database.GetScalarValue($"SELECT ACTION_DATE FROM [DD_ECM].[dbo].[TBSIG_ENVELOPE_HISTORY] WHERE ENVELOPE_ID = {pEnvelopeId} And USER_REFERENCE = '{pEmailAddress}' AND [STATUS] = {oStatusInt}") + If value Is Nothing OrElse value Is DBNull.Value Then + Return DateTime.MinValue + End If + + If TypeOf value Is DateTime Then + Return DirectCast(value, DateTime) + End If + + Dim parsedDate As DateTime + If DateTime.TryParse(value.ToString(), parsedDate) Then + Return parsedDate + End If + + Return DateTime.MinValue Catch ex As Exception Logger.Error(ex) - Return Nothing + Return DateTime.MinValue End Try End Function