示例#1
0
        private void DoTotals()
        {
            switch (ReportSelezionato)
            {
            case "PL":
                for (int RowCicle = 0; RowCicle < ReportProfitLosses.Count;)
                {
                    int Anno = ReportProfitLosses[RowCicle].Anno;
                    while (Anno == ReportProfitLosses[RowCicle].Anno)        // ciclo anno
                    {
                        string           Valuta           = ReportProfitLosses[RowCicle].Valuta;
                        ReportProfitLoss TotaleAnnoValuta = new ReportProfitLoss();
                        int ContGestioni = 0;
                        while (Anno == ReportProfitLosses[RowCicle].Anno && Valuta == ReportProfitLosses[RowCicle].Valuta)     // ciclo anno/valuta
                        {
                            ReportProfitLoss TotaleGestione = new ReportProfitLoss();
                            string           Gestione       = ReportProfitLosses[RowCicle].Gestione;
                            int ContTipoSoldi = 0;
                            while (Anno == ReportProfitLosses[RowCicle].Anno && Gestione == ReportProfitLosses[RowCicle].Gestione &&
                                   Valuta == ReportProfitLosses[RowCicle].Valuta)  // ciclo anno/valuta/gestione
                            {
                                TotaleAnnoValuta.Azioni       += ReportProfitLosses[RowCicle].Azioni;
                                TotaleAnnoValuta.Obbligazioni += ReportProfitLosses[RowCicle].Obbligazioni;
                                TotaleAnnoValuta.Certificati  += ReportProfitLosses[RowCicle].Certificati;
                                TotaleAnnoValuta.ETF_C_P      += ReportProfitLosses[RowCicle].ETF_C_P;
                                TotaleAnnoValuta.Fondo        += ReportProfitLosses[RowCicle].Fondo;
                                TotaleAnnoValuta.Futures      += ReportProfitLosses[RowCicle].Futures;
                                TotaleAnnoValuta.Opzioni      += ReportProfitLosses[RowCicle].Opzioni;
                                TotaleAnnoValuta.Commodities  += ReportProfitLosses[RowCicle].Commodities;
                                TotaleAnnoValuta.Costi        += ReportProfitLosses[RowCicle].Costi;
                                TotaleAnnoValuta.Totale       += ReportProfitLosses[RowCicle].Totale;

                                TotaleGestione.Azioni       += ReportProfitLosses[RowCicle].Azioni;
                                TotaleGestione.Obbligazioni += ReportProfitLosses[RowCicle].Obbligazioni;
                                TotaleGestione.Certificati  += ReportProfitLosses[RowCicle].Certificati;
                                TotaleGestione.ETF_C_P      += ReportProfitLosses[RowCicle].ETF_C_P;
                                TotaleGestione.Fondo        += ReportProfitLosses[RowCicle].Fondo;
                                TotaleGestione.Futures      += ReportProfitLosses[RowCicle].Futures;
                                TotaleGestione.Opzioni      += ReportProfitLosses[RowCicle].Opzioni;
                                TotaleGestione.Commodities  += ReportProfitLosses[RowCicle].Commodities;
                                TotaleGestione.Costi        += ReportProfitLosses[RowCicle].Costi;
                                TotaleGestione.Totale       += ReportProfitLosses[RowCicle].Totale;
                                ContTipoSoldi++;
                                if (RowCicle + 1 >= ReportProfitLosses.Count)
                                {
                                    RowCicle++;
                                    break;
                                }
                                RowCicle++;
                            }       // fine ciclo anno/valuta/gestione
                            ContGestioni++;
                            if (ContTipoSoldi > 1)
                            {
                                TotaleGestione.ISIN = "TOTALE " + Gestione + " " + Valuta;
                                ReportProfitLosses.Insert(RowCicle, TotaleGestione);
                                RowCicle++;
                            }
                            else
                            {
                                ReportProfitLosses[RowCicle - 1].ISIN += "TOTALE " + Gestione + " " + Valuta;
                            }
                            if (RowCicle + 1 > ReportProfitLosses.Count)
                            {
                                break;
                            }
                        }     // fine ciclo anno/valuta
                        if (ContGestioni > 1)
                        {
                            TotaleAnnoValuta.ISIN = "TOTALE " + Valuta + " " + Anno;
                            ReportProfitLosses.Insert(RowCicle, TotaleAnnoValuta);
                            RowCicle++;
                        }
                        else
                        {
                            ReportProfitLosses[RowCicle - 1].ISIN += " TOTALE " + Valuta + " " + Anno;
                        }
                        if (RowCicle + 1 > ReportProfitLosses.Count)
                        {
                            break;
                        }
                    }
                }
                break;

            case "DPL":
                for (int RowCicle = 0; RowCicle < ReportProfitLosses.Count;)
                {
                    int Anno     = ReportProfitLosses[RowCicle].Anno;
                    int contAnno = 0;
                    while (Anno == ReportProfitLosses[RowCicle].Anno)     // ciclo anno
                    {
                        string           Valuta           = ReportProfitLosses[RowCicle].Valuta;
                        ReportProfitLoss TotaleAnnoValuta = new ReportProfitLoss();
                        int contGestione = 0;
                        while (Anno == ReportProfitLosses[RowCicle].Anno && Valuta == ReportProfitLosses[RowCicle].Valuta)      // ciclo anno/valuta
                        {
                            ReportProfitLoss TotaleGestione = new ReportProfitLoss();
                            string           Gestione       = ReportProfitLosses[RowCicle].Gestione;
                            while (Anno == ReportProfitLosses[RowCicle].Anno && Gestione == ReportProfitLosses[RowCicle].Gestione &&
                                   Valuta == ReportProfitLosses[RowCicle].Valuta)     // ciclo anno/valuta/gestione
                            {
                                int              contTipoSoldi   = 0;
                                string           tipoSoldi       = ReportProfitLosses[RowCicle].TipoSoldi;
                                ReportProfitLoss TotaleTipoSoldi = new ReportProfitLoss();
                                while (Anno == ReportProfitLosses[RowCicle].Anno && Gestione == ReportProfitLosses[RowCicle].Gestione &&
                                       Valuta == ReportProfitLosses[RowCicle].Valuta && tipoSoldi == ReportProfitLosses[RowCicle].TipoSoldi) // ciclo anno/valuta/gestione/tipo_soldi
                                {
                                    TotaleAnnoValuta.Azioni       += ReportProfitLosses[RowCicle].Azioni;
                                    TotaleAnnoValuta.Obbligazioni += ReportProfitLosses[RowCicle].Obbligazioni;
                                    TotaleAnnoValuta.ETF_C_P      += ReportProfitLosses[RowCicle].ETF_C_P;
                                    TotaleAnnoValuta.Fondo        += ReportProfitLosses[RowCicle].Fondo;
                                    TotaleAnnoValuta.Futures      += ReportProfitLosses[RowCicle].Futures;
                                    TotaleAnnoValuta.Costi        += ReportProfitLosses[RowCicle].Costi;
                                    TotaleAnnoValuta.Totale       += ReportProfitLosses[RowCicle].Totale;
                                    TotaleGestione.Azioni         += ReportProfitLosses[RowCicle].Azioni;
                                    TotaleGestione.Obbligazioni   += ReportProfitLosses[RowCicle].Obbligazioni;
                                    TotaleGestione.ETF_C_P        += ReportProfitLosses[RowCicle].ETF_C_P;
                                    TotaleGestione.Fondo          += ReportProfitLosses[RowCicle].Fondo;
                                    TotaleGestione.Futures        += ReportProfitLosses[RowCicle].Futures;
                                    TotaleGestione.Costi          += ReportProfitLosses[RowCicle].Costi;
                                    TotaleGestione.Totale         += ReportProfitLosses[RowCicle].Totale;
                                    TotaleTipoSoldi.Azioni        += ReportProfitLosses[RowCicle].Azioni;
                                    TotaleTipoSoldi.Obbligazioni  += ReportProfitLosses[RowCicle].Obbligazioni;
                                    TotaleTipoSoldi.ETF_C_P       += ReportProfitLosses[RowCicle].ETF_C_P;
                                    TotaleTipoSoldi.Fondo         += ReportProfitLosses[RowCicle].Fondo;
                                    TotaleTipoSoldi.Futures       += ReportProfitLosses[RowCicle].Futures;
                                    TotaleTipoSoldi.Costi         += ReportProfitLosses[RowCicle].Costi;
                                    TotaleTipoSoldi.Totale        += ReportProfitLosses[RowCicle].Totale;
                                    contTipoSoldi++;
                                    if (RowCicle + 1 >= ReportProfitLosses.Count) // verifico di non andare oltre
                                    {
                                        RowCicle++;                               // incremento comunque il contatore per avere la stessa situazione in uscita dal ciclo
                                        break;
                                    }
                                    RowCicle++;
                                }                      // fine ciclo anno/valuta/gestione/tipo_soldi
                                if (contTipoSoldi > 1) // se il contatore è maggiore di 1 aggiungo riga x totali
                                {
                                    TotaleTipoSoldi.ISIN       = "TOTALE TIPO SOLDI";
                                    TotaleTipoSoldi.NomeTitolo = "TOTALE TIPO SOLDI";
                                    TotaleTipoSoldi.TipoSoldi  = tipoSoldi;
                                    TotaleTipoSoldi.Gestione   = Gestione;
                                    TotaleTipoSoldi.Valuta     = Valuta;
                                    TotaleTipoSoldi.Anno       = Anno;
                                    ReportProfitLosses.Insert(RowCicle, TotaleTipoSoldi);       // il contatore viene incrementato automaticamente
                                    RowCicle++;                                                 // mi adeguo
                                }
                                else
                                {
                                    ReportProfitLosses[RowCicle - 1].TipoSoldi += " TOTALE";
                                }
                                if (RowCicle >= ReportProfitLosses.Count)
                                {
                                    break;
                                }
                            }
                            contGestione++;
                            contAnno++;
                            if (contGestione > 1)
                            {
                                TotaleGestione.ISIN       = "TOTALE GESTIONE";
                                TotaleGestione.NomeTitolo = "TOTALE GESTIONE";
                                TotaleGestione.TipoSoldi  = "TOTALE GESTIONE";
                                TotaleGestione.Gestione   = Gestione;
                                TotaleGestione.Valuta     = Valuta;
                                TotaleGestione.Anno       = Anno;
                                ReportProfitLosses.Insert(RowCicle, TotaleGestione);          // il contatore viene incrementato automaticamente
                                RowCicle++;                                                   // mi adeguo
                            }
                            else
                            {
                                ReportProfitLosses[RowCicle - 1].Gestione += " TOTALE";
                            }
                            if (RowCicle >= ReportProfitLosses.Count)
                            {
                                break;
                            }
                        }       // fine ciclo gestione
                        if (contAnno > 1)
                        {
                            TotaleAnnoValuta.ISIN       = "TOTALE ANNO " + Valuta;
                            TotaleAnnoValuta.NomeTitolo = "TOTALE ANNO " + Valuta;
                            TotaleAnnoValuta.TipoSoldi  = "TOTALE ANNO " + Valuta;
                            TotaleAnnoValuta.Gestione   = "TOTALE ANNO" + Valuta;
                            TotaleAnnoValuta.Valuta     = Valuta;
                            TotaleAnnoValuta.Anno       = Anno;
                            ReportProfitLosses.Insert(RowCicle, TotaleAnnoValuta);
                            RowCicle++;
                        }
                        else
                        {
                            ReportProfitLosses[RowCicle - 1].Gestione += " - TOTALE ANNO";
                        }
                        if (RowCicle >= ReportProfitLosses.Count)
                        {
                            break;
                        }
                    }     // fine ciclo anno
                }
                break;
            }
        }
        public ReportProfitLossList GetReport1(IList <RegistryOwner> _selectedOwners,
                                               IList <int> _selectedYears, bool isSynthetic)
        {
            string owners = " (";

            foreach (RegistryOwner i in _selectedOwners)
            {
                owners += " A.id_gestione = " + i.Id_gestione + " or ";
            }
            owners  = owners.Substring(0, owners.Length - 4);
            owners += ") ";
            string anni = " (";

            foreach (int i in _selectedYears)
            {
                anni += " year(data_movimento) = " + i + " or ";
            }
            anni  = anni.Substring(0, anni.Length - 4);
            anni += ") ";
            string query = owners + " and " + anni;

            try
            {
                ReportProfitLossList reportProfitLossList = new ReportProfitLossList();
                DataTable            data = new DataTable();
                using (MySqlDataAdapter dbAdapter = new MySqlDataAdapter())
                {
                    dbAdapter.SelectCommand             = new MySqlCommand();
                    dbAdapter.SelectCommand.CommandType = System.Data.CommandType.Text;
                    dbAdapter.SelectCommand.CommandText = isSynthetic == true?string.Format(SQL.ReportScripts.GetProfitLoss, query) :
                                                              string.Format(SQL.ReportScripts.GetDetailedProfitLoss, query);

                    dbAdapter.SelectCommand.Connection = new MySqlConnection(DAFconnection.GetConnectionType());
                    dbAdapter.Fill(data);
                    foreach (DataRow dr in data.Rows)
                    {
                        ReportProfitLoss RPL = new ReportProfitLoss();
                        RPL.Anno      = dr.Field <int>("Anno");
                        RPL.Gestione  = dr.Field <string>("nome_gestione");
                        RPL.TipoSoldi = dr.Field <string>("desc_tipo_soldi");
                        RPL.Valuta    = dr.Field <string>("cod_valuta");
                        if (!isSynthetic)
                        {
                            RPL.NomeTitolo = dr.Field <string>("desc_titolo");
                            RPL.ISIN       = dr.Field <string>("isin");
                        }
                        else
                        {
                            RPL.NomeTitolo = "";
                            RPL.ISIN       = "";
                        }
                        RPL.Azioni       = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Azioni") * -1 : dr.Field <double>("Azioni");
                        RPL.Obbligazioni = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Obbligazioni") * -1 : dr.Field <double>("Obbligazioni");
                        RPL.Certificati  = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Certificati") * -1 : dr.Field <double>("Certificati");
                        RPL.ETF_C_P      = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("ETF_C_P") * -1 : dr.Field <double>("ETF_C_P");
                        RPL.Fondo        = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Fondo") * -1 : dr.Field <double>("Fondo");
                        RPL.Futures      = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Futures") * -1 : dr.Field <double>("Futures");
                        RPL.Opzioni      = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Opzioni") * -1 : dr.Field <double>("Opzioni");
                        RPL.Commodities  = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Commodities") * -1 : dr.Field <double>("Commodities");
                        RPL.Costi        = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Costi") * -1 : dr.Field <double>("Costi");
                        RPL.Totale       = RPL.TipoSoldi == "Perdita di Capitale" ? dr.Field <double>("Totale") * -1 : dr.Field <double>("Totale");
                        reportProfitLossList.Add(RPL);
                    }
                }
                return(reportProfitLossList);
            }
            catch (MySqlException err)
            {
                throw new Exception(err.Message);
            }
            catch (Exception err)
            {
                throw new Exception(err.Message);
            }
        }