using System;
using System.Collections.Generic;
using System.Data;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using Consulenza.ReportCommon;
using Consulenza.ReportWriter.Business;


namespace Consulenza.ReportWriter.Manager.Section.Base.Proposta
{
    public class P13_A : Entity.Section
    {
        /// <summary>
        /// Implementazione dell'oggetto P13_A. Questo oggetto è verrà stampato per il TipoOperazione = NS (Nuova Sottoscrizione).
        /// </summary>
        /// <param name="environmentFacade"></param>
        /// <param name="idSection"></param>
        public P13_A(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("P13_A", ex.Message, SectionLoggerMessageLevel.E, base.EnvironmentFacade.ReportEnvironment);
            }
        }

        /// <summary>
        /// Disegna l'oggetto P13_A
        /// </summary>
        protected override sealed void Draw()
        {
            var dsP13 = GetDataSet();

            #region P13 per prodotti KE

            DataTable dtTabellaRiepilogo_KE = dsP13.Tables[0];
            DataRow[] rowsTabellaRiepilogo_KE = dtTabellaRiepilogo_KE.Select("TipoOperazione='NS' and CodInterno='KE'");

            DataView viewTabellaDati_KE = dsP13.Tables[1].DefaultView;
            viewTabellaDati_KE.RowFilter = "codTipoOperazione='NS' and CodInterno='KE'";
            DataTable dtTabellaDati_KE = viewTabellaDati_KE.ToTable();

            if (rowsTabellaRiepilogo_KE.Length > 0)
            {
                if (dtTabellaDati_KE.Rows.Count > 0)
                {
                    #region Tabella Riepilogo KE

                    TablePDF tabellaSubtitle_KE = new TablePDF(base.EnvironmentFacade.RendererFacade.XLeftLimit, 3, 2);
                    tabellaSubtitle_KE.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KE.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KE.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KE.Header = false;
                    tabellaSubtitle_KE.Footer = false;
                    tabellaSubtitle_KE.AlternateRow = false;
                    tabellaSubtitle_KE.ID = "tabellaSubtitle_P13_A_KE";

                    tabellaSubtitle_KE.Cells[0, 0].Value = "Frequenza switch: " + rowsTabellaRiepilogo_KE[0]["FrequenzaSwitch"].ToString();
                    tabellaSubtitle_KE.Cells[1, 0].Value = "Durata programma: " + rowsTabellaRiepilogo_KE[0]["DurataProgramma"].ToString();
                    tabellaSubtitle_KE.Cells[2, 0].Value = "Importo programma: " + Helper.FormatCurrency(rowsTabellaRiepilogo_KE[0]["ImportoProgramma"].ToString());

                    tabellaSubtitle_KE.Cells[0, 1].Value = "Investimento iniziale: " + rowsTabellaRiepilogo_KE[0]["InvestimentoIniziale"].ToString();
                    tabellaSubtitle_KE.Cells[0, 1].ColSpan = 3;

                    #endregion

                    #region Tabella Dati KE

                    decimal totaleControvaloreAttuale = Convert.ToDecimal(dtTabellaDati_KE.Compute("Sum(ControvaloreAttuale)", string.Empty));
                    decimal totaleControvaloreProspettico = Convert.ToDecimal(dtTabellaDati_KE.Compute("Sum(ControvaloreProspettico)", string.Empty));

                    TablePDF tabella_KE = new TablePDF(base.EnvironmentFacade.RendererFacade.XLeftLimit, dtTabellaDati_KE);
                    tabella_KE.ID = "Tabella_P13_A_KE";
                    tabella_KE.SubTitleTable = tabellaSubtitle_KE;
                    tabella_KE.TitleRowSpace = 5;
                    tabella_KE.TitleRow = true;
                    tabella_KE.TitleRowText = "NUOVA SOTTOSCRIZIONE DI IN PERSONA CON PROGRAMMA PERIODICO DI INVESTIMENTO";

                    tabella_KE.Columns.Add(new ColumnPDF("NomeProdotto", 223, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Nome prodotto"));
                    tabella_KE.Columns.Add(new ColumnPDF("ControvaloreAttuale", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore attuale (€)"));
                    tabella_KE.Columns.Add(new ColumnPDF("ControvaloreProspettico", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreProspettico", "Controvalore prospettico (€)"));


                    // Footer
                    tabella_KE.FooterColumns.Add(new ColumnPDF("Totale", 223, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabella_KE.FooterColumns.Add(new ColumnPDF("TotaleControvaloreAttuale", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale));
                    tabella_KE.FooterColumns.Add(new ColumnPDF("TotaleControvaloreProspettico", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale));

                    tabella_KE.FooterCells[0, 0].Value = "Totale";
                    tabella_KE.FooterCells[1, 0].Value = totaleControvaloreAttuale.ToString();
                    tabella_KE.FooterCells[2, 0].Value = totaleControvaloreProspettico.ToString();

                    #endregion

                    base.AddElement(tabella_KE);
                    base.AddElement(new SpacePDF(20));
                }
            }

            #endregion

            #region P13 per prodotti KS

            DataTable dtTabellaRiepilogo_KS = dsP13.Tables[0];
            DataRow[] rowsTabellaRiepilogo_KS = dtTabellaRiepilogo_KE.Select("TipoOperazione='NS' and CodInterno='KS'");

            DataView viewTabellaDati_KS = dsP13.Tables[1].DefaultView;
            viewTabellaDati_KS.RowFilter = "codTipoOperazione='NS' and CodInterno='KS'";
            DataTable dtTabellaDati_KS = viewTabellaDati_KS.ToTable();

            if (rowsTabellaRiepilogo_KS.Length > 0)
            {
                if (dtTabellaDati_KS.Rows.Count > 0)
                {
                    #region Tabella Riepilogo KS

                    TablePDF tabellaSubtitle_KS = new TablePDF(base.EnvironmentFacade.RendererFacade.XLeftLimit, 3, 2);
                    tabellaSubtitle_KS.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KS.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KS.Columns.Add(new ColumnPDF("", 174, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabellaSubtitle_KS.Header = false;
                    tabellaSubtitle_KS.Footer = false;
                    tabellaSubtitle_KS.AlternateRow = false;
                    tabellaSubtitle_KS.ID = "tabellaSubtitle_P13_A_KS";

                    tabellaSubtitle_KS.Cells[0, 0].Value = "Frequenza switch: " + rowsTabellaRiepilogo_KS[0]["FrequenzaSwitch"].ToString();
                    tabellaSubtitle_KS.Cells[1, 0].Value = "Durata programma: " + rowsTabellaRiepilogo_KS[0]["DurataProgramma"].ToString();
                    tabellaSubtitle_KS.Cells[2, 0].Value = "Importo programma: " + Helper.FormatCurrency(rowsTabellaRiepilogo_KS[0]["ImportoProgramma"].ToString());

                    tabellaSubtitle_KS.Cells[0, 1].Value = "Investimento iniziale: " + rowsTabellaRiepilogo_KS[0]["InvestimentoIniziale"].ToString();
                    tabellaSubtitle_KS.Cells[0, 1].ColSpan = 3;

                    #endregion

                    #region Tabella Dati KS

                    decimal totaleControvaloreAttuale = Convert.ToDecimal(dtTabellaDati_KS.Compute("Sum(ControvaloreAttuale)", string.Empty));
                    decimal totaleControvaloreProspettico = Convert.ToDecimal(dtTabellaDati_KS.Compute("Sum(ControvaloreProspettico)", string.Empty));

                    TablePDF tabella_KS = new TablePDF(base.EnvironmentFacade.RendererFacade.XLeftLimit, dtTabellaDati_KS);
                    tabella_KS.ID = "Tabella_P13_A_KS";
                    tabella_KS.SubTitleTable = tabellaSubtitle_KS;
                    tabella_KS.TitleRowSpace = 5;
                    tabella_KS.TitleRow = true;
                    tabella_KS.TitleRowText = "NUOVA SOTTOSCRIZIONE DI IN PRIMA PERSONA CON PROGRAMMA PERIODICO DI INVESTIMENTO";

                    tabella_KS.Columns.Add(new ColumnPDF("NomeProdotto", 223, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Nome prodotto"));
                    tabella_KS.Columns.Add(new ColumnPDF("ControvaloreAttuale", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore attuale (€)"));
                    tabella_KS.Columns.Add(new ColumnPDF("ControvaloreProspettico", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreProspettico", "Controvalore prospettico (€)"));


                    // Footer
                    tabella_KS.FooterColumns.Add(new ColumnPDF("Totale", 223, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo));
                    tabella_KS.FooterColumns.Add(new ColumnPDF("TotaleControvaloreAttuale", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale));
                    tabella_KS.FooterColumns.Add(new ColumnPDF("TotaleControvaloreProspettico", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale));

                    tabella_KS.FooterCells[0, 0].Value = "Totale";
                    tabella_KS.FooterCells[1, 0].Value = totaleControvaloreAttuale.ToString();
                    tabella_KS.FooterCells[2, 0].Value = totaleControvaloreProspettico.ToString();

                    #endregion

                    base.AddElement(tabella_KS);
                    base.AddElement(new SpacePDF(20));
                }
            }

            #endregion
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataTable.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataTable GetDataTable()
        {
            return null;
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataSet.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataSet GetDataSet()
        {
            var parametri = new List<Parametro>();

            #region Definizione dei parametri

            var parametro = new Parametro
            {
                Direction = System.Data.ParameterDirection.Input,
                DbType = System.Data.DbType.Int64,
                ParameterName = "chiaveClientePB",
                Value = base.EnvironmentFacade.ReportEnvironment.Cliente.Chiave
            };
            parametri.Add(parametro);

            parametro = new Parametro
            {
                Direction = System.Data.ParameterDirection.Input,
                DbType = System.Data.DbType.Int32,
                ParameterName = "chiaveProposta",
                Value = base.EnvironmentFacade.ReportEnvironment.Proposta.Chiave
            };
            parametri.Add(parametro);

            #endregion

            return EnvironmentFacade.ReportEnvironment.Proposta.PropostaCBUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Prop_P13", parametri)
                : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaBase, "REP_Prop_P13", parametri);
        }
    }
}
