예제 #1
0
        private void CorreggiTimeScale()
        {
            int timespan = GestoreCalendario.GetTimeSpan();

            if (this.schedulerControlPrenotazioni.DayView.TimeScale.TotalMinutes != timespan)
            {
                this.schedulerControlPrenotazioni.DayView.TimeScale      = new TimeSpan(0, timespan, 0);
                this.schedulerControlPrenotazioni.WorkWeekView.TimeScale = new TimeSpan(0, timespan, 0);
            }
        }
        public void CreaPrenotazione(bool manuale)
        {
            // cancello se presenti nel calendario
            foreach (Prenotazione item in this.m_CollectionMySet)
            {
                this.m_CollectionPrenotazioni.Remove(item);
            }

            this.m_CollectionMySet = new XPCollection <Prenotazione>(m_UnitOfWork, false);

            m_Ingresso = m_UnitOfWork.GetObjectByKey <Ingresso>(m_Prenotazione.Ingresso.Oid);

            if (manuale)
            {
                m_Prenotazione.Init(this.m_CollectionPrenotazioni, this.m_Scheduler.SelectedInterval.Start, GestoreCalendario.TipoGS);
            }

            foreach (SingolaPrenotazione singolaPrenotazione in m_Prenotazione.Prenotazioni)
            {
                Prenotazione pren = new Prenotazione(m_UnitOfWork);
                //pren.DurataSlot = m_Ingresso.DurataSlot(GestoreCalendario.TipoGS);
                pren.DurataSlot = GestoreCalendario.GetTimeSpan(m_Ingresso.CodicePrevent);
                pren.StartDate  = singolaPrenotazione.Orario;
                pren.EndDate    = singolaPrenotazione.Orario + new TimeSpan(0, GestoreCalendario.GetTimeSpan(m_Ingresso.CodicePrevent), 0);
                //new TimeSpan(0, m_Ingresso.DurataSlot(GestoreCalendario.TipoGS), 0);
                pren.Subject = singolaPrenotazione.Descrizione;
                //"Squadra " + nomegruppo[this.m_CollectionMySet.Count % nomegruppo.Length]; // +" (" + singolaPrenotazione.NumeroPersone.ToString() + " persone)";
                pren.Ingresso         = m_Ingresso;
                pren.Description      = m_Ingresso.Descrizione;
                pren.NumeroPersone    = singolaPrenotazione.NumeroPersone;
                pren.OriginataPrevent = singolaPrenotazione.OriginataPrevent;
                pren.PreventStartDate = pren.StartDate;
                pren.SetLabel(m_PaginaAttiva);

                pren.Save();

                this.m_CollectionMySet.Add(pren);
                this.m_CollectionPrenotazioni.Add(pren);
            }

            VerificaStato();

            this.m_Scheduler.RefreshData();

            this.gridControlPrenotazioni.DataSource = this.m_CollectionMySet;
            this.gridViewPrenotazioni.BestFitColumns();
        }
        private void gridControlPrenotazioni_EmbeddedNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
        {
            if (e.Button.ButtonType == NavigatorButtonType.Append)
            {
                e.Handled = true;

                Prenotazione prenotazione = new Prenotazione(m_UnitOfWork);
                prenotazione.Ingresso    = m_Ingresso;
                prenotazione.Description = m_Ingresso.Descrizione;
                prenotazione.Subject     = PrenotazioneComplessiva.RiferimentoGlobale;
                // "nuova squadra";
                //prenotazione.DurataSlot = m_Ingresso.DurataSlot(GestoreCalendario.TipoGS);
                prenotazione.DurataSlot = GestoreCalendario.GetTimeSpan(m_Ingresso.CodicePrevent);
                prenotazione.StartDate  = this.m_Scheduler.SelectedInterval.Start;
                prenotazione.StartDate  = prenotazione.FixStartDate();

                using (XtraFormEditPrenotazione formpre = new XtraFormEditPrenotazione())
                {
                    formpre.Init(prenotazione);
                    if (formpre.ShowDialog(this) == DialogResult.OK)
                    {
                        prenotazione.Save();
                        this.m_CollectionMySet.Add(prenotazione);
                        this.m_CollectionPrenotazioni.Add(prenotazione);
                        VerificaStato();
                    }
                }
            }

            if (e.Button.ButtonType == NavigatorButtonType.Remove)
            {
                e.Handled = true;

                Prenotazione prenotazione = this.gridViewPrenotazioni.GetRow(this.gridViewPrenotazioni.FocusedRowHandle) as Prenotazione;
                if (prenotazione != null)
                {
                    prenotazione.Delete();
                    VerificaStato();
                }
            }
        }
