Mercurial > altnet-hispano
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 |