internal void Init(DatiReportBv2 dati)
        {
            this.bindingSource1.Add(dati);

            this.xrLabelPeriodo.Text = string.Format("Periodo: dal {0:d} al {1:d}", dati.Inizio, dati.Fine);
            this.xrLabelH1.Text      = string.Format("Biglietti emessi da altri musei per {0}", dati.Struttura);
            this.xrLabelH2.Text      = string.Format("Biglietti cumulativi emessi da altri per {0}", dati.Struttura);
        }
        private void simpleButtonReport_Click(object sender, EventArgs e)
        {
            if (this.dateEditFine.DateTime.Date >= DateTime.Now.Date)
            {
                XtraMessageBox.Show("Data Fine non può essere maggiore della data odierna", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            _Struttura = this.lookUpEdit1.EditValue as Struttura;

            if (_Struttura != null)
            {
                _Dati = new DatiReportBv2
                {
                    PerAltri   = new List <VendutiPerTerzi>(),
                    Cumulativi = new List <Cumulativi>(),
                    Inizio     = this.dateEditInizio.DateTime,
                    Fine       = this.dateEditFine.DateTime,
                    Struttura  = _Struttura.Descrizione
                };

                XPCollection <Vendita> vendite = new XPCollection <Vendita>(this.unitOfWork1);
                vendite.Criteria = new GroupOperator(GroupOperatorType.And, new CriteriaOperator[] {
                    new BinaryOperator("DataContabile", this.dateEditInizio.DateTime, BinaryOperatorType.GreaterOrEqual),
                    new BinaryOperator("DataContabile", this.dateEditFine.DateTime, BinaryOperatorType.LessOrEqual)
                });

                foreach (Vendita item in vendite)
                {
                    // vendita effettuata da questa struttura
                    foreach (RigaVenditaVariante rigaVenditaVariante in item.RigheVenditaVariante)
                    {
                        List <Struttura> strutture = new List <Struttura>();
                        int numeroIngressi         = rigaVenditaVariante.Variante.Biglietto.Percorso.Ingressi.Count;
                        int questaStruttura        = 0;
                        foreach (Ingresso ingresso in rigaVenditaVariante.Variante.Biglietto.Percorso.Ingressi)
                        {
                            if (!strutture.Contains(ingresso.Struttura))
                            {
                                strutture.Add(ingresso.Struttura);
                            }

                            if (ingresso.Struttura == _Struttura)
                            {
                                questaStruttura++;
                            }
                        }

                        if (questaStruttura == numeroIngressi)
                        {
                            // la variante comprende SOLO ingressi di questa struttura
                            SoloQuesta(item, rigaVenditaVariante);
                        }
                        else if (questaStruttura == 0 && strutture.Count == 1)
                        {
                            // solo ALTRI musei
                            SoloAltre(item, rigaVenditaVariante);
                        }
                        else
                        {
                            // cumulativo/card
                            Cumulativo(item, rigaVenditaVariante, strutture);
                        }
                    }
                }

                XtraReportBv2 report = new XtraReportBv2();
                report.Init(_Dati);

                report.ShowRibbonPreviewDialog(DevExpress.LookAndFeel.UserLookAndFeel.Default);
            }
        }