using System; using System.Collections.Generic; using System.Text; using ceTe.DynamicPDF; using ceTe.DynamicPDF.Merger; using ceTe.DynamicPDF.Text; using System.Configuration; using System.Reflection; using System.IO; using ceTe.DynamicPDF.Imaging; using Dundas.Charting.WebControl; using System.Threading; using System.Globalization; using ceTe.DynamicPDF.PageElements; //using PDFGeneratorLetteraBenvenuto; public enum TipoLettera { LetteraAccettazioneConAttivazioneSei, LetteraAccettazioneAttivazioneSeiPosticipata, RistampaLettera, ReportPeriodico, LetteraCommerciale } namespace LetteraAccompagnamento { public enum TipoReport { Diagnosi, Monitoraggio } } public abstract class LetteraBenvenuto { private byte[] data; public byte[] Data { get { return data; } } protected Image firma; protected Document lettera; protected int fontSize, idLettera; protected string path, nome, cognome, appellativo, nomeLettera, indirizzo, rete, testoSaluti, testoOggetto, testo; protected FormattedTextArea cliente, indirizzoBanca, oggetto, luogo, saluti, corpo; protected DateTime dataGenerazione; protected TemplateProvider tp; /*** Fix idReportDiagnosi per FD 22/06/2023 - Pino ***/ //public int idReportDiagnosiLettera; public string isPeriodico { get; set; } /*****************************************************/ protected LetteraBenvenuto(string rete, int idLettera, string testo, string nome, string cognome, string indirizzo, bool ristampa, string appellativo, string obj, string firma, TipoContratto contract, int idReportDiagnosi) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); this.rete = rete; this.data = null; this.appellativo = appellativo; this.testoOggetto = obj; this.testoSaluti = firma; this.indirizzo = indirizzo; this.idLettera = idLettera; this.testo = testo; this.nome = nome; this.cognome = cognome; //this.codiceContratto = codiceContratto; dataGenerazione = DateTime.Now; PageDimensions dimensions = new PageDimensions(PageSize.A4, PageOrientation.Portrait); dimensions.BottomMargin = Convert.ToInt32(ConfigurationManager.AppSettings["MargineInfPX"]); dimensions.TopMargin = Convert.ToInt32(ConfigurationManager.AppSettings["MargineSupPX"]); dimensions.LeftMargin = Convert.ToInt32(ConfigurationManager.AppSettings["MargineSxPX"]); dimensions.RightMargin = Convert.ToInt32(ConfigurationManager.AppSettings["MargineDxPX"]); //Page page = new Page(dimensions); lettera = new Document(); // Lettura Template //System.Reflection.Assembly thisExe; //thisExe = System.Reflection.Assembly.GetExecutingAssembly(); //System.IO.Stream file = null; //if (rete.ToUpper() == "F") // file = thisExe.GetManifestResourceStream("PDFGeneratorLetteraBenvenuto.TemplateBF_New2.pdf"); //else // file = thisExe.GetManifestResourceStream("PDFGeneratorLetteraBenvenuto.templateSPI_New2.pdf"); //TemplateProvider.idReportDiagnosi = idReportDiagnosi; tp = new TemplateProvider((int)contract,rete, false); System.IO.Stream file = tp.TemplateWelcomeLetter;// TemplateReport; PdfDocument pp = new PdfDocument(file); Page page = new ImportedPage(pp.GetPage(1)); page.Dimensions = dimensions; // pg = new ImportedPage(pp.GetPage(1)); lettera.Pages.Add(page); /**** Modifica dimensione font per Amministrato 21032024 - Pino ***/ fontSize = 9; //10;//Solo per lettera di benvenuto Convert.ToInt32(ConfigurationManager.AppSettings["fontSize"]); /******************************************************************/ string[] valoriTextArea; valoriTextArea = ConfigurationManager.AppSettings["AreaClientePX"].Split(','); cliente = new FormattedTextArea(string.Empty, Convert.ToInt32(valoriTextArea[0]), Convert.ToInt32(valoriTextArea[1]), Convert.ToInt32(valoriTextArea[2]), Convert.ToInt32(valoriTextArea[3]), FontFamily.Times, 10, //fontSize, true); valoriTextArea = ConfigurationManager.AppSettings["AreaLuogoPX"].Split(','); luogo = new FormattedTextArea(string.Empty, Convert.ToInt32(valoriTextArea[0]), Convert.ToInt32(valoriTextArea[1]), Convert.ToInt32(valoriTextArea[2]), Convert.ToInt32(valoriTextArea[3]), FontFamily.Times, fontSize, true); valoriTextArea = ConfigurationManager.AppSettings["AreaOggettoPX"].Split(','); oggetto = new FormattedTextArea(string.Empty, Convert.ToInt32(valoriTextArea[0]), Convert.ToInt32(valoriTextArea[1]), Convert.ToInt32(valoriTextArea[2]), Convert.ToInt32(valoriTextArea[3]), FontFamily.Times, fontSize, true); valoriTextArea = ConfigurationManager.AppSettings["AreaCorpoPX"].Split(','); corpo = new FormattedTextArea(string.Empty, Convert.ToInt32(valoriTextArea[0]), Convert.ToInt32(valoriTextArea[1]) - 20, Convert.ToInt32(valoriTextArea[2]), Convert.ToInt32(valoriTextArea[3]) + 30, FontFamily.Times, fontSize, true); valoriTextArea = ConfigurationManager.AppSettings["AreaSalutiPX"].Split(','); this.saluti = new FormattedTextArea(string.Empty, Convert.ToInt32(valoriTextArea[0]), Convert.ToInt32(valoriTextArea[1]) + ((this.rete == "S") ? 0 : 0), Convert.ToInt32(valoriTextArea[2]), Convert.ToInt32(valoriTextArea[3]), FontFamily.Times, fontSize, // Amministrato 21032024 - Pino true); // Fc 03/07/2015 // modifica "a mano" del valore impostato xFirma a 290 //int xFirma = (int)(saluti.X + (this.saluti.Width - 94) / 2); int xFirma = 290; /*** Fix - Modifica posizionamento saluti - 03/03/2023 - Pino ***/ saluti.Y -= 30; if (rete.ToUpper() == "W") { this.testoSaluti = string.Concat("
", this.testoSaluti,"
"); saluti.X += 75; saluti.Y -= 40; } else { if (rete.ToUpper() == "S") { this.testoSaluti = string.Concat("
", this.testoSaluti, "
"); saluti.X += 50; saluti.Y -= 30; //40; } else { saluti.X += 50; saluti.Y -= 30; //14; } } /*****************************************************************/ int yFirma = (int)(saluti.Y - saluti.Height + tp.SalutiYBonus) - ((this.rete == "S") ? 4 : 0); if (ristampa) { //this.firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.Firma_Ristampa.jpg", xFirma, yFirma, (float)0.2); this.firma = new Image(CACHE.IMAGES.Get("firma_ristampa"), xFirma, yFirma, (float)0.2); } else { switch (rete.ToUpper()) { case "F": this.firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.png", xFirma + 68, yFirma, 0.45F); //this.firma = new Image(CACHE.IMAGES.Get("firma_fideuram"), xFirma + 68, yFirma, 0.45F); break; case "W": this.firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.png", xFirma + 93, yFirma + 12, 0.45F); //this.firma = new Image(CACHE.IMAGES.Get("firma_fideuram"), xFirma + 93, yFirma + 12, 0.45F); break; case "S": this.firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.png", xFirma + 68, yFirma + 15, 0.45F); //this.firma = new Image(CACHE.IMAGES.Get("firma_fideuram"), xFirma + 68, yFirma + 15, 0.45F); break; default: this.firma = GetImageByResourceName("PDFGeneratorLetteraBenvenuto.firma_Fideuram.png", xFirma + 68, yFirma, 0.45F); //this.firma = new Image(CACHE.IMAGES.Get("firma_fideuram"), xFirma + 68, yFirma, 0.45F); break; } } oggetto.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; corpo.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; luogo.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Right; page.Elements.Add(corpo); page.Elements.Add(cliente); page.Elements.Add(oggetto); page.Elements.Add(luogo); //page.Elements.Add(indirizzoBanca); if (!(this is LetteraCommerciale) || (this is LetteraCommerciale && ((LetteraCommerciale)this).PageNumber == 1)) { page.Elements.Add(this.firma); page.Elements.Add(saluti); } //string periodico = UtilityManager.getAppSetting("Periodico"); //** NOTA //FC 26/06/2015 // MOdificato per nuovo template //float xNota = 0; //float yNota = 712;//709 float xNota = 27; float yNota = tp.SignYPosition - 26;// 716; //720 // posiziona la barra sopra alle note float wNota = 150; string testoNota = null; testoNota = "¹Il profilo finanziario ha una validità limitata nel tempo: Fideuram procede infatti ad un aggiornamento periodico (almeno ogni 3 anni) delle informazioni rese dal cliente, fermo restando l’onere di quest’ultimo di comunicare alla Banca qualsiasi variazione intervenuta alle informazioni precedentemente fornite."; //if (testoOggetto.Contains("Private di Sei")) //{ // /**** Fix - ATTENZIONE dalla prossima trimestrale 01/12/2023 la nota va scommentata. Mentre per le lettere và sempre scommentata - 05/10/2023 - Pino ****/ // /**** In concomitanza la nota 2, più giù, deve essere scommentata *****/ // testoNota = "¹Il profilo finanziario ha una validità limitata nel tempo: Fideuram, procede infatti ad un aggiornamento periodico (almeno ogni 3 anni) delle informazioni rese dal cliente, fermo restando l’onere di quest’ultimo di comunicare alla Banca qualsiasi variazione intervenuta alle informazioni precedentemente fornite."; // /*********************************************************************************************************************************************************/ //} //else if (testoOggetto.Contains("Sei")) //{ // testoNota = "¹Il profilo finanziario ha una validità limitata nel tempo: Fideuram comunicare alla Banca qualsiasi variazione intervenuta alle informazioni precedentemente fornite. procede infatti ad un aggiornamento periodico (almeno ogni 3 anni) delle informazioni dal cliente, fermo restando l’onere di quest’ultimo di"; //} /*** Fix per eliminare la nota nella lettera di benvenuto per i report di FD 23/05/2023 - Pino ***/ //if (rete.ToUpper() == "S" || rete.ToUpper() == "F" || rete.ToUpper() == "W") { //testoNota = testoNota.Replace("Fideuram", "Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest"); //3/01/2024 FIX cambio testo nota richiesto da Napolitano testoNota = testoNota.Replace("Fideuram", "Fideuram S.p.A."); //} //else if (rete.ToUpper() == "W") //{ // progetto gladiolo abolite queste replace //testoNota = testoNota.Replace("Fideuram", "IW Private Investments"); //testoNota = testoNota.Replace("Banca", "Società"); } if (idReportDiagnosi != 6) { page.Elements.Add(new ceTe.DynamicPDF.PageElements.Line(xNota, yNota - 12, xNota + wNota, yNota - 12, 0.5F, RgbColor.Black)); page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label( testoNota //"¹Il private banker è un professionista della consulenza finanziaria, previdenziale e assicurativa iscritto all’Albo Unico dei Consulenti Finanziari." //testoNota , xNota , 680 //705 , 480 , 40 , new OpenTypeFont("times.ttf") , 8 )); string text = "²Il Portafoglio Sei è la parte di RFA" + (rete.Equals("W") ? ", commercializzato tramite la rete di private banker IW Private Investments" : "") +" da considerare ai fini della verifica dei requisiti necessari per l’attivazione e il mantenimento del servizio e del calcolo delle relative commissioni periodiche"; page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label( text , xNota , 708 //732 , 480 , 30 , new OpenTypeFont("times.ttf") , 8 )); page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label( //"¹Il private banker è un professionista della consulenza finanziaria, previdenziale e assicurativa iscritto all’Albo Unico dei Consulenti Finanziari." //"²Il private banker è un professionista della consulenza finanziaria, previdenziale e assicurativa iscritto all’Albo Unico dei Consulenti Finanziari."//pkall’albo dei promotori finanziari." "³Il private banker è un professionista della consulenza finanziaria, previdenziale e assicurativa iscritto all’Albo Unico dei Consulenti Finanziari." , xNota , 726 , 480 , 30 , new OpenTypeFont("times.ttf") , 8 )); } /**************************************************************************************************/ //** NOTA path = ConfigurationManager.AppSettings["pathScritturaLettera"]; } public void writePDF() { while (Data == null) { data = lettera.Draw(); //pk Thread.Sleep(50); } //DECOMMENTARE PER EFFETTUARE LE PROVE, SALVA LA LETTERA SUL PERCORSO //SPECIFICATO SU pathScritturaLettera //lettera.Draw(path + nomeLettera + ".pdf"); } protected static Image GetImageByResourceName(string resourceName, int X, int Y, float ratio) { Assembly a = Assembly.GetExecutingAssembly(); try { Stream stream = a.GetManifestResourceStream(resourceName); Image gif = new Image(stream, X, Y, ratio); return gif; } catch { return null; } } protected abstract void settaCampi(); }