Beispiel #1
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 SalvaTutto()
        {
            VerificaStato();

            m_Prenotazione.Prenotazioni.Clear();
            if (m_PrenotazioneAttiva)
            {
                foreach (Prenotazione item in m_CollectionMySet)
                {
                    SingolaPrenotazione singolaPrenotazione = new SingolaPrenotazione();
                    singolaPrenotazione.NumeroPersone    = item.NumeroPersone;
                    singolaPrenotazione.Orario           = item.StartDate;
                    singolaPrenotazione.OrarioFine       = item.EndDate;
                    singolaPrenotazione.Descrizione      = item.Subject;
                    singolaPrenotazione.OriginataPrevent = item.OriginataPrevent;
                    singolaPrenotazione.OrarioPrevent    = item.PreventStartDate;

                    m_Prenotazione.Prenotazioni.Add(singolaPrenotazione);
                }
            }
        }
Beispiel #3
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++;
                        }
                    }
                }
            }
        }
        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;
            }
        }