예제 #4
0
        public void SistemaPrenotazione()
        {
            int numeroGiusto = this.GestoreProfili.TotalePersone();

            foreach (PrenotazioneIngresso prenotazioneIngresso in this.Prenotazioni)
            {
                if (prenotazioneIngresso.Attivo)
                {
                    prenotazioneIngresso.NumeroPersone = numeroGiusto;

                    int attuale = 0;
                    foreach (SingolaPrenotazione singolaPrenotazione in prenotazioneIngresso.Prenotazioni)
                    {
                        attuale += singolaPrenotazione.NumeroPersone;
                    }

                    if (attuale == numeroGiusto)
                    {
                        continue;
                    }

                    DateTime doinizio = new DateTime(1900, 1, 1);
                    foreach (SingolaPrenotazione item in prenotazioneIngresso.Prenotazioni)
                    {
                        if (item.Orario > doinizio)
                        {
                            doinizio = item.Orario;
                        }
                    }

                    //int ingressoCapacitaSlot = prenotazioneIngresso.Ingresso.CapacitaSlot(TipoGS());
                    int ingressoCapacitaSlot = GestoreCalendario.Capacita(prenotazioneIngresso.Ingresso.CodicePrevent, doinizio);

                    //MessageBox.Show(ingressoCapacitaSlot.ToString());

                    int slot  = numeroGiusto / ingressoCapacitaSlot;
                    int resto = numeroGiusto - ingressoCapacitaSlot * slot;
                    if (resto > 0)
                    {
                        slot++;
                    }
                    int media = numeroGiusto / slot;
                    resto = numeroGiusto - media * slot;

                    if (prenotazioneIngresso.Prenotazioni.Count < slot)
                    {
                        // creo i nuovi slot se sono necessari
                        DateTime inizio     = new DateTime(1900, 1, 1);
                        int      durataSlot = GestoreCalendario.GetTimeSpan(prenotazioneIngresso.Ingresso.CodicePrevent);
                        //int durataSlot = prenotazioneIngresso.Ingresso.DurataSlot(TipoGS());
                        //if (durataSlot == 0)
                        //    durataSlot = 60;

                        foreach (SingolaPrenotazione item in prenotazioneIngresso.Prenotazioni)
                        {
                            item.NumeroPersone = media;
                            if (item.Orario > inizio)
                            {
                                inizio = item.Orario;
                            }
                        }

                        inizio = inizio + new TimeSpan(0, durataSlot, 0);

                        for (int i = prenotazioneIngresso.Prenotazioni.Count; i < slot; i++)
                        {
                            SingolaPrenotazione nuova = new SingolaPrenotazione();

                            nuova.NumeroPersone    = media;
                            nuova.Orario           = inizio;
                            nuova.OrarioFine       = inizio + new TimeSpan(0, durataSlot, 0);
                            nuova.Descrizione      = PrenotazioneComplessiva.RiferimentoGlobale;
                            nuova.OriginataPrevent = !string.IsNullOrEmpty(this.PrenotazionePrevent);

                            prenotazioneIngresso.Prenotazioni.Add(nuova);

                            inizio = inizio + new TimeSpan(0, durataSlot, 0);
                        }

                        attuale = media * slot;
                    }
                    else if (prenotazioneIngresso.Prenotazioni.Count > slot)
                    {
                        // devo togliere degli slot ...
                        while (prenotazioneIngresso.Prenotazioni.Count > slot)
                        {
                            prenotazioneIngresso.Prenotazioni.Remove(prenotazioneIngresso.Prenotazioni[prenotazioneIngresso.Prenotazioni.Count - 1]);
                        }

                        foreach (SingolaPrenotazione item in prenotazioneIngresso.Prenotazioni)
                        {
                            item.NumeroPersone = media;
                        }

                        attuale = media * slot;
                    }

                    // raggiungo il numero corretto di persone
                    while (attuale != numeroGiusto)
                    {
                        if (attuale > numeroGiusto)
                        {
                            int pos = prenotazioneIngresso.SlotMaggiore();
                            prenotazioneIngresso.Prenotazioni[pos].NumeroPersone--;
                            attuale--;
                        }
                        else if (attuale < numeroGiusto)
                        {
                            int pos = prenotazioneIngresso.SlotMinore();
                            prenotazioneIngresso.Prenotazioni[pos].NumeroPersone++;
                            attuale++;
                        }
                    }
                }
            }
        }
