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();
}