comparison Agendas/trunk/src/Agendas.Domain/Evento.cs @ 74:bc46e7426c80

Refactoring de acciones según la definición del diagrama de estados en assembla (https://www.assembla.com/spaces/altnet-hispano/wiki/Estados_de_un_evento)
author nelopauselli
date Mon, 23 May 2011 20:13:37 -0300
parents 76567a0d1e44
children 96d7609f2e08
comparison
equal deleted inserted replaced
73:76567a0d1e44 74:bc46e7426c80
3 3
4 namespace AltNetHispano.Agendas.Domain 4 namespace AltNetHispano.Agendas.Domain
5 { 5 {
6 public class Evento : Identificable 6 public class Evento : Identificable
7 { 7 {
8 private readonly IList<Track> _tracks;
9 private IList<string> _enlaces;
10
11 public static Evento Proponer(string titulo, Ponente ponente)
12 {
13 var evento = new Evento { Titulo = titulo, Ponente = ponente };
14 evento.AddTracks(new Track(Accion.Proponer));
15
16 return evento;
17 }
18
19 public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha, string urlInvitacion)
20 {
21 var evento = new Evento { Titulo = titulo };
22 evento.Publicar(ponente, fecha, urlInvitacion);
23
24 return evento;
25 }
26
27 protected Evento() 8 protected Evento()
28 { 9 {
29 _enlaces = new List<string>();
30 _tracks = new List<Track>(); 10 _tracks = new List<Track>();
31 } 11 }
32 12
13 #region Propiedades del Evento
14
15 private readonly IList<Track> _tracks;
16 private Ponente _ponente;
17
18 /// <summary>
19 /// Título del evento
20 /// </summary>
33 public virtual string Titulo { get; private set; } 21 public virtual string Titulo { get; private set; }
22
23 /// <summary>
24 /// Fecha para la que se encuentra agendado el evento
25 /// </summary>
34 public virtual DateTime? Fecha { get; private set; } 26 public virtual DateTime? Fecha { get; private set; }
35 27
36 /// <summary> 28 /// <summary>
37 /// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo) 29 /// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo)
38 /// </summary> 30 /// </summary>
46 /// <summary> 38 /// <summary>
47 /// Numero de orden en el historico de reuniones virtuales 39 /// Numero de orden en el historico de reuniones virtuales
48 /// </summary> 40 /// </summary>
49 public virtual short NumeroOrden { get; private set; } 41 public virtual short NumeroOrden { get; private set; }
50 42
51 private Ponente _ponente; 43 /// <summary>
44 /// Ponente o responsable del evento
45 /// </summary>
52 public virtual Ponente Ponente 46 public virtual Ponente Ponente
53 { 47 {
54 get { return _ponente; } 48 get { return _ponente; }
55 private set 49 private set
56 { 50 {
60 value.AddEvento(this); 54 value.AddEvento(this);
61 _ponente = value; 55 _ponente = value;
62 } 56 }
63 } 57 }
64 58
59 /// <summary>
60 /// Track de cambios que ha sufrido el evento
61 /// </summary>
65 public virtual IEnumerable<Track> Tracks 62 public virtual IEnumerable<Track> Tracks
66 { 63 {
67 get { return _tracks; } 64 get { return _tracks; }
65 }
66
67 #endregion
68
69 #region Acciones sobre el evento
70
71 /// <summary>
72 /// Propone un evento
73 /// </summary>
74 /// <param name="titulo">Título del evento propuesto</param>
75 /// <param name="ponente">Ponente para evento propuesto</param>
76 /// <returns></returns>
77 public static Evento Proponer(string titulo, Ponente ponente)
78 {
79 var evento = new Evento { Titulo = titulo, Ponente = ponente };
80 evento.AddTracks(new Track(Accion.Proponer));
81
82 return evento;
83 }
84
85 /// <summary>
86 /// Agenda un evento que no estaba propuesto
87 /// </summary>
88 /// <param name="titulo">Título del evento a agendar</param>
89 /// <param name="ponente">Ponente para el evento</param>
90 /// <param name="fecha">Fecha de realización del evento</param>
91 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
92 /// <returns></returns>
93 public static Evento Agendar(string titulo, Ponente ponente, DateTime fecha, string urlInvitacion)
94 {
95 var evento = new Evento { Titulo = titulo };
96 evento.Agendar(ponente, fecha, urlInvitacion);
97
98 return evento;
99 }
100
101 /// <summary>
102 /// Agenda el evento actual
103 /// </summary>
104 /// <param name="ponente">Ponente para el evento</param>
105 /// <param name="fecha">Fecha de realización del evento</param>
106 /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
107 public virtual void Agendar(Ponente ponente, DateTime? fecha, string urlInvitacion)
108 {
109 Ponente = ponente;
110 Fecha = fecha;
111 UrlInvitacion = urlInvitacion;
112 AddTracks(new Track(Accion.Agendar));
68 } 113 }
69 114
70 public virtual void Actualizar(Ponente ponente, DateTime? fecha) 115 public virtual void Actualizar(Ponente ponente, DateTime? fecha)
71 { 116 {
72 Ponente = ponente; 117 Ponente = ponente;
79 { 124 {
80 Titulo = titulo; 125 Titulo = titulo;
81 AddTracks(new Track(Accion.CambiarTitulo)); 126 AddTracks(new Track(Accion.CambiarTitulo));
82 } 127 }
83 128
84 public virtual void Publicar(Ponente ponente, DateTime? fecha, string urlInvitacion) 129 #endregion
85 {
86 Ponente = ponente;
87 Fecha = fecha;
88 UrlInvitacion = urlInvitacion;
89 AddTracks(new Track(Accion.Publicar));
90 }
91 130
92 private void AddTracks(Track track) 131 private void AddTracks(Track track)
93 { 132 {
94 _tracks.Add(track); 133 _tracks.Add(track);
95 } 134 }