private void AddToList(RigaVenditaVariante riga)
        {
            foreach (Ingresso ingresso in riga.Variante.Biglietto.Percorso.Ingressi)
            {
                //if (ingresso.SoggettoEconomico == _Soggetto)
                if (_Ingressi.Contains(ingresso))
                {
                    DatiReport01b target = null;
                    foreach (DatiReport01b dataReport01 in _List)
                    {
                        if (dataReport01.Museo == ingresso.Descrizione)
                        {
                            target = dataReport01;
                        }
                    }

                    if (target == null)
                    {
                        target        = new DatiReport01b();
                        target.Museo  = ingresso.Descrizione;
                        target.Ordine = ingresso.OrdineReport01;
                        _List.Add(target);
                    }

                    AddToList(target, ingresso, riga);
                }
            }
        }
        private void simpleButtonReport_Click(object sender, EventArgs e)
        {
            _List     = new List <DatiReport01b>();
            _Aperture = new GestoreAperture();
            _Ingressi = new List <Ingresso>();

            foreach (var item in this.checkedListBoxControl1.CheckedItems)
            {
                Ingresso ingresso = item as Ingresso;
                if (ingresso != null)
                {
                    _Ingressi.Add(ingresso);
                }
            }

            if (_Ingressi.Count == 0)
            {
                XtraMessageBox.Show("Selezionare un ingresso");
                return;
            }

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

            Cursor saveCursor = Cursor.Current;

            try
            {
                Cursor.Current = Cursors.WaitCursor;

                foreach (Ingresso ingresso in _Ingressi)
                {
                    DatiReport01b target = new DatiReport01b();
                    target.Museo  = ingresso.Descrizione;
                    target.Ordine = ingresso.OrdineReport01;
                    _List.Add(target);
                }

                // per sicurezza aggiungo un mese alla data di fine periodo
                _Aperture.CaricaApertureIngressi(this.dateEditInizio.DateTime, this.dateEditFine.DateTime.AddMonths(1), this.unitOfWork1);
                //XPCollection<PostazioneAccesso> accessi = new XPCollection<PostazioneAccesso>(this.unitOfWork1);
                //GroupOperator periodoa1 = new GroupOperator(GroupOperatorType.And, new CriteriaOperator[]{
                //                    new BinaryOperator("Data", this.dateEditInizio.DateTime, BinaryOperatorType.GreaterOrEqual),
                //                    new BinaryOperator("Data", this.dateEditFine.DateTime.AddMonths(1), BinaryOperatorType.LessOrEqual)});
                //accessi.Criteria = periodoa1;
                //foreach (PostazioneAccesso postazioneAccesso in accessi)
                //{
                //    foreach (PostazioneIngresso postazioneIngresso in postazioneAccesso.Postazione.Ingressi)
                //    {
                //        _Aperture.Add(postazioneIngresso.Ingresso.Oid, postazioneAccesso.Data);
                //    }
                //}

                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)
                {
                    foreach (RigaVenditaVariante rigaVenditaVariante in item.RigheVenditaVariante)
                    {
                        AddToList(rigaVenditaVariante);
                    }
                }

                XtraReport01b report = new XtraReport01b();

                report.Init(_List, this.dateEditInizio.DateTime, this.dateEditFine.DateTime, this.memoEditInfo.Text);

                report.ShowRibbonPreviewDialog();
            }
            finally
            {
                Cursor.Current = saveCursor;
            }
        }
        private void AddToList(DatiReport01b target, Ingresso ingresso, RigaVenditaVariante riga)
        {
            // filtro in base alle giornate di apertura
            //if (ingresso.IsAttrib(EventoParticolare.STR_INGRESSI_VERIFICA_VALIDITA) && !_Aperture.Valido(ingresso.Oid, riga.Vendita.DataContabile))
            //    return;
            if (ingresso.IsAttrib(EventoParticolare.STR_INGRESSI_NO_VENDITA_DA_ALTRI) && riga.Vendita.Struttura != ingresso.Struttura)
            {
                return;
            }
            if (riga.Vendita.Struttura != ingresso.Struttura && riga.Vendita.DataContabile.Year <= 2011 && riga.Vendita.DataContabile.Month < 6)
            {
                return;
            }
            if (ingresso.IsAttrib(EventoParticolare.STR_INGRESSI_MOD_TERREMOTO_1) && (riga.Vendita.DataContabile > EventoParticolare.EQDataEvento && riga.Vendita.DataContabile.Year < 2015 && !_Aperture.Valido(ingresso.Oid, riga.Vendita.DataContabile)))
            {
                return;
            }

            // && riga.Variante.Biglietto.Tipologia == EnumTipologiaBiglietto.Museo

            if (riga.Vendita.Struttura.Oid == ingresso.Struttura.Oid)
            {
                // emesso da questa struttura

                switch (riga.Variante.TipologiaTre)
                {
                case EnumTipologiaTre.Standard:

                    switch (riga.Variante.Biglietto.Tipologia)
                    {
                    case EnumTipologiaBiglietto.Museo:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.MuseoStandardIntero += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.MuseoStandardRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.MuseoOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    case EnumTipologiaBiglietto.Cumulativo:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.MuseoCumulativoIntero += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.MuseoCumulativoRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.MuseoOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    case EnumTipologiaBiglietto.Card:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.MuseoCardIntero += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.MuseoCardRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.MuseoOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    default:
                        throw new Exception(String.Format("Caso non previsto riga.Variante.Biglietto.Tipologia={0}", riga.Variante.Biglietto.Tipologia));
                    }

                    break;

                case EnumTipologiaTre.Bigliettone:
                    target.MuseoBigliettone += riga.Quantita;
                    break;

                case EnumTipologiaTre.OmaggioGruppo:
                    target.MuseoOmaggio += riga.Quantita;
                    break;

                default:
                    throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaTre={0}", riga.Variante.TipologiaTre));
                }
            }
            else
            {
                // altre strutture

                switch (riga.Variante.TipologiaTre)
                {
                case EnumTipologiaTre.Standard:

                    switch (riga.Variante.Biglietto.Tipologia)
                    {
                    case EnumTipologiaBiglietto.Museo:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.AltriStandardIntero += riga.Quantita;
                            //riga.Vendita.Stampe[0].StatoStampa == riga.Profilo;
                            //riga.Vendita.Stampe[0].RigheStampaIngresso[0].Entrate
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.AltriStandardRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.AltriOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    case EnumTipologiaBiglietto.Cumulativo:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.AltriCumulativoIntero += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.AltriCumulativoRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.AltriOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    case EnumTipologiaBiglietto.Card:
                        switch (riga.Variante.TipologiaDue)
                        {
                        case EnumTipologiaDue.Intero:
                            target.AltriCardIntero += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Ridotto:
                            target.AltriCardRidotto += riga.Quantita;
                            break;

                        case EnumTipologiaDue.Omaggio:
                            target.AltriOmaggio += riga.Quantita;
                            break;

                        default:
                            throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaDue={0}", riga.Variante.TipologiaDue));
                        }
                        break;

                    default:
                        throw new Exception(String.Format("Caso non previsto riga.Variante.Biglietto.Tipologia={0}", riga.Variante.Biglietto.Tipologia));
                    }

                    break;

                case EnumTipologiaTre.Bigliettone:
                    target.AltriBigliettone += riga.Quantita;
                    break;

                case EnumTipologiaTre.OmaggioGruppo:
                    target.AltriOmaggio += riga.Quantita;
                    break;

                default:
                    throw new Exception(String.Format("Caso non previsto riga.Variante.TipologiaTre={0}", riga.Variante.TipologiaTre));
                }
            }

            target.CalcolaTotali();
        }