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); } }