diff 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
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Tue Jun 07 23:07:06 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Tue Jun 07 23:21:07 2011 -0300
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using AltNetHispano.Agendas.Domain.Exceptions;
 
 namespace AltNetHispano.Agendas.Domain
 {
@@ -53,36 +54,93 @@
 			get { return _tracks; }
 		}
 
-		#endregion
+    /// <summary>
+    /// Estado del evento en formato string (para persistencia a DB)
+    /// </summary>
+	  public virtual string Estado
+	  {
+      get
+      {
+        if (_eventoState != null)
+          return _eventoState.GetDescripcion();
+
+        return string.Empty;
+      }
+	    set
+      {
+        if (value != Estado)
+        {
+          if (EventoPropuestoState.GetInstance().GetDescripcion().Equals(value))
+            _eventoState = EventoPropuestoState.GetInstance();
+          else if (EventoAgendadoState.GetInstance().GetDescripcion().Equals(value))
+            _eventoState = EventoAgendadoState.GetInstance();
+          else if (EventoConfirmadoState.GetInstance().GetDescripcion().Equals(value))
+            _eventoState = EventoConfirmadoState.GetInstance();
+          else if (EventoPublicadoState.GetInstance().GetDescripcion().Equals(value))
+            _eventoState = EventoPublicadoState.GetInstance();
+          else
+            throw new InvalidStateException(value);
+        }
+      }
+	  }
+
+	  private EventoState _eventoState;
+
+	  /// <summary>
+    /// Obtiene una instancia de la clase que representa el estado del evento
+    /// </summary>
+    public virtual EventoState GetEstado()
+	  {
+      if (_eventoState == null)
+        SetEstado(EventoNullState.GetInstance());
+
+	    return _eventoState;
+	  }
+
+    /// <summary>
+    /// Asigna la instancia de la clase que representa el estado del evento
+    /// </summary>
+    /// <param name="eventoState">Instancia que representa el estado</param>
+    public virtual void SetEstado(EventoState eventoState)
+    {
+      _eventoState = eventoState;
+    }
+
+    public virtual TipoEvento Tipo { get; private set; }
+
+	  #endregion
 
 		#region Acciones sobre el evento
 
-		/// <summary>
-		/// Propone un evento
-		/// </summary>
-		/// <param name="titulo">Título del evento propuesto</param>
-		/// <param name="persona">Ponente para evento propuesto</param>
-		/// <returns></returns>
-		public static Evento Proponer(string titulo, Persona persona, string urlInvitacion)
+	  /// <summary>
+	  /// Propone un evento
+	  /// </summary>
+	  /// <param name="titulo">Título del evento propuesto</param>
+	  /// <param name="persona">Ponente para evento propuesto</param>
+	  /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
+	  /// <param name="tipo">Tipo del evento</param>
+	  /// <returns></returns>
+	  public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
 		{
-			var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion};
-			evento.AddTrack(new Track(evento, Accion.Proponer));
+			var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo};
+      evento.GetEstado().Promover(evento, Accion.Proponer);
 
 			return evento;
 		}
 
-		/// <summary>
-		/// Agenda un evento que no estaba propuesto
-		/// </summary>
-		/// <param name="titulo">Título del evento a agendar</param>
-		/// <param name="persona">Ponente para el evento</param>
-		/// <param name="fecha">Fecha de realización del evento</param>
-		/// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
-		/// <returns></returns>
-		public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion)
-		{
-			var evento = new Evento { Titulo = titulo };
-			evento.Agendar(persona, fecha, urlInvitacion);
+	  /// <summary>
+	  /// Agenda un evento que no estaba propuesto
+	  /// </summary>
+	  /// <param name="titulo">Título del evento a agendar</param>
+	  /// <param name="persona">Ponente para el evento</param>
+	  /// <param name="fecha">Fecha de realización del evento</param>
+	  /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param>
+    /// <param name="tipo">Tipo del evento</param>
+    /// <returns></returns>
+	  public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo)
+	  {
+	    var evento = new Evento {Titulo = titulo, Tipo = tipo};
+      evento.Agendar(persona, fecha, urlInvitacion);
 
 			return evento;
 		}
@@ -98,7 +156,7 @@
 			Ponente = persona;
 			Fecha = fecha;
 			UrlInvitacion = urlInvitacion;
-			AddTrack(new Track(this, Accion.Agendar));
+      this.GetEstado().Promover(this, Accion.Agendar);
 		}
 
 		public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
@@ -118,17 +176,19 @@
 
 		public virtual void Confirmar()
 		{
-			AddTrack(new Track(this, Accion.Confirmar));
+      this.GetEstado().Promover(this, Accion.Confirmar);
 		}
 
-		public virtual void Publicar()
-		{
-			AddTrack(new Track(this, Accion.Publicar));
+    public virtual void Publicar(short numeroOrden, string urlWiki)
+    {
+      this.NumeroOrden = numeroOrden;
+      this.UrlWiki = urlWiki;
+      this.GetEstado().Promover(this, Accion.Publicar);
 		}
 
 		#endregion
 
-		private void AddTrack(Track track)
+		protected internal virtual void AddTrack(Track track)
 		{
 			_newTracks.Add(track);
 			_tracks.Add(track);