/// <summary> /// Gets the credit detail deposit record (type 61). /// </summary> /// <param name="fileFormat">The file format that contains the configuration to use.</param> /// <param name="bundleIndex">Number of existing bundle records in the cash letter.</param> /// <param name="transactions">The transactions associated with this deposit.</param> /// <returns>A collection of records.</returns> protected override List <X937.Record> GetCreditDetailRecords(ImageCashLetterFileFormat fileFormat, int bundleIndex, List <FinancialTransaction> transactions) { var accountNumber = Rock.Security.Encryption.DecryptString(GetAttributeValue(fileFormat, "AccountNumber")); var routingNumber = Rock.Security.Encryption.DecryptString(GetAttributeValue(fileFormat, "RoutingNumber")); var records = new List <X937.Record>(); var creditDetail = new X937.Records.CreditDetail { PayorRoutingNumber = "500100015", CreditAccountNumber = accountNumber, Amount = transactions.Sum(t => t.TotalAmount), InstitutionItemSequenceNumber = string.Format("{0}{1}", RockDateTime.Now.ToString("yyMMddHHmmss"), bundleIndex), DebitCreditIndicator = "2" }; records.Add(creditDetail); for (int i = 0; i < 2; i++) { using (var ms = GetDepositSlipImage(fileFormat, creditDetail, i == 0)) { // // Get the Image View Detail record (type 50). // var detail = new X937.Records.ImageViewDetail { ImageIndicator = 1, ImageCreatorRoutingNumber = routingNumber, ImageCreatorDate = DateTime.Now, ImageViewFormatIndicator = 0, CompressionAlgorithmIdentifier = 0, SideIndicator = i, ViewDescriptor = 0, DigitalSignatureIndicator = 0 }; // // Get the Image View Data record (type 52). // var data = new X937.Records.ImageViewData { InstitutionRoutingNumber = routingNumber, BundleBusinessDate = DateTime.Now, ClientInstitutionItemSequenceNumber = accountNumber, ClippingOrigin = 0, ImageData = ms.ReadBytesToEnd() }; records.Add(detail); records.Add(data); } } return(records); }
/// <summary> /// Gets the credit detail deposit record (type 61). /// </summary> /// <param name="fileFormat">The file format that contains the configuration to use.</param> /// <param name="transactions">The transactions associated with this deposit.</param> /// <param name="isFrontSide">True if the image to be retrieved is the front image.</param> /// <returns>A stream that contains the image data in TIFF 6.0 CCITT Group 4 format.</returns> protected virtual Stream GetDepositSlipImage(ImageCashLetterFileFormat fileFormat, X937.Records.CreditDetail creditDetail, bool isFrontSide) { var bitmap = new System.Drawing.Bitmap(1200, 550); var g = System.Drawing.Graphics.FromImage(bitmap); var depositSlipTemplate = GetAttributeValue(fileFormat, "DepositSlipTemplate"); var mergeFields = new Dictionary <string, object> { { "FileFormat", fileFormat }, { "Amount", creditDetail.Amount.ToString("C") } }; var depositSlipText = depositSlipTemplate.ResolveMergeFields(mergeFields, null); // // Ensure we are opague with white. // g.FillRectangle(System.Drawing.Brushes.White, new System.Drawing.Rectangle(0, 0, 1200, 550)); if (isFrontSide) { g.DrawString(depositSlipText, new System.Drawing.Font("Tahoma", 30), System.Drawing.Brushes.Black, new System.Drawing.PointF(50, 50)); } g.Flush(); // // Ensure the DPI is correct. // bitmap.SetResolution(200, 200); // // Compress using TIFF, CCITT Group 4 format. // var codecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() .Where(c => c.MimeType == "image/tiff") .First(); var parameters = new System.Drawing.Imaging.EncoderParameters(1); parameters.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, ( long )System.Drawing.Imaging.EncoderValue.CompressionCCITT4); var ms = new MemoryStream(); bitmap.Save(ms, codecInfo, parameters); ms.Position = 0; return(ms); }