예제 #5
0
        //private bool fattoPrevent = false;
        private bool CreaSlotPrevent()
        {
            //string nomegruppo = "ABCDEFGHIJKLMNOPQRSTUWXYZ";

            if (PreventObj == null)
            {
                return(false);
            }
            //if (fattoPrevent) return false;

            // costruisce la prenotazione prevent
            foreach (PrenotazioneIngresso prenotazioneIngresso in this.Prenotazioni)
            {
                if (Esiste(PreventObj, prenotazioneIngresso.Ingresso.CodicePrevent))
                {
                    prenotazioneIngresso.Prenotazioni.Clear();
                    prenotazioneIngresso.ForzaturaPrevent = true;
                    foreach (prevent.get.OutRigaPercorsoVisita item in PreventObj.RigaPercorsoVisita)
                    {
                        if (item.IdMostra == prenotazioneIngresso.Ingresso.CodicePrevent.ToString())
                        {
                            SingolaPrenotazione prenotazione = new SingolaPrenotazione();
                            prenotazione.NumeroPersone = int.Parse(item.PaxVisita);
                            prenotazione.Orario        = item.DataVisita.Date + item.OraVisita.TimeOfDay;
                            prenotazione.OrarioFine    = prenotazione.Orario + new TimeSpan(0, GestoreCalendario.GetTimeSpan(prenotazioneIngresso.Ingresso.CodicePrevent), 0);
                            //prenotazioneIngresso.Ingresso.DurataSlot(PreventObj.TipoGS), 0);
                            //new TimeSpan(0, prenotazioneIngresso.Ingresso.DurataSlot(PreventObj.TipoGS), 0);
                            prenotazione.OriginataPrevent = true;
                            prenotazione.OrarioPrevent    = prenotazione.Orario;
                            prenotazione.Descrizione      = RiferimentoVendita;
                            // "Squadra " + nomegruppo[prenotazioneIngresso.Prenotazioni.Count % nomegruppo.Length];

                            prenotazioneIngresso.Prenotazioni.Add(prenotazione);

                            //Console.WriteLine("Prenotazione " + prenotazione.Orario);
                        }
                    }
                }
            }

            //fattoPrevent = true;

            return(true);
        }
        public void Init(DevExpress.Xpo.XPCollection xPCollection, DateTime inizio, string tipoGS)
        {
            if (ForzaturaPrevent)
            {
                return;
            }

            RisultatoCalendario risultato = GestoreCalendario.GeneraRichiesta(inizio, Ingresso.CodicePrevent);

            if (risultato == null)
            {
                return;
            }

            int ingressoCapacitaSlot = risultato.MaxPostiDisponibili;

            if (ingressoCapacitaSlot <= 0)
            {
                ingressoCapacitaSlot = NumeroPersone;
            }

            //int durataSlot = Ingresso.DurataSlot(tipoGS);
            int durataSlot = GestoreCalendario.GetTimeSpan(Ingresso.CodicePrevent);

            DateTime origine = inizio;

            int slot  = NumeroPersone / ingressoCapacitaSlot;
            int resto = NumeroPersone - ingressoCapacitaSlot * slot;

            if (resto > 0)
            {
                slot++;
            }
            int media = NumeroPersone / slot;

            resto = NumeroPersone - media * slot;

            int persone = NumeroPersone;
            List <SingolaPrenotazione> ListaTemp = new List <SingolaPrenotazione>();

            while (persone > 0)
            {
                while (Occupato(xPCollection, inizio, durataSlot) || risultato == null)
                {
                    inizio   += new TimeSpan(0, durataSlot, 0);
                    risultato = GestoreCalendario.GeneraRichiesta(inizio, Ingresso.CodicePrevent);
                    TimeSpan tempo = inizio - origine;
                    if (tempo.TotalDays > 3)
                    {
                        return;
                    }
                }

                int nump = media;
                if (persone >= media)
                {
                    if (resto > 0 && risultato.MaxPostiDisponibili > media)
                    {
                        nump++;
                        resto--;
                    }
                }
                else
                {
                    nump = resto;
                }

                SingolaPrenotazione pre = new SingolaPrenotazione();

                pre.NumeroPersone    = nump;
                pre.Orario           = inizio;
                pre.OrarioFine       = inizio + new TimeSpan(0, durataSlot, 0);
                pre.Descrizione      = PrenotazioneComplessiva.RiferimentoGlobale;
                pre.OriginataPrevent = false;

                ListaTemp.Add(pre);

                persone -= nump;

                inizio   += new TimeSpan(0, durataSlot, 0);
                risultato = GestoreCalendario.GeneraRichiesta(inizio, Ingresso.CodicePrevent);
            }

            if (persone == 0)
            {
                Prenotazioni = ListaTemp;
            }
        }