private static void ValidateEndorsements(int billId, IReadOnlyList <EndorsementDto> endorsements, BillOfExchange bill) { int endorsementCount = endorsements.Count(); for (var a = 0; a < endorsementCount; a++) { EndorsementDto endorsementDto = endorsements[a]; if (a == 0 && endorsementDto.NewBeneficiaryId == bill.BeneficiaryId) { throw new BillIssuedToItselfException( $"First endorsement for bill id: {billId} has same new beneficiary id as bill's beneficiary id: {bill.BeneficiaryId}."); } if ((a + 1 < endorsementCount) && (endorsementDto.NewBeneficiaryId == endorsements[a + 1].NewBeneficiaryId)) { throw new BillIssuedToItselfException( $"There are two endorsements for bill id: {billId} that has same new beneficiary id: {bill.BeneficiaryId}."); } if (endorsementDto.PreviousEndorsementId != null && endorsementDto.PreviousEndorsementId > endorsementDto.Id) { throw new CantReferenceOldEndorsementsException( $"Endorsement for bill id: {billId} references older endorsement."); } } if (endorsements.Count(a => a.PreviousEndorsementId == null) > 1) { throw new MoreThanOnePreviousEndorsementIsNotSetException( $"Endorsements for bill id: {billId} has more than one cases where previous endorsement is not set."); } }
public HttpResponseMessage GetEndorsement([FromBody] EndorsementDto endorsement) { if (endorsement == null) { return(ReturnErrorResponseMessage(HttpStatusCode.BadRequest, "Endorsement payload is invalid")); } try { _logger.LogTrace("GetEndorsement :: GetPath started."); var endorsementPath = _generateDocumentService.GenerateEndorsement(endorsement); _logger.LogTrace("GetEndorsement :: GetPath done. :: EndorsementPath :: " + endorsementPath); if (string.IsNullOrWhiteSpace(endorsementPath)) { _logger.LogTrace("GetEndorsement :: EndorsementPath is null or empty."); return(ReturnErrorResponseMessage(HttpStatusCode.InternalServerError, "Endorsement generation failed :: TemplateUrl: " + endorsement.TemplatePdfUrl + " :: EmptyParse: " + endorsement.ParseEmptyText)); } if (_fileService.IsValidPdf(endorsementPath) == false) { _logger.LogTrace("GetEndorsement :: EndorsementPath is invalid pdf::" + endorsementPath); return(ReturnErrorResponseMessage(HttpStatusCode.InternalServerError, "Endorsement generation failed :: invalid pdf :: TemplateUrl: " + endorsement.TemplatePdfUrl + " :: EmptyParse: " + endorsement.ParseEmptyText)); } HttpResponseMessage response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; _logger.LogTrace("GetEndorsement :: Get memomry stream from endorsment at ." + endorsementPath); var responseStream = _fileService.GetMemoryStream(endorsementPath); _logger.LogTrace("GetEndorsement :: Get memomry stream done ."); response.Content = new StreamContent(responseStream); return(response); } catch (IOException ex) { _logger.LogException(ex); var errorResponse = ReturnErrorResponseMessage(HttpStatusCode.InternalServerError, ex.Message + "::InnerException::" + ex.InnerException?.Message + " :: TemplateUrl: " + endorsement.TemplatePdfUrl); throw new HttpResponseException(errorResponse); } catch (Exception ex) { _logger.LogException(ex); var errorResponse = ReturnErrorResponseMessage(HttpStatusCode.InternalServerError, ex.Message + "::InnerException::" + ex.InnerException?.Message + " :: TemplateUrl: " + endorsement.TemplatePdfUrl); throw new HttpResponseException(errorResponse); } }
public string GenerateEndorsement(EndorsementDto endorsement) { if (endorsement == null) { return(null); } _logger.LogTrace("GenerateEndorsement invoked. "); var templatePath = GetResource(endorsement.TemplatePdfUrl, EndorsementConstant.S_TEMPLATE_PDF_PATH); _logger.LogTrace("GetResource done. TemplatePath: " + templatePath); if (!File.Exists(templatePath)) { _logger.LogTrace("Endorsement file does not exist at path: " + templatePath); throw new Exception("Template pdf file not exists! :: Path: " + templatePath + " :: templatePdfUrl: " + endorsement.TemplatePdfUrl); } if (_fileService.IsValidPdf(templatePath) == false) { _logger.LogTrace("IsValidPdf is false :: TemplatePath: " + templatePath); throw new Exception("Template pdf file is invalid! :: Path: " + templatePath + " :: templatePdfUrl: " + endorsement.TemplatePdfUrl); } var filename = string.Empty; var folderEndorsement = string.Empty; var endorsementPath = string.Empty; _logger.LogTrace("Endorsement is set to parseemptytext: " + endorsement.ParseEmptyText); if (endorsement.ParseEmptyText) { filename = string.Format(CertificateConstant.S_DOCUMENT_FILENAME_EMPTY_FORMAT, EndorsementConstant.S_DOCUMENT_FILENAME_EMPTY, endorsement.EndorsementCode); _logger.LogTrace("Empty Endorsement filename: " + filename); folderEndorsement = HttpContext.Current.Server.MapPath(EndorsementConstant.S_OUTPUT_PATH_EMPTY); _logger.LogTrace("Empty Endorsement folder: " + folderEndorsement); endorsementPath = folderEndorsement + filename; _logger.LogTrace("Empty Endorsement path: " + endorsementPath); //Cleanup once a week. CleanUpFile(folderEndorsement, TimeSpan.FromDays(7)); if (File.Exists(endorsementPath)) { _logger.LogTrace("Empty Endorsement exists already. Return path. " + endorsementPath); return(endorsementPath); } } else { filename = _fileService.GetFileName("endorsement", endorsement.ApplicationId, endorsement.ProductId); _logger.LogTrace("Endorsement file: " + filename); folderEndorsement = HttpContext.Current.Server.MapPath(EndorsementConstant.S_OUTPUT_PATH); _logger.LogTrace("Endorsement folder: " + folderEndorsement); CleanUpFile(folderEndorsement, TimeSpan.FromDays(1)); endorsementPath = folderEndorsement + filename; _logger.LogTrace("Endorsement path: " + endorsementPath); } if (File.Exists(endorsementPath)) { File.Delete(endorsementPath); _logger.LogTrace("Endorsement exists already. Delete file. " + endorsementPath); } var reader = new PdfReader(templatePath); var stamper = new PdfStamper(reader, new FileStream(endorsementPath, FileMode.Create)); try { _logger.LogTrace("Parse actual pdf document start. "); stamper.SetEncryption(PdfWriter.STRENGTH128BITS, string.Empty, endorsement.PdfPassword, PdfWriter.AllowPrinting | PdfWriter.AllowCopy | PdfWriter.AllowScreenReaders); var pdfFormFields = stamper.AcroFields; var imageExtensions = new string[] { EndorsementConstant.S_IMAGE_FILE_EXTENSION_PNG, EndorsementConstant.S_IMAGE_FILE_EXTENSION_JPG }; if (endorsement.VariableValues != null) { foreach (var variableValue in endorsement.VariableValues) { if (imageExtensions.Contains(Path.GetExtension(variableValue.Value))) { var signatureFile = GetResource(variableValue.Value, EndorsementConstant.S_SIGNATURE_IMAGE_PATH); if (!string.IsNullOrWhiteSpace(signatureFile)) { stamper.SetImage(variableValue.Key, signatureFile); } } else { pdfFormFields.SetField(variableValue.Key, variableValue.Value); } } } _logger.LogTrace("Parse actual pdf document done."); return(endorsementPath); } catch (Exception exception) { _logger.LogException(exception); throw; } finally { // flatten form fields and close document stamper.FormFlattening = true; stamper.Close(); stamper.Dispose(); reader.Close(); reader.Dispose(); } }