comparison Agendas/trunk/src/Agendas.Domain/Evento.cs @ 133:6f1041301797

Se agregan los estados Cancelado y Descartado con las acciones Cancelar, Reagendar, Descartar, Reproponer, según ticket 146. Falta solucionar problema con flujo, ver más información en el ticket de assembla. http://www.assembla.com/spaces/altnet-hispano/tickets/146-implementar-estado-descartar-y-cancelar-de-eventos
author alabra
date Sun, 10 Jul 2011 23:59:19 -0400
parents 90ce239cfa6d
children 62791999ad01
comparison
equal deleted inserted replaced
132:45be716763c3 133:6f1041301797
52 public virtual IEnumerable<Track> Tracks 52 public virtual IEnumerable<Track> Tracks
53 { 53 {
54 get { return _tracks; } 54 get { return _tracks; }
55 } 55 }
56 56
57 /// <summary> 57 /// <summary>
58 /// Estado del evento en formato string (para persistencia a DB) 58 /// Estado del evento en formato string (para persistencia a DB)
59 /// </summary> 59 /// </summary>
60 public virtual string Estado 60 public virtual string Estado
61 { 61 {
62 get 62 get
63 { 63 {
64 if (_eventoState != null) 64 if (_eventoState != null)
65 return _eventoState.GetDescripcion(); 65 return _eventoState.GetDescripcion();
66 66
67 return string.Empty; 67 return string.Empty;
68 } 68 }
69 set 69 set
70 { 70 {
71 if (value != Estado) 71 if (value != Estado)
72 { 72 {
73 if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value)) 73 if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value))
74 _eventoState = EventoPropuestoState.GetInstance(); 74 _eventoState = EventoPropuestoState.GetInstance();
75 else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value)) 75 else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value))
76 _eventoState = EventoAgendadoState.GetInstance(); 76 _eventoState = EventoAgendadoState.GetInstance();
77 else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value)) 77 else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value))
78 _eventoState = EventoConfirmadoState.GetInstance(); 78 _eventoState = EventoConfirmadoState.GetInstance();
79 else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value)) 79 else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value))
80 _eventoState = EventoPublicadoState.GetInstance(); 80 _eventoState = EventoPublicadoState.GetInstance();
81 else 81 else if (EventoCanceladoState.GetInstance().GetDescripcion().Equals(value))
82 throw new InvalidStateException(value); 82 _eventoState = EventoCanceladoState.GetInstance();
83 } 83 else if (EventoDescartadoState.GetInstance().GetDescripcion().Equals(value))
84 } 84 _eventoState = EventoDescartadoState.GetInstance();
85 } 85 else
86 86 throw new InvalidStateException(value);
87 private EventoState _eventoState; 87 }
88 }
89 }
90
91 private EventoState _eventoState;
88 92
89 /// <summary> 93 /// <summary>
90 /// Obtiene una instancia de la clase que representa el estado del evento 94 /// Obtiene una instancia de la clase que representa el estado del evento
91 /// </summary> 95 /// </summary>
92 public virtual EventoState GetEstado() 96 public virtual EventoState GetEstado()
110 114
111 #endregion 115 #endregion
112 116
113 #region Acciones sobre el evento 117 #region Acciones sobre el evento
114 118
115 /// <summary> 119 /// <summary>
116 /// Propone un evento 120 /// Propone un evento
117 /// </summary> 121 /// </summary>
118 /// <param name="titulo">Título del evento propuesto</param> 122 /// <param name="titulo">Título del evento propuesto</param>
119 /// <param name="persona">Ponente para evento propuesto</param> 123 /// <param name="persona">Ponente para evento propuesto</param>
120 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> 124 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
121 /// <param name="tipo">Tipo del evento</param> 125 /// <param name="tipo">Tipo del evento</param>
122 /// <returns></returns> 126 /// <returns></returns>
123 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo) 127 public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
124 { 128 {
125 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo}; 129 var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo};
126 evento.GetEstado().Promover(evento, Accion.Proponer); 130 evento.GetEstado().Promover(evento, Accion.Proponer);
127 131
128 return evento; 132 return evento;
129 } 133 }
130 134
131 /// <summary> 135 /// <summary>
132 /// Agenda un evento que no estaba propuesto 136 /// Agenda un evento que no estaba propuesto
133 /// </summary> 137 /// </summary>
134 /// <param name="titulo">Título del evento a agendar</param> 138 /// <param name="titulo">Título del evento a agendar</param>
135 /// <param name="persona">Ponente para el evento</param> 139 /// <param name="persona">Ponente para el evento</param>
136 /// <param name="fecha">Fecha de realización del evento</param> 140 /// <param name="fecha">Fecha de realización del evento</param>
137 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> 141 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
138 /// <param name="tipo">Tipo del evento</param> 142 /// <param name="tipo">Tipo del evento</param>
139 /// <returns></returns> 143 /// <returns></returns>
140 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo) 144 public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo)
141 { 145 {
142 var evento = new Evento {Titulo = titulo, Tipo = tipo}; 146 var evento = new Evento {Titulo = titulo, Tipo = tipo};
143 evento.Agendar(persona, fecha, urlInvitacion); 147 evento.Agendar(persona, fecha, urlInvitacion);
144 148
145 return evento; 149 return evento;
146 } 150 }
147 151
148 /// <summary> 152 /// <summary>
149 /// Agenda el evento actual 153 /// Agenda el evento actual
150 /// </summary> 154 /// </summary>
151 /// <param name="persona">Ponente para el evento</param> 155 /// <param name="persona">Ponente para el evento</param>
152 /// <param name="fecha">Fecha de realización del evento</param> 156 /// <param name="fecha">Fecha de realización del evento</param>
153 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> 157 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
154 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) 158 public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion)
155 { 159 {
156 Ponente = persona; 160 Ponente = persona;
157 Fecha = fecha; 161 Fecha = fecha;
158 UrlInvitacion = urlInvitacion; 162 UrlInvitacion = urlInvitacion;
159 this.GetEstado().Promover(this, Accion.Agendar); 163 this.GetEstado().Promover(this, Accion.Agendar);
160 } 164 }
161 165
162 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) 166 public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
163 { 167 {
164 Ponente = persona; 168 Ponente = persona;
166 UrlInvitacion = urlInvitacion; 170 UrlInvitacion = urlInvitacion;
167 171
168 AddTrack(new Track(this, Accion.Modificar)); 172 AddTrack(new Track(this, Accion.Modificar));
169 } 173 }
170 174
171 public virtual void CambiarTitulo(string titulo) 175 public virtual void CambiarTitulo(string titulo)
172 { 176 {
173 Titulo = titulo; 177 Titulo = titulo;
174 AddTrack(new Track(this, Accion.CambiarTitulo)); 178 AddTrack(new Track(this, Accion.CambiarTitulo));
175 } 179 }
176 180
177 public virtual void Confirmar() 181 public virtual void Confirmar()
178 { 182 {
179 this.GetEstado().Promover(this, Accion.Confirmar); 183 this.GetEstado().Promover(this, Accion.Confirmar);
180 } 184 }
181 185
182 public virtual void Publicar(short numeroOrden, string urlWiki) 186 public virtual void Publicar(short numeroOrden, string urlWiki)
183 { 187 {
184 this.NumeroOrden = numeroOrden; 188 this.NumeroOrden = numeroOrden;
185 this.UrlWiki = urlWiki; 189 this.UrlWiki = urlWiki;
186 this.GetEstado().Promover(this, Accion.Publicar); 190 this.GetEstado().Promover(this, Accion.Publicar);
187 } 191 }
188 192
189 #endregion 193 public virtual void Cancelar()
194 {
195 GetEstado().Promover(this, Accion.Cancelar);
196 }
197
198 public virtual void Descartar()
199 {
200 GetEstado().Promover(this, Accion.Descartar);
201 }
202
203 public virtual void ReProponer()
204 {
205 GetEstado().Promover(this, Accion.ReProponer);
206 }
207
208 public virtual void ReAgendar()
209 {
210 GetEstado().Promover(this, Accion.ReAgendar);
211 }
212 #endregion
190 213
191 protected internal virtual void AddTrack(Track track) 214 protected internal virtual void AddTrack(Track track)
192 { 215 {
193 _newTracks.Add(track); 216 _newTracks.Add(track);
194 _tracks.Add(track); 217 _tracks.Add(track);
195 } 218 }
196 219
197 public virtual IEnumerable<Track> GetTrackNews() 220 public virtual IEnumerable<Track> GetTrackNews()
198 { 221 {
199 return _newTracks; 222 return _newTracks;
200 } 223 }
201 } 224 }
202 } 225 }