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(); } } }
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++; } } } } }
//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; } }