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 PDFGenerator.BusinessLayer.DataSection;
using System.Collections.Generic;
using PDFGenerator.BusinessLayer;

/// <summary>
/// Summary description for DSS76PatrimonioNonRappresentabileAssettClass
/// </summary>
public class DSS76PatrimonioNonRappresentabileAssettClass : IDataSection
{

    private ArrayList _parametriFiltro;
    private bool _Filtra;
    private bool HasColumnCtvNonCoperto;
    private bool _flagS86;
    private bool _flagS86BIS;

    /// <summary>
    /// Indica se è stato flaggato sull'albero la sezione S86
    /// </summary>
    public bool FlagS86
    {
        get { return _flagS86; }
        set { _flagS86 = value; }
    }

    /// <summary>
    /// Indica se è stato flaggato sull'albero la sezione S86BIS
    /// </summary>
    public bool FlagS86BIS
    {
        get { return _flagS86BIS; }
        set { _flagS86BIS = value; }
    }


     /// <summary>
    /// Costruttore
    /// </summary>
    public DSS76PatrimonioNonRappresentabileAssettClass()
    {
        _parametriFiltro = new ArrayList();
        _Filtra = false;
    }

    /// <summary>
    /// Costruttore
    /// </summary>
    /// <param name="modalitavisualizzazione"></param>
    public DSS76PatrimonioNonRappresentabileAssettClass(EmodalitaRappresentazione modalitavisualizzazione)
    {
        _modalitaRappresentazione = modalitavisualizzazione;
        _parametriFiltro = new ArrayList();
        _Filtra = false;
    }



    /// <summary>
    /// Modalità di visualizzazione:
    /// La modalità normale mostra la colonna Intermediario(S76 in modalità normale),
    /// La modalità alternativa mostra la colonna AreaProgetto(S76 in modalità alternativa).
    /// Se non specificato di default viene impostata la modalità normale.
    /// </summary>
    public enum EmodalitaRappresentazione
    {
        normale,
        alternativa
    }

    private EmodalitaRappresentazione _modalitaRappresentazione = EmodalitaRappresentazione.normale;


    /// <summary>
    /// Modalità di visualizzazione:
    /// La modalità normale mostra la colonna Intermediario(S76 in modalità normale),
    /// La modalità alternativa mostra la colonna AreaProgetto(S76 in modalità alternativa).
    /// Se non specificato di default viene impostata la modalità normale.
    /// </summary>
    public EmodalitaRappresentazione modalitaRappresentazione
    {
        get { return _modalitaRappresentazione; }
        set { _modalitaRappresentazione = value; }
    }


    public DataSectionResult getDataSection(List<SessionStruct> tabelleSessione, string querySql, DataThread dataThread)
    {
        DataSectionResult dsr = new DataSectionResult();
       
        DataTable dt;
        if(_modalitaRappresentazione==EmodalitaRappresentazione.normale)
        {
            dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
        }
        else
        {
            dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
             if (_Filtra)
             {
                 if (_parametriFiltro.Count > 0)
                 {
                     string parametriFiltro = "need_area in(";
                     for (int i = 0; i < _parametriFiltro.Count; i++)
                     {
                         parametriFiltro += "'" + _parametriFiltro[i].ToString() + "',";
                     }

                     parametriFiltro = parametriFiltro.Remove(parametriFiltro.Length - 1);
                     parametriFiltro += ")";

                     DataView dtFiltrata = new DataView(dt);
                     dtFiltrata.RowFilter = parametriFiltro;
                     dt = dtFiltrata.ToTable();
                 }
                 else
                 {
                     dt.Rows.Clear();
                 }
             }
        }
        

        DataRow dr;
        Decimal ctvTotale = 0;
        Decimal ctvTotaleNonCoperto = 0;
        DataSetS76 ds76 = new DataSetS76();

        foreach (DataRow r in dt.Rows)
        {
            // attraverso il metodo ClsFunzioniGeneriche recupero la data del contartto
           
            dr = ds76.ContoCorrente.NewRow();
            
            dr["Contratto"] = r["Contratto"];

            dr["Descrizione"] = r["Descrizione"];

            //if (r["PartitaViaggiante"] != DBNull.Value && Convert.ToDouble(r["PartitaViaggiante"]) > 0)
            //    dr["<IMAGE>"] = UtilityManager.getAppSetting("PartiteViaggianti");
            //else
                
            dr["<IMAGE>"] = string.Empty;


            switch (_modalitaRappresentazione)
            {
                case EmodalitaRappresentazione.normale:
                    dr["Intermediario"] = r["Intermediario"];
                    break;

                case EmodalitaRappresentazione.alternativa:
                    dr["AreaProgetto"] = r["Area"].ToString();
                    //V se il progetto è progetto investimento non deve apparire la riga / progetto
                    string progetto = r["Progetto"].ToString();
                    if (r["Area"].ToString().ToUpper() == "INVESTIMENTO")
                        if(progetto != "Progetto investimento")
                            dr["AreaProgetto"] += " / " + progetto;
                    //
                    break;
            }
            dr["ControvaloreNonCoperto"] = r["Controvalore"];

            dr["Controvalore"] = r["controvalore_contratto"];
            dr["DataSottoscrizione"] = r["DataSottoscrizione"];


            #region Getstione controvalore non coperto
            decimal ctv = 0;
            decimal ctvContratto = 0;

            if (r["Controvalore"] != DBNull.Value)
                ctv = Convert.ToDecimal(r["Controvalore"]);

            if (r["controvalore_contratto"] != DBNull.Value)
                ctvContratto = Convert.ToDecimal(r["controvalore_contratto"]);


            if (ctv != ctvContratto)
                HasColumnCtvNonCoperto = true;


            #endregion


            ds76.ContoCorrente.Rows.Add(dr);
            ctvTotale += (Decimal)r["controvalore_contratto"];
            ctvTotaleNonCoperto += (Decimal)r["Controvalore"];
        }


        DataRow drTot = ds76.TotaleConti.NewRow();
        drTot["Descrizione"] = "Totale Patrimonio non rappresentabile".ToUpper();
        drTot["Valore"] = ctvTotale;
        drTot["ValoreNonCoperto"] = ctvTotaleNonCoperto;
        ds76.TotaleConti.Rows.Add(drTot);
        
        // Aggiungo l'informazione per la parte grafica
        if (ds76.ContoCorrente.ExtendedProperties.Contains("HasColumnCtvNonCoperto"))
            ds76.ContoCorrente.ExtendedProperties["HasColumnCtvNonCoperto"] = HasColumnCtvNonCoperto;
        else
            ds76.ContoCorrente.ExtendedProperties.Add("HasColumnCtvNonCoperto", HasColumnCtvNonCoperto);


        //Patrimonio non rappresentabile per asset class- 
        //se presente patrimonio non rappresentabile ed è stata selezionata solo la vista a livello di portafoglio complessivo, 
        //nella tabella non deve essere riportata la colonna Area/progetto
        if (_flagS86 == false && _flagS86BIS == false)
            ds76.ContoCorrente.AreaProgettoColumn.ExtendedProperties.Add("ToRemove", true);


        dsr.DatiSezione = ds76;
        dsr.Esito = ds76.ContoCorrente.Rows.Count;
        
        return dsr;

    }

    public ArrayList ParametriFiltro
    {
        set
        {
            _Filtra = true;
            _parametriFiltro = value;
        }
    }
}