2025-06-03 15:11:16 +02:00

869 lines
43 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Text;
using Dundas.Charting.WebControl;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.Presentation.Section.Charts;
using PDFGenerator.BusinessLayer;
using ceTe.DynamicPDF.PageElements;
using PDFGenerator.BusinessLayer.Utils;
using System.Linq;
using NLog;
namespace PDFGenerator.Presentation.Section
{
public class S170 : ISezione
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
string Titolo = string.Empty;
private string _testointroduttivo;
private string _testotitolo;
/// <summary>
/// Testo del titolo della sezione.
/// </summary>
public string TestoTitolo
{
get
{
return _testotitolo;
}
set
{
_testotitolo = value;
}
}
/// <summary>
/// Testo introduttivo della sezione
/// </summary>
public string TestoIntroduttivo
{
get
{
return _testointroduttivo;
}
set
{
_testointroduttivo = value;
}
}
public S170()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Stampa la sezione S170
/// </summary>
/// <param name="paramSez"></param>
public void writeSezione(DataThread dataThread)
{
dataThread.SETDATA();
DocumentPDF document = dataThread.DocumentPDF;
string nomeRete = dataThread.NomeRete;
float xLine = 50;
float widthLine = 320;
float widthRectangleTable = widthLine - xLine + 3;
float fontSize = 5;
int altezzaGrafico = 165;
float altezzaGraficoMenoEtichette = altezzaGrafico - 40;
//int marginTopTabella = 0;
bool eliminatoPaginaBianca = true;
string ultimaSezione = "";
DatiTabella datitab = new DatiTabella();
DataSetS170 set = (DataSetS170)dataThread.Data.DatiSezione;
ultimaSezione = document.LastSectionCheckIn;
//if (document.LastSectionCheckIn.Equals("S178") || document.LastSectionCheckIn.Equals("S184")) // Se non si è passati per la S180
//{
// if (dataThread.TipoReport.ToUpper().Equals("DIAGNOSI"))
// {
// if ((document.CurrentPage - document.NumLastPage) > 1)
// {
// document.RemoveLastPage(document.NumLastPage);
// //eliminatoPaginaBianca = true;
// }
// //else
// // eliminatoPaginaBianca = true;
// }
// document.LastSectionCheckIn = "S170";
//}
if (dataThread.TipoReport.ToUpper().Equals("MONITORAGGIO"))
{
if (dataThread.TipoContratto == TipoContratto.Private)
document.setSezTitoloDiagnosi(_testotitolo);
}
//20180926 AC La nota sull'eccessiva adeguatezza è richiesta solo in Monitoraggio
string notaEccessivaAdeguatezza = string.Empty;
if (dataThread.TipoReport.ToUpper().Equals("MONITORAGGIO"))
notaEccessivaAdeguatezza = SimpleTextGenerator.ProduceText(this, "S128BottomLabel", dataThread, null);
//20180917 AC
/**** Fix in relazione alla modifica fatta in seguito per la scrittura della nota che diventa con (***) 30/10/2023 - Pino ****/
//notaEccessivaAdeguatezza = notaEccessivaAdeguatezza.Replace("*", "(*)");
notaEccessivaAdeguatezza = notaEccessivaAdeguatezza.Replace("*", "(***)");
//--20180917
if (dataThread.TipoReport.ToUpper().Equals("DIAGNOSI"))
datitab.table = set.Tables["RischioDiversificazione"];
else
//Prendo la prima riga e l'ultima, che contiene il Limite Massimo
datitab.table = set.Tables["RischioDiversificazione"].AsEnumerable().Where(d => d.Field<Int32>("ordine") == 1).CopyToDataTable();
//--MIFID2
//MIFID2 20180524
float liftDown = 0;
if (datitab.table.Rows.Count > 2)
{
liftDown = -40; //30;
document.setLastPos(liftDown);
}
//--MIFID2
//bool _mostracolonnacopertura = Convert.ToBoolean(set.ResultSet[0]["MostraColonnaCopertura"]);
ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
#region Titolo e testo introduttivo
//document.setTitolo(_testotitolo);
//.setSezTitoloDiagnosi(_testotitolo);
if (eliminatoPaginaBianca)
document.setChapterHeader(_testointroduttivo, 0, 520, 8,"S170",dataThread.TipoReport,"S", ultimaSezione);
else
document.setChapterHeader(_testointroduttivo, 0, 520, 8, "S170", dataThread.TipoReport);
//document.setLastPos(-50);
//document.setLastPos(liftDown - 50);
#endregion
double var1 = 0;
if (set.RischioPatrimonioFinanziario.Rows.Count != 0)
var1 = Convert.ToDouble((decimal)set.RischioPatrimonioFinanziario.Rows[0]["Var"]);
if (dataThread.IsProfessionalClient && dataThread.RiskArea == 5) var1 = 50;
//MIFID2 20180524 per cambio pagina
//document.InsertTable(tab.getTabella(datitab));
//MIFID2 20180521
//datitab.table = set.Tables["RischioDiversificazione"];
float dim = datitab.GetRowDim() * datitab.getNumRow();
#region Grafico
DatiGrafico dati = new DatiGrafico();
dati.dataTab = datitab.table;
//MIFID2 20180521 commentata
//dati.dataTab.Columns.Remove(dati.dataTab.Columns["Copertura"]);
//--MIFID2
dati.setHeight(altezzaGrafico);
dati.setWidth(295);//T-1466629-Y0Y5
//MIFID2: 20180404 Richiama un nuovo grafico GraficoS170
//GraficoS132BIS pall = new GraficoS132BIS();
//Chart grafico = pall.getGrafico(dati, dataThread);
GraficoS170 pall = new GraficoS170();
Chart grafico = pall.getGrafico(dati, dataThread);
//--MIFID2: 20180404
double vaRMassimo = pall.AxisY_Maximum;
/*** Fix ***/
float LastPosY = 0.0F;
if (dataThread.TipoReport == "DIAGNOSI")
{
if (!eliminatoPaginaBianca)
LastPosY = document.getLastPos() - 50;
else
LastPosY = document.getLastPos() - 10;
}
else
LastPosY = document.getLastPos();
document.InsertGrafico(grafico, document.getMargineLeft() + 75, LastPosY);
#endregion
dim += (altezzaGrafico + 40);
#region Marcatore alla sinistra del grafico
/*** Fix - Controllo (inserimento if) sul campo scaduto per Rafforzamento alla clientela 20/11/2023 - Pino ***/
ceTe.DynamicPDF.PageElements.Rectangle rect;
FormatNum conv = new FormatNum();
float yImg = document.getLastPos() - 5;
float yLabelY = document.getLastPos();
if (dataThread.Scaduto != 2)
{
if (set.RischioPatrimonioFinanziario.Rows.Count != 0)
{
float xFreccia = document.getMargineLeft();
float yFreccia = LastPosY; //document.getLastPos();
float wFreccia = 50;
float hFreccia = 20;
string profilo = " ";
switch (MarkPosition((float)var1))
{
//case 0:
// profilo = "Conservativo";
// yFreccia += 100;
// break;
//case 1:
// profilo = "Moderato";
// yFreccia += 94;
// break;
//case 2:
// profilo = "Dinamico";
// yFreccia += 74;
// break;
//case 3:
// profilo = "Attivo";
// yFreccia += 50;
// break;
////case 4:
//// profilo = "Aggressivo";
//// yFreccia += -4;
//// break;
//default:
// break;
case 1:
profilo = "Conservativo";
yFreccia += 120; //100;
break;
case 2:
profilo = "Moderato";
yFreccia += 93; //95; //94;
break;
case 3:
profilo = "Dinamico";
yFreccia += 50; //74;
break;
case 4:
profilo = "Attivo";
yFreccia += -10; //50;
break;
//case 4:
// profilo = "Aggressivo";
// yFreccia += -4;
// break;
default:
break;
}
page.Elements.Add(
new ceTe.DynamicPDF.PageElements.Rectangle(
xFreccia,
yFreccia,
wFreccia,
hFreccia,
0,
new RgbColor(232, 236, 237)));
rect = new ceTe.DynamicPDF.PageElements.Rectangle(
xFreccia + wFreccia,
yFreccia,
hFreccia / 1.414F,
hFreccia / 1.414F,
0,
new RgbColor(232, 236, 237));
rect.Angle = 45;
page.Elements.Add(rect);
xFreccia += 1;
hFreccia = fontSize + 1;
float interline = hFreccia + 1;
page.Elements.Add(
new ceTe.DynamicPDF.PageElements.Label("Profilo finanziario:"
, xFreccia
, yFreccia
, wFreccia
, hFreccia
, Globals.OpenTypeFontVerdana
, fontSize));
page.Elements.Add(
new ceTe.DynamicPDF.PageElements.Label(profilo + " (" + (MarkPosition((float)var1)).ToString() + ")"
, xFreccia
, yFreccia + interline
, wFreccia
, hFreccia
, Globals.OpenTypeFontVerdana
, fontSize));
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("(VaR " + conv.ConvertNum(var1) + "%)"
, xFreccia
, yFreccia + (interline * 2)
, wFreccia
, hFreccia
, Globals.OpenTypeFontVerdana
, fontSize));
if (profilo == "Aggressivo")
yLabelY += rect.Height + 10;
else
yLabelY -= rect.Height - 10;
}
}
/*************************************************************************************************************/
#endregion
#region titoli
/***** Fix - riformattazione della pagina 13092023 - Pino ******/
int deltaY = 0;
if ((var1 >= 30.0) && (var1 <= 35.5))
deltaY = 22;
else
deltaY = 10; //50;
if (dataThread.TipoReport == "DIAGNOSI")
{
if (!eliminatoPaginaBianca)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Rischio (VaR%)", document.getMargineLeft(), yLabelY - deltaY, 120, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
else
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Rischio (VaR%)", document.getMargineLeft(), yLabelY + deltaY, 120, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
}
else
{
if (MarkPosition((float)var1) == 3)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Rischio (VaR%)", document.getMargineLeft(), yLabelY + deltaY - 10, 120, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
else
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Rischio (VaR%)", document.getMargineLeft(), yLabelY + deltaY, 120, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
}
/***************************************************************/
#endregion
#region Legenda alla destra del Grafico
//string relativePath = UtilityManager.getAppSetting("LegendaDiversificazioneLarge");
//System.Reflection.Assembly thisExe;
//thisExe = System.Reflection.Assembly.GetExecutingAssembly();
//System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath);
System.IO.Stream file = CACHE.IMAGES.Get("legendadiversificazione");
/***** Fix - riformattazione della pagina 13092023 - Pino ******/
if (dataThread.TipoReport == "DIAGNOSI")
{
if (!eliminatoPaginaBianca)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 400, document.getLastPos() + 70, 0.40F)); // T-1466629-Y0Y5 +80
else
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 400, document.getLastPos() + 100, 0.40F)); // T-1466629-Y0Y5 +80
}
else
{
try
{
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 400, document.getLastPos() + 103, 0.40F)); // T-1466629-Y0Y5 +80
}
catch
{
}
}
#endregion
#region Titolo asse X
/***** Fix - riformattazione della pagina 13092023 - Pino ******/
if (dataThread.TipoReport == "DIAGNOSI")
{
if (!eliminatoPaginaBianca)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Diversificazione di portafoglio", document.getMargineLeft() + 180, yLabelY + 115, 200, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
else
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Diversificazione di portafoglio", document.getMargineLeft() + 180, yLabelY + 155, 200, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
}
else
{
try
{
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Diversificazione di portafoglio", document.getMargineLeft() + 180, yLabelY + 160, 200, 12, Globals.OpenTypeFontVerdana, fontSize, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
}
catch
{
}
}
/***************************************************************/
#endregion
#region Tabella sotto al grafico
//MIFID2 20180518 per diagnosi si prendono tutte le righe possibili (Patrimonio Banca, Patrimonio Terzi, Patrimonio Complessivo. In monitoraggio, solo il primo)
//datitab.table = set.Tables["RischioDiversificazioneTable"];
if (dataThread.TipoReport.ToUpper().Equals("DIAGNOSI"))
{
datitab.table = set.Tables["RischioDiversificazioneTable"];
//Qui bisogna riprendere le Caption dal DataTable originale, la query precedente fa perdere le caption.
foreach (DataColumn col in datitab.table.Columns)
{
col.Caption = set.Tables["RischioDiversificazioneTable"].Columns[col.ColumnName].Caption;
//Rinomino il campo da Rischio Mercato<BR>(VaR %) a Rischio Var
if (col.Caption.Contains("Rischio Mercato<BR>(VaR %)")) col.Caption = col.Caption.Replace("Mercato<BR>", "");
}
}
else
{
//Prendo la prima riga e l'ultima, che contiene il Limite Massimo
datitab.table = set.Tables["RischioDiversificazioneTable"].AsEnumerable().Where(d => d.Field<Int32>("ordine") == 1 || d.Field<Int32>("ordine") == 4).CopyToDataTable();
//Qui bisogna riprendere le Caption dal DataTable originale, la query precedente fa perdere le caption.
foreach (DataColumn col in datitab.table.Columns)
{
col.Caption = set.Tables["RischioDiversificazioneTable"].Columns[col.ColumnName].Caption;
//Rinomino il campo da Rischio Mercato<BR>(VaR %) a Rischio Var
if (col.Caption.Contains("Rischio Mercato<BR>(VaR %)")) col.Caption = col.Caption.Replace("Mercato<BR>", "");
}
}
//20180917 AC gestione nota e asterisco eccessiva adeguatezza
if (dataThread.TipoReport.ToUpper().Equals("MONITORAGGIO"))
{
if (datitab.table.Rows[0]["complessita"].ToString().Contains("*"))
datitab.table.Rows[0]["complessita"] += "*";
if (!string.IsNullOrEmpty(notaEccessivaAdeguatezza))
{
/*** Fix - fix Trimestrale 04/10/2023 - Pino *****/
//datitab.table.Rows[0]["varstring"] += "*";
// Fix - Reinserita la chiamata alla nota che diventa *** 30/10/2023 - Pino ***//
datitab.table.Rows[0]["varstring"] += "***";
/*************************************************/
//if (datitab.table.Rows[0]["complessita"].ToString().Contains("*"))
// datitab.table.Rows[0]["complessita"] += "*";
//// 20181011 AC in caso di nota Eccessiva Adeguatezza va aggiunto l'asterisco sulla voce varstring e poi incrementati quelli già presenti nelle voci di complessità (prima riga e seconda riga)
////--20181011 AC
//// 20181011 AC non c'è bisogno di incrementare gli asterischi, perché già sono presenti e sono stati incrementati nelle istruzioni precedenti
////20180925 AC: per le persone giuridiche con delegati profilati bisogna prevedere che, in corrispondenza della Complessità limite profilo, ci sia il rimando alla relativa nota. Imposto un numero di asterischi in base a quanti ne ha la voce precedente
//if (!dataThread.IsProffesionalClient && dataThread.Flagpg.Equals(1) && dataThread.Flagnqp.Equals("S") && dataThread.Flagprlrde.Equals("S"))
//{
// //datitab.table.Rows[1]["complessita"] += new string('*', datitab.table.Rows[0]["complessita"].ToString().Count(x => x == '*') + 1);
// datitab.table.Rows[1]["complessita"] += "*";
//}
//20180925
//--20181011 AC
}
}
//--20180917
//MIFID2 20180524 cambia pagina se la tabella ha più della riga Patrimonio Banca (MODIFICARE con > 2)
//if (datitab.table.Rows.Count > 2)
//{
// //document.setLastPos(822);
// altezzaGrafico = 0;
// document.changePage();
// document.nextPage(document.getMargineLeft());
// page = document.getCurrentPage();
//}
//Rimozione colonna rischio credito
datitab.table.Columns.Remove(datitab.table.Columns["rischioCredito"]);
//--MIFID2
// if (!_mostracolonnacopertura)
datitab.table.Columns.Remove(datitab.table.Columns["copertura"]);
//MIFID2 20180521
datitab.table.Columns.Remove(datitab.table.Columns["ordine"]);
//--MIFID2
datitab.setIsLinee(1);
datitab.setHeader();
datitab.setHeaderDim(30);
//MIFID2: 20180404 E' richiesta anche la colonna sulla complessità
//MIFID2 20180626 Allineamento al centro
datitab.setCell(110, ceTe.DynamicPDF.TextAlign.Left, Globals.OpenTypeFontVerdana, false);
datitab.setCell(100, ceTe.DynamicPDF.TextAlign.Center, Globals.OpenTypeFontVerdana, false);
datitab.setCell(140, ceTe.DynamicPDF.TextAlign.Center, Globals.OpenTypeFontVerdana, false);
//datitab.setCell(100, ceTe.DynamicPDF.TextAlign.Center, Globals.OpenTypeFontVerdana, false);
datitab.setCell(95, ceTe.DynamicPDF.TextAlign.Center, Globals.OpenTypeFontVerdana, false);
datitab.setCell(75, ceTe.DynamicPDF.TextAlign.Center, Globals.OpenTypeFontVerdana, false);
//--MIFID2
//--MIFID2
datitab.setY(document.getLastPos() + altezzaGrafico + 20);
//datitab.setY(marginTopTabella + document.getLastPos() + 20);
//datitab.setY(marginTopTabella + document.getLastPos());
datitab.setX(document.getMargineLeft());
datitab.setIsRet();
datitab.setCellSpace(0);
Tabella tab = new Tabella();
tab.LineaFineTabella = true;
#endregion
document.InsertTable(tab.getTabella(datitab));
/**** Disegna il marcatore (rombo, quadrato...) nella riga della tabella sotto al grafico ***/
this.writeMarker(document, datitab);
// document.setLastPos(-document.getLastPos()+695); T-1466629-Y0Y5
//MIFID2 20180524 La tabella avrà 2 righe (Patrimonio Banca + Riga Limite Massimo) oppure 4 righe (Patrimonio Banca + Terzi + Complessivo + Riga Limite Massimo)
//if (datitab.table.Rows.Count > 1) //
//if (datitab.table.Rows.Count > 2) //
// document.setLastPos(datitab.getNumRow() * datitab.GetRowDim());
//else
// document.setLastPos(tab.AltezzaTabella);
document.setLastPos(altezzaGrafico + datitab.getNumRow() * datitab.GetRowDim() + 10);
//document.setLastPos(marginTopTabella + datitab.getNumRow() * datitab.GetRowDim() + 10);
bool notaComplessita = false;
// MIOFOGLIO 20181130
float overSpace = 0;
//--MIOFOGLIO 20181130
if ((dataThread.TipoReport.ToUpper().Equals("DIAGNOSI")) || (dataThread.TipoReport.ToUpper().Equals("MONITORAGGIO")))
{
string nota = "";
// MIOFOGLIO 20181130
nota += "(*) In tabella non vengono considerati eventuali saldi negativi di conto corrente ed investimenti in corso";
if (dataThread.TotalSelfNegCurrentAccountValue != 0)
{
if (dataThread.GetSelfNegativeValue("FO") != 0)
nota += ", né il saldo negativo della liquidità sottostante le linee “Il MF - Liquidità”";
if (dataThread.GetSelfNegativeValue("XY") != 0)
nota += ", né il saldo negativo della liquidità sottostante le linee “GP Eligo”";
overSpace = 6;
}
nota += ".";
// commentato:
//if (dataThread.TotalSelfNegCurrentAccountValue != 0)
//{
// nota = "(*) In tabella non vengono considerati eventuali saldi negativi di conto corrente ed investimenti in corso, né il saldo negativo della liquidità sottostante le linee “GP Eligo”.";
//}
//else
//{
// nota = "(*) In tabella non vengono considerati eventuali saldi negativi di conto corrente ed investimenti in corso.";
//}
//--MIOFOGLIO 20181130
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota, datitab.getX(), document.getLastPos(), 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
//20180914 su richiesta Napolitano, la complessità relativa al Patrimonio va mostrata (non va mostrata quella della riga del Limite massimo profilo
//quindi commento il blocco if seguente:
//if (!dataThread.IsProffesionalClient)
//{
string nota2 = "(**) Complessità massima dei prodotti in portafoglio";
//se almeno una delle righe presenta complessità valorizzata, nel qual caso va aggiunta la nota
//if (datitab.table.AsEnumerable().Where(x => !x.Field<string>("Complessita").Equals("-")).AsDataView().Count > 0)
if (datitab.table.AsEnumerable().Where(x => !x.Field<string>("patrimonio").Contains("Limite massimo profilo") && !x.Field<string>("Complessita").Equals("-")).AsDataView().Count > 0)
{
// MIOFOGLIO 20181130 (aggiunto spazio aggiuntivo in caso di presenza GP e/o MioFoglio negativo)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2, datitab.getX(), document.getLastPos() + 8F + overSpace, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2, datitab.getX(), document.getLastPos() + 8F, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
//--MIOFOGLIO 20181130
//MIFID2 CR Napolitano: aggiunto flag per gestire il numero di asterischi sulla nuova nota richiesta.
notaComplessita = true;
}
/**** Fix - SEI inserimento terza nota 30/10/2023 - Pino ***/
float spazioNota = 0;
if (!string.IsNullOrEmpty(notaEccessivaAdeguatezza))
{
float posY = document.getLastPos() + 17F + (2 * overSpace);
FormattedTextArea t = new FormattedTextArea(notaEccessivaAdeguatezza, document.getMargineLeft(), posY, 510F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), 6, false);
t.Height = t.GetRequiredHeight();
t.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
page.Elements.Add(t);
spazioNota = 24;
}
/***********************************************************/
#region OBSOLETO - sostituito con il codice precedente
////MIFID2 CR Napolitano: inserita nuova nota relativa al Limite Massimo Complessità per le persone giuridiche con delegati profilati
//if (!dataThread.IsProffesionalClient && dataThread.Flagpg.Equals(1) && dataThread.Flagnqp.Equals("S") && dataThread.Flagprlrde.Equals("S"))
//{
// //string nota2b = "Livello di Esperienza e Conoscenza più alto tra quelli associati ai singoli Legali Rappresentanti/Delegati profilati";
// string nota2b = "La informiamo che, al momento, il suo portafoglio finanziario risulta adeguato rispetto al suo profilo finanziario. Le segnaliamo, tuttavia, che per quanto riguarda il rischio(VaR), il livello di VaR del suo portafoglio presenta dei margini, rispetto alla soglia minima del suo profilo finanziario.Il suo private banker è a disposizione per ogni eventuale esigenza.";
// if (notaComplessita)
// nota2b = string.Concat("(***) ", nota2b);
// else
// nota2b = string.Concat("(**) ", nota2b);
// // MIOFOGLIO 20181130 (aggiunto spazio aggiuntivo in caso di presenza GP e/o MioFoglio negativo)
// page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2b, datitab.getX(), notaComplessita ? document.getLastPos() + 16F + overSpace : document.getLastPos() + 8F + overSpace, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
// //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2b, datitab.getX(), notaComplessita ? document.getLastPos() + 16F : document.getLastPos() + 8F, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
// //--MIOFOGLIO 20181130
//}
////--MIFID2
#endregion
if (dataThread.ProfiloIsAct == false)
// MIOFOGLIO 20181130 (aggiunto spazio aggiuntivo in caso di presenza GP e/o MioFoglio negativo)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Resource.Nota_S96_Scaduto, datitab.getX(), notaComplessita ? document.getLastPos() + 24 + overSpace : document.getLastPos() + 10 + overSpace, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f, ceTe.DynamicPDF.CmykColor.Red));
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(Resource.Nota_S96_Scaduto, datitab.getX(), notaComplessita ? document.getLastPos() + 24 : document.getLastPos() + 10, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f, ceTe.DynamicPDF.CmykColor.Red));
//--MIOFOGLIO 20181130
//}
//--20180914 Blocco controllo su professionale commentato
string nota3;
if (set.Tables["RischioDiversificazione"].Rows.Count == 3) //Contiene Patrimonio Banca + Terzi + Complessivo
{
var cop1 = set.Tables["RischioDiversificazione"].Rows[0].Field<string>("copertura").ToString();
var cop2 = set.Tables["RischioDiversificazione"].Rows[1].Field<string>("copertura").ToString();
var cop3 = set.Tables["RischioDiversificazione"].Rows[2].Field<string>("copertura").ToString();
nota3 = string.Format("La copertura del patrimonio per il calcolo degli indicatori di rischio è pari al <b>{0}%</b> per il <b>patrimonio $/Banca/$</b>, del <b>{1}%</b> per il <b>patrimonio altri Istituti</b> e del <b>{2}%</b> per il <b>patrimonio complessivo</b>.", cop1, cop2, cop3).Replace("$/Banca/$", nomeRete);
}
else
{
var cop1 = set.Tables["RischioDiversificazione"].Rows[0].Field<string>("copertura").ToString();
//var cop3 = set.Tables["RischioDiversificazione"].Rows[1].Field<string>("copertura").ToString();
nota3 = string.Format("La copertura del patrimonio per il calcolo degli indicatori di rischio è pari al <b>{0}%</b> per il <b>patrimonio $/Banca/$</b>.", cop1).Replace("$/Banca/$", nomeRete);
}
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.TextArea(nota3, datitab.getX(), document.getLastPos() + 20F, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize+2f));
//FormattedTextArea textNota = new FormattedTextArea(nota3, document.getMargineLeft(), notaComplessita ? document.getLastPos() + 30F : document.getLastPos() + 16F, 500F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), fontSize + 1f, false);
FormattedTextArea textNota = new FormattedTextArea(nota3, document.getMargineLeft(), document.getLastPos() + 50F, 500F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), fontSize + 1f, false);
textNota.Height = textNota.GetRequiredHeight();
textNota.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
page.Elements.Add(textNota);
}
else
{
//20180914 su richiesta Napolitano, la complessità relativa al Patrimonio va mostrata (non va mostrata quella della riga del Limite massimo profilo
//quindi commento il blocco if seguente:
//if (!dataThread.IsProffesionalClient)
//{
//20180917 AC gestione nota eccessiva adeguatezza
//string nota2 = "(*) Complessità massima dei prodotti in portafoglio";
float spazioNota = 0;
if (!string.IsNullOrEmpty(notaEccessivaAdeguatezza))
{
FormattedTextArea t = new FormattedTextArea(notaEccessivaAdeguatezza, document.getMargineLeft(), document.getLastPos(), 510F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), 6, false);
t.Height = t.GetRequiredHeight();
t.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
page.Elements.Add(t);
spazioNota = 24;
}
string nota2 = "";
if (!string.IsNullOrEmpty(notaEccessivaAdeguatezza))
nota2 = "(**) Complessità massima dei prodotti in portafoglio";
else
nota2 = "(*) Complessità massima dei prodotti in portafoglio";
//--2018917
//se almeno una delle righe presenta complessità valorizzata, nel qual caso va aggiunta la nota
//if (datitab.table.AsEnumerable().Where(x => !x.Field<string>("Complessita").Equals("-")).AsDataView().Count > 0)
if (datitab.table.AsEnumerable().Where(x => !x.Field<string>("patrimonio").Contains("Limite massimo profilo") && !x.Field<string>("Complessita").Equals("-")).AsDataView().Count > 0)
{
//20180917 AC aggiunto spazio per la nota precedente
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2, datitab.getX(), document.getLastPos(), 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1));
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2, datitab.getX(), document.getLastPos() + spazioNota, 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1));
//--20180917
//MIFID2 CR Napolitano: aggiunto flag per gestire il numero di asterischi sulla nuova nota richiesta.
notaComplessita = true;
}
//MIFID2 CR Napolitano: inserita nuova nota relativa al Limite Massimo Complessità per le persone giuridiche con delegati profilati
if (!dataThread.IsProfessionalClient && dataThread.Flagpg.Equals(1) && dataThread.Flagnqp.Equals("S") && dataThread.Flagprlrde.Equals("S"))
{
string nota2b = "Livello di Esperienza e Conoscenza più alto tra quelli associati ai singoli Legali Rappresentanti/Delegati profilati";
if (notaComplessita)
//20180917 AC gestione nota eccessiva adeguatezza
//nota2b = string.Concat("(**) ", nota2b);
nota2b = !string.IsNullOrEmpty(notaEccessivaAdeguatezza) ? string.Concat("(***) ", nota2b) : string.Concat("(**) ", nota2b);
else
//20180917 AC gestione nota eccessiva adeguatezza
//nota2b = string.Concat("(*) ", nota2b);
nota2b = !string.IsNullOrEmpty(notaEccessivaAdeguatezza) ? string.Concat("(**) ", nota2b) : string.Concat("(*) ", nota2b);
//20180917 AC aggiunto spazio nota precedente
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2b, datitab.getX(), notaComplessita ? document.getLastPos() + 8F : document.getLastPos(), 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(nota2b, datitab.getX(), notaComplessita ? document.getLastPos() + 8F + spazioNota : document.getLastPos(), 500F, 20F, Globals.OpenTypeFontVerdana, fontSize + 1f));
//--20180917
}
//--MIFID2
//}
//--20180914 blocco controllo professionale commentato
var cop = set.Tables["RischioDiversificazione"].Rows[0].Field<string>("copertura").ToString();
string nota3 = String.Format("La copertura del suo portafoglio per il calcolo degli indicatori di rischio risulta essere del <b>{0}%</b>", cop);
//20180917 AC aggiunto spazio nota precedente
//FormattedTextArea textNota = new FormattedTextArea(nota3, document.getMargineLeft(), document.getLastPos() + 20f, 500F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), fontSize + 2f, false);
FormattedTextArea textNota = new FormattedTextArea(nota3, document.getMargineLeft(), document.getLastPos() + 20f + spazioNota, 500F, 20F, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), fontSize + 2f, false);
//--20180917
textNota.Height = textNota.GetRequiredHeight();
textNota.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
page.Elements.Add(textNota);
}
//document.setLastPos(800); T-1466629-Y0Y5
if (datitab.table.Rows.Count > 1)
document.setLastPos(-document.getLastPos() + 822);
else
document.setLastPos(-document.getLastPos() + 800);
}
public void setTitolo(string label)
{
Titolo = label;
}
private int MarkPosition(float var)
{
int index = 0;
/*** Fix Soglie Var 22/07/2023 - Pino ***/
//if (var < Convert.ToDouble(BusinessLayer.SoglieVar.sVar1))
// index = 0;
//if ((Convert.ToDouble(BusinessLayer.SoglieVar.sVar1) < var) && (var <= Convert.ToDouble(BusinessLayer.SoglieVar.sVar2)))
// index = 1;
//if ((Convert.ToDouble(BusinessLayer.SoglieVar.sVar2) < var) && (var <= Convert.ToDouble(BusinessLayer.SoglieVar.sVar3)))
// index = 2;
//if ((Convert.ToDouble(BusinessLayer.SoglieVar.sVar3) < var) && (var <= Convert.ToDouble(BusinessLayer.SoglieVar.sVar4)))
// index = 3;
//if ((Convert.ToDouble(BusinessLayer.SoglieVar.sVar4) < var))
// index = 4;
var varDec = Convert.ToDecimal(var);
if (varDec <= Convert.ToDecimal(BusinessLayer.SoglieVar.sVar1))
index = 1;
if ((Convert.ToDecimal(BusinessLayer.SoglieVar.sVar1) < varDec) && (varDec <= Convert.ToDecimal(BusinessLayer.SoglieVar.sVar2)))
index = 2;
if ((Convert.ToDecimal(BusinessLayer.SoglieVar.sVar2) < varDec) && (varDec <= Convert.ToDecimal(BusinessLayer.SoglieVar.sVar3)))
index = 3;
if ((Convert.ToDecimal(BusinessLayer.SoglieVar.sVar3) < varDec) && (varDec <= Convert.ToDecimal(BusinessLayer.SoglieVar.sVar4)))
index = 4;
//if ((Convert.ToDouble(BusinessLayer.SoglieVar.sVar4) < var))
// index = 4;
/*****************************************/
return index;
}
/// <summary>
/// Disegna il simbolo accanto alla descrizione del patrimonio nella colonna Patrimonio.
/// </summary>
/// <param name="document"></param>
/// <param name="datasource"></param>
private void writeMarker(DocumentPDF document, DatiTabella datasource)
{
ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
float y = datasource.GetRowDim();
float yTabella = datasource.getY();
ceTe.DynamicPDF.PageElements.Rectangle rect;
foreach (DataRow myRow in datasource.table.Rows)
{
switch (myRow["Patrimonio"].ToString().Trim().ToLower())
{
//FC 26062015 Aggionamento nuova Ragione Sociale
//FC 25012016 case "patrimonio banca fideuram":
case "patrimonio fideuram":
case "patrimonio sanpaolo invest":
case "patrimonio san paolo invest":
case "patrimonio iw private investments":
//case "Patrimonio IW Private Investments":
case "patrimonio iw private inv.":
case "patrimonio attuale":
//Marker 1
rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft(), yTabella - 5 + y, 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(0, 0, 0));
rect.Angle = 45;
page.Elements.Add(rect);
y += datasource.GetRowDim();
break;
case "patrimonio complessivo":
//Marker 2
rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft() - 4, yTabella - 4 + y, 8, 8, 0, new RgbColor(0, 0, 0));
//rect.CornerRadius = 5;
page.Elements.Add(rect);
y += datasource.GetRowDim();
break;
case "patrimonio altri istituti":
case "patrimonio prospettico":
//Marker 3
rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft() - 5, yTabella - 5 + y, 10, 10, 0, new RgbColor(0, 0, 0));
rect.CornerRadius = 5;
page.Elements.Add(rect);
y += datasource.GetRowDim();
break;
default:
break;
}
}
}
}
}