2025-04-15 12:10:19 +02:00

248 lines
8.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 PDFGenerator;
using PDFGenerator.BusinessLayer;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.Presentation.Section.Charts;
using PDFGenerator.Presentation.Section;
public class S85 : ISezione
{
string Titolo = " ";
int Resolution = 300;
private bool _IncludiScenarioMedio;
private string _testointroduttivo = "";
public string TestoIntroduttivo
{
get
{
return _testointroduttivo;
}
set
{
_testointroduttivo = value;
}
}
public S85()
{
//
// TODO: Add constructor logic here
//
}
#region ISezione Members
/// <summary>
/// Recupera il massimo valore dell'arraylist
/// </summary>
/// <param name="arrList"></param>
/// <returns></returns>
public static object GetMaxValue(ArrayList arrList)
{
ArrayList sortArrayList = arrList;
sortArrayList.Sort();
sortArrayList.Reverse();
return sortArrayList[0];
}
/// <summary>
/// Recupera il minimo valore dell'arraylist
/// </summary>
/// <param name="arrList"></param>
/// <returns></returns>
public static object GetMinValue(ArrayList arrList)
{
ArrayList sortArrayList = arrList;
sortArrayList.Sort();
return sortArrayList[0];
}
public void writeSezione(DataThread dataThread)
{
DocumentPDF document = dataThread.DocumentPDF;
DataSetS85 set = (DataSetS85)dataThread.Data.DatiSezione;
int ChartHeigth = 200;
//eventuali operazioni sul dataset
//calcola se entra nella pagina altrimenti aggiunge una nuova pagina. In questa sezione il # di righe è fissato
//if (document.checkMargin(ChartHeigth + 50))
// //if (document.checkMargin(ChartHeigth + 100))
// document.addPage();
document.setLastPos((document.getLastPos()*-1)+410);
ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
//page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Possibile evoluzione del rendimento", document.getMargineLeft(), document.getLastPos() - 30, 500, 12, Globals.OpenTypeFontVerdanaB, 12, ceTe.DynamicPDF.CmykColor.Black));
document.setTitolo(Titolo);
document.setHeaderSpace(5);
//document.setChapterHeader(_testointroduttivo);
document.setChapterHeader(_testointroduttivo, 0, 520, 8);
#region Valori Asse Y
//Impostare lasse delle ordinate in funzione del valore massimo e minimo
// rappresentati nel grafico (tra i valori del cono e il valore del rendimento)
DataTable dtDati = new DataTable();
DataTable dtGrafico = new DataTable();
DataTable dtRendimento = new DataTable();
dtGrafico = set.Tables["DatiGrafico"].Copy();
dtRendimento = set.Tables["Rendimento"];
dtGrafico.Merge(dtRendimento, true);
DataView dwValoriY = new DataView(dtGrafico);
dtDati = dwValoriY.ToTable(false, "Ottimistico", "Pessimistico", "Valore");
// in un arraylist che poi andrò ad ordinare per recuperare massimo e minimo inserisco tutti valore delle 3 colonne
// "Ottimistico", "Pessimistico", "Valore"
ArrayList al = new ArrayList();
// MODIFICA TORRESI
/*
foreach (DataRow r in dtDati.Rows)
foreach (DataColumn c in dtDati.Columns)
{
if (r[c].ToString() != string.Empty)
al.Add(Convert.ToDouble(r[c].ToString()));
}
*/
foreach (DataColumn c in dtDati.Columns)
{
foreach (DataRow r in dtDati.Rows)
if ((r[c].ToString() != string.Empty) && (r[c].ToString() != ""))
al.Add(Convert.ToDouble(r[c].ToString()));
}
//FINE MODIFICA TORRESI
#endregion
DatiGrafico dati = new DatiGrafico();
dati.dataTab = set.Tables["DatiGrafico"];
dati.setHeight(ChartHeigth);
dati.setWidth(440);
LineeRendimentoCumulato grafico = new LineeRendimentoCumulato();
grafico.MaximumY = Convert.ToDouble(GetMaxValue(al));
grafico.MinimumY = Convert.ToDouble(GetMinValue(al));
if (set.Tables["Rendimento"].Rows.Count > 0)
{
if (set.Tables["Rendimento"].Rows[0]["Data"] != DBNull.Value)
grafico.DataRendimento = (DateTime)set.Tables["Rendimento"].Rows[0]["Data"];
if (set.Tables["Rendimento"].Rows[0]["Valore"] != DBNull.Value)
grafico.Rendimento = Convert.ToDouble(set.Tables["Rendimento"].Rows[0]["Valore"]);
}
grafico.IncludiScenarioMedio = false;
document.InsertGrafico(grafico.getGrafico(dati), 70, document.getLastPos(), Resolution);
// Disegno il rettangolo grigio( footer del grafico)
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(100, document.getLastPos() - 2 + ChartHeigth, 410, 23, 0, new RgbColor(232, 236, 237)));
FormatNum format = new FormatNum();
DataTable datiAsse = set.Tables["DatiAsse"];
if (datiAsse.Rows.Count > 0)
{
ArrayList labels = format.CreaCustomDataTime(Convert.ToDateTime(datiAsse.Rows[0]["DataInizio"]), Convert.ToInt32(datiAsse.Rows[0]["IntervalloMesi"]));
float startX = getX(Convert.ToInt32(datiAsse.Rows[0]["IntervalloMesi"])) - 15;
float endX = 489; // punto fisso 489.
float intervallo = (endX - startX) / (labels.Count - 1);
int indiceLabel = 0;
foreach (string label in labels)
{
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(labels[indiceLabel].ToString(), startX, document.getLastPos() + ChartHeigth, 420, 10, Globals.OpenTypeFontVerdana, 7, ceTe.DynamicPDF.TextAlign.Left, ceTe.DynamicPDF.CmykColor.Black));
startX += intervallo;
indiceLabel += 1;
}
}
ceTe.DynamicPDF.PageElements.Rectangle rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft() + 95, document.getLastPos() + ChartHeigth + 13, 10, 2, 0, new RgbColor(0, 0, 255));
page.Elements.Add(rect);
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Scenario ottimistico", document.getMargineLeft() + 110, document.getLastPos() + ChartHeigth + 8, 120, 10, Globals.OpenTypeFontVerdana, 9));
rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft() + 225, document.getLastPos() + ChartHeigth + 10, 5, 5, 0, new RgbColor(0, 0, 0));
rect.CornerRadius = 2.5F;
page.Elements.Add(rect);
//to tutaj
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Rendimento cumulato", document.getMargineLeft() + 235, document.getLastPos() + ChartHeigth + 8, 120, 10, Globals.OpenTypeFontVerdana, 9));
rect = new ceTe.DynamicPDF.PageElements.Rectangle(document.getMargineLeft() + 345, document.getLastPos() + ChartHeigth + 13, 10, 2, 0, new RgbColor(239, 65, 53));
page.Elements.Add(rect);
page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Scenario pessimistico", document.getMargineLeft() + 360, document.getLastPos() + ChartHeigth + 8, 120, 10, Globals.OpenTypeFontVerdana, 9));
document.setLastPos(ChartHeigth + 40);
dataThread.UltimaSezioneStampata = "S85";
}
/// <summary>
/// Ritorna la x su cui scrivere la prima etichetta dell'asse x. ///
/// </summary>
/// <param name="intervallomesi"></param>
/// <returns></returns>
private float getX(int intervallomesi)
{
decimal massimo = 360;
decimal xPartenza = 133;
decimal xFine = xPartenza + 23;
decimal intervallo = xFine - xPartenza;
decimal rapporto = intervallo / massimo;
return Convert.ToSingle(xFine - (rapporto * intervallomesi));
}
public void setTitolo(string label)
{
Titolo = label;
}
public bool IncludiScenarioMedio
{
get
{
return _IncludiScenarioMedio;
}
set
{
_IncludiScenarioMedio = value;
}
}
#endregion
}