diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs index cf95a6ff..8cece9fb 100644 --- a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs +++ b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocumentJob.cs @@ -43,127 +43,105 @@ public class FinalizeDocumentJob(IOptions options, IConfiguration var jobId = typeof(FinalizeDocumentJob).FullName; logger.LogDebug("Starting job {jobId}", jobId); - try + _config = await mediator.Send(new ReadDefaultConfigQuery(), cancel); + + var envelopes = await envRepo + .Where(e => e.Status == EnvelopeStatus.EnvelopeCompletelySigned + && e.ChangedWhen.HasValue + && EF.Functions.DateDiffMinute(e.ChangedWhen.Value, DateTime.Now) >= CompleteWaitTime) + .OrderBy(e => e.Id) + .ToListAsync(cancel); + + if (envelopes.Count > 0) + logger.LogInformation("Found [{count}] completed envelopes.", envelopes.Count); + + var total = envelopes.Count; + var current = 1; + + foreach (var envelope in envelopes) { - _config = await mediator.Send(new ReadDefaultConfigQuery(), cancel); - - var envelopes = await envRepo - .Where(e => e.Status == EnvelopeStatus.EnvelopeCompletelySigned - && e.ChangedWhen.HasValue - && EF.Functions.DateDiffMinute(e.ChangedWhen.Value, DateTime.Now) >= CompleteWaitTime) - .OrderBy(e => e.Id) - .ToListAsync(cancel); - - if (envelopes.Count > 0) - logger.LogInformation("Found [{count}] completed envelopes.", envelopes.Count); - - var total = envelopes.Count; - var current = 1; - - foreach (var envelope in envelopes) + try { + var envelopeData = GetEnvelopeData(envelope.Id); + + if (envelopeData is null) + { + logger.LogWarning("EnvelopeData could not be loaded for Id [{id}]!", envelope.Id); + throw new ArgumentNullException(nameof(EnvelopeData)); + } + + logger.LogDebug("Burning Annotations to pdf ..."); + var burnedDocument = BurnAnnotationsToPdf(envelopeData); + if (burnedDocument is null) + { + logger.LogWarning("Document could not be finalized!"); + throw new ApplicationException("Document could not be finalized"); + } + + if (actionService?.CreateReport(envelope) == false) + { + logger.LogWarning("Document Report could not be created!"); + throw new ApplicationException("Document Report could not be created"); + } + + logger.LogDebug("Creating report.."); + var report = reportCreator!.CreateReport(envelope); + logger.LogDebug("Report created!"); + + logger.LogDebug("Merging documents ..."); + var mergedDocument = pdfMerger!.MergeDocuments(burnedDocument, report); + logger.LogDebug("Documents merged!"); + + var outputDirectoryPath = Path.Combine(_config.ExportPath, _parentFolderUid); + logger.LogDebug("oOutputDirectoryPath is {outputDirectoryPath}", outputDirectoryPath); + if (!Directory.Exists(outputDirectoryPath)) + { + logger.LogDebug("Directory not existing. Creating ... "); + Directory.CreateDirectory(outputDirectoryPath); + } + + var outputFilePath = Path.Combine(outputDirectoryPath, $"{envelope.Uuid}.pdf"); + logger.LogDebug("Writing finalized Pdf to disk.."); + logger.LogInformation("Output path is [{outputFilePath}]", outputFilePath); + try { - var envelopeData = GetEnvelopeData(envelope.Id); - - if (envelopeData is null) - { - logger.LogWarning("EnvelopeData could not be loaded for Id [{id}]!", envelope.Id); - throw new ArgumentNullException(nameof(EnvelopeData)); - } - - logger.LogDebug("Burning Annotations to pdf ..."); - var burnedDocument = BurnAnnotationsToPdf(envelopeData); - if (burnedDocument is null) - { - logger.LogWarning("Document could not be finalized!"); - throw new ApplicationException("Document could not be finalized"); - } - - if (actionService?.CreateReport(envelope) == false) - { - logger.LogWarning("Document Report could not be created!"); - throw new ApplicationException("Document Report could not be created"); - } - - logger.LogDebug("Creating report.."); - var report = reportCreator!.CreateReport(envelope); - logger.LogDebug("Report created!"); - - logger.LogDebug("Merging documents ..."); - var mergedDocument = pdfMerger!.MergeDocuments(burnedDocument, report); - logger.LogDebug("Documents merged!"); - - var outputDirectoryPath = Path.Combine(_config.ExportPath, _parentFolderUid); - logger.LogDebug("oOutputDirectoryPath is {outputDirectoryPath}", outputDirectoryPath); - if (!Directory.Exists(outputDirectoryPath)) - { - logger.LogDebug("Directory not existing. Creating ... "); - Directory.CreateDirectory(outputDirectoryPath); - } - - var outputFilePath = Path.Combine(outputDirectoryPath, $"{envelope.Uuid}.pdf"); - logger.LogDebug("Writing finalized Pdf to disk.."); - logger.LogInformation("Output path is [{outputFilePath}]", outputFilePath); - - try - { - File.WriteAllBytes(outputFilePath, mergedDocument); - } - catch (Exception ex) - { - logger.LogWarning("Could not export final document to disk!"); - throw new ExportDocumentException("Could not export final document to disk!", ex); - } - - logger.LogDebug("Writing EB-bytes to database..."); - UpdateFileDb(outputFilePath, envelope.Id); - - if (!SendFinalEmails(envelope)) - { - throw new ApplicationException("Final emails could not be sent!"); - } - - logger.LogInformation("Report-mails successfully sent!"); - - logger.LogDebug("Setting envelope status.."); - if (actionService?.FinalizeEnvelope(envelope) == false) - { - logger.LogWarning("Envelope could not be finalized!"); - throw new ApplicationException("Envelope could not be finalized"); - } + File.WriteAllBytes(outputFilePath, mergedDocument); } catch (Exception ex) { - logger.LogError(ex); - logger.LogWarning(ex, "Unhandled exception while working envelope [{id}]", envelope.Id); + logger.LogWarning("Could not export final document to disk!"); + throw new ExportDocumentException("Could not export final document to disk!", ex); } - current += 1; - logger.LogInformation("Envelope [{id}] finalized!", envelope.Id); + logger.LogDebug("Writing EB-bytes to database..."); + UpdateFileDb(outputFilePath, envelope.Id); + + if (!SendFinalEmails(envelope)) + { + throw new ApplicationException("Final emails could not be sent!"); + } + + logger.LogInformation("Report-mails successfully sent!"); + + logger.LogDebug("Setting envelope status.."); + if (actionService?.FinalizeEnvelope(envelope) == false) + { + logger.LogWarning("Envelope could not be finalized!"); + throw new ApplicationException("Envelope could not be finalized"); + } + } + catch (Exception ex) + { + logger.LogError(ex); + logger.LogWarning(ex, "Unhandled exception while working envelope [{id}]", envelope.Id); } - logger.LogDebug("Completed job {jobId} successfully!", jobId); - } - catch (MergeDocumentException ex) - { - logger.LogWarning("Certificate Document job failed at step: Merging documents!"); - logger.LogError(ex); - } - catch (ExportDocumentException ex) - { - logger.LogWarning("Certificate Document job failed at step: Exporting document!"); - logger.LogError(ex); - } - catch (Exception ex) - { - logger.LogWarning("Certificate Document job failed!"); - logger.LogError(ex); - } - finally - { - logger.LogDebug("Job execution for [{jobId}] ended", jobId); + current += 1; + logger.LogInformation("Envelope [{id}] finalized!", envelope.Id); } + + logger.LogDebug("Completed job {jobId} successfully!", jobId); } private void UpdateFileDb(string filePath, long envelopeId)