comparison Agendas/trunk/src/Agendas.Domain/Evento.cs @ 109:6bd9be78caa0

Merge
author Nelo@Kenia.neluz.int
date Tue, 07 Jun 2011 23:21:07 -0300
parents 80c22175c9b5
children 90ce239cfa6d
comparison
equal deleted inserted replaced
108:786a90e26c9b 109:6bd9be78caa0
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
3 using AltNetHispano.Agendas.Domain.Exceptions;
3 4
4 namespace AltNetHispano.Agendas.Domain 5 namespace AltNetHispano.Agendas.Domain
5 { 6 {
6 public class Evento : Identificable 7 public class Evento : Identificable
7 { 8 {
51 public virtual IEnumerable<Track> Tracks 52 public virtual IEnumerable<Track> Tracks
52 { 53 {
53 get { return _tracks; } 54 get { return _tracks; }
54 } 55 }
55 56
56 #endregion 57 /// <summary>
58 /// Estado del evento en formato string (para persistencia a DB)
59 /// </summary>
60 public virtual string Estado
61 {
62 get
63 {
64 if (_eventoState != null)
65 return _eventoState.GetDescripcion();
66
67 return string.Empty;
68 }
69 set
70 {
71 if (value != Estado)
72 {
73 if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value))
74 _eventoState = EventoPropuestoState.GetInstance();
75 else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value))
76 _eventoState = EventoAgendadoState.GetInstance();
77 else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value))
78 _eventoState = EventoConfirmadoState.GetInstance();
79 else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value))
80 _eventoState = EventoPublicadoState.GetInstance();
81 else
82 throw new InvalidStateException(value);
83 }
84 }
85 }
86
87 private EventoState _eventoState;
88
89 /// <summary>
90 /// Obtiene una instancia de la clase que representa el estado del evento
91 /// </summary>
92 public virtual EventoState GetEstado()
93 {
94 if (_eventoState == null)
95 SetEstado(EventoNullState.GetInstance());
96
97 return _eventoState;
98 }
99
100 /// <summary>
101 /// Asigna la instancia de la clase que representa el estado del evento
102 /// </summary>
103 /// <param name="eventoState">Instancia que representa el estado</param>
104 public virtual void SetEstado(EventoState eventoState)
105 {
106 _eventoState = eventoState;
107 }
108
109 public virtual TipoEvento Tipo { get; private set; }
110
111 #endregion
57 112
58 #region Acciones sobre el evento 113 #region Acciones sobre el evento
59 114
60 /// <summary> 115 /// <summary>
61 /// Propone un evento 116 /// Propone un evento
62 /// </summary> 117 /// </summary>
63 /// <param name="titulo">Título del evento propuesto</param> 118 /// <param name="titulo">Título del evento propuesto</param>
64 /// <param name="persona">Ponente para evento propuesto</param> 119 /// <param name="persona">Ponente para evento propuesto</param>
65 /// <returns></returns> 120 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
66 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion) 121 /// <param name="tipo">Tipo del evento</param>
67 { 122 /// <returns></returns>
68 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion}; 123 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
69 evento.AddTrack(new Track(evento, Accion.Proponer)); 124 {
125 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo};
126 evento.GetEstado().Promover(evento, Accion.Proponer);
70 127
71 return evento; 128 return evento;
72 } 129 }
73 130
74 /// <summary> 131 /// <summary>
75 /// Agenda un evento que no estaba propuesto 132 /// Agenda un evento que no estaba propuesto
76 /// </summary> 133 /// </summary>
77 /// <param name="titulo">Título del evento a agendar</param> 134 /// <param name="titulo">Título del evento a agendar</param>
78 /// <param name="persona">Ponente para el evento</param> 135 /// <param name="persona">Ponente para el evento</param>
79 /// <param name="fecha">Fecha de realización del evento</param> 136 /// <param name="fecha">Fecha de realización del evento</param>
80 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> 137 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
81 /// <returns></returns> 138 /// <param name="tipo">Tipo del evento</param>
82 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion) 139 /// <returns></returns>
83 { 140 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo)
84 var evento = new Evento { Titulo = titulo }; 141 {
85 evento.Agendar(persona, fecha, urlInvitacion); 142 var evento = new Evento {Titulo = titulo, Tipo = tipo};
143 evento.Agendar(persona, fecha, urlInvitacion);
86 144
87 return evento; 145 return evento;
88 } 146 }
89 147
90 /// <summary> 148 /// <summary>
96 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) 154 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion)
97 { 155 {
98 Ponente = persona; 156 Ponente = persona;
99 Fecha = fecha; 157 Fecha = fecha;
100 UrlInvitacion = urlInvitacion; 158 UrlInvitacion = urlInvitacion;
101 AddTrack(new Track(this, Accion.Agendar)); 159 this.GetEstado().Promover(this, Accion.Agendar);
102 } 160 }
103 161
104 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) 162 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
105 { 163 {
106 Ponente = persona; 164 Ponente = persona;
116 AddTrack(new Track(this, Accion.CambiarTitulo)); 174 AddTrack(new Track(this, Accion.CambiarTitulo));
117 } 175 }
118 176
119 public virtual void Confirmar() 177 public virtual void Confirmar()
120 { 178 {
121 AddTrack(new Track(this, Accion.Confirmar)); 179 this.GetEstado().Promover(this, Accion.Confirmar);
122 } 180 }
123 181
124 public virtual void Publicar() 182 public virtual void Publicar(short numeroOrden, string urlWiki)
125 { 183 {
126 AddTrack(new Track(this, Accion.Publicar)); 184 this.NumeroOrden = numeroOrden;
185 this.UrlWiki = urlWiki;
186 this.GetEstado().Promover(this, Accion.Publicar);
127 } 187 }
128 188
129 #endregion 189 #endregion
130 190
131 private void AddTrack(Track track) 191 protected internal virtual void AddTrack(Track track)
132 { 192 {
133 _newTracks.Add(track); 193 _newTracks.Add(track);
134 _tracks.Add(track); 194 _tracks.Add(track);
135 } 195 }
136 196