changeset 106:80c22175c9b5

agregado de tipo de evento (van, cafe, grupoestudio) agregado de tipo de evento en el alta de evento y en el alta de propuestas desde la app web algunas correcciones en el publicador del blog agregado de textos para publicar en el blog eventos de tipo alt.net cafe
author jorge.rowies
date Mon, 06 Jun 2011 14:07:12 -0300
parents 1d820f17fc75
children 6bd9be78caa0
files Agendas/trunk/src/Agendas.Blog/Agendas.Blog.csproj Agendas/trunk/src/Agendas.Blog/Exceptions/TipoEventoNoSoportadoException.cs Agendas/trunk/src/Agendas.Blog/Impl/AgendarReunionPostWriter.cs Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs Agendas/trunk/src/Agendas.Blog/Properties/Resources.Designer.cs Agendas/trunk/src/Agendas.Blog/Properties/Resources.resx Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/TipoEvento.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/TrackTests.cs Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Agendas/trunk/src/Agendas.Web/Models/EventoModelHelper.cs Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Agendas/trunk/src/Agendas.Web/Views/Evento/New.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml
diffstat 24 files changed, 510 insertions(+), 220 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Blog/Agendas.Blog.csproj	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Agendas.Blog.csproj	Mon Jun 06 14:07:12 2011 -0300
@@ -48,6 +48,7 @@
     <Compile Include="Impl\BlogPublicador.cs" />
     <Compile Include="Exceptions\BlogWriterMasterKeyNotFoundException.cs" />
     <Compile Include="Impl\BlogPublicadorConfig.cs" />
+    <Compile Include="Exceptions\TipoEventoNoSoportadoException.cs" />
     <Compile Include="IPostWriter.cs" />
     <Compile Include="IPostWriterFactory.cs" />
     <Compile Include="Impl\NullObjectPostWriter.cs" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Blog/Exceptions/TipoEventoNoSoportadoException.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -0,0 +1,13 @@
+using System;
+using System.Globalization;
+
+namespace Agendas.Blog.Exceptions
+{
+  public class TipoEventoNoSoportadoException : Exception
+  {
+    public TipoEventoNoSoportadoException(string tipoEvento)
+      : base(string.Format(CultureInfo.InvariantCulture, "El tipo de evento '{0}' no esta soportado por el publicador de blog", tipoEvento))
+    {
+    }
+  }
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Blog/Impl/AgendarReunionPostWriter.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/AgendarReunionPostWriter.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -1,5 +1,6 @@
 using System;
 using System.Globalization;
+using Agendas.Blog.Exceptions;
 using Agendas.Blog.Properties;
 using AltNetHispano.Agendas.Domain;
 using System.Linq;
@@ -13,17 +14,34 @@
 	  }
 
     protected override string GetTitle(Track track)
-		{
-			return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Title,
+    {
+      string resourceName = getTitleResourceName(track);
+
+      return string.Format(CultureInfo.InvariantCulture, resourceName,
 													 track.Evento.Ponente.Nombre, //Nombre y apellido del ponente
 													 track.Evento.Titulo //Tema a tratar en la reunion
 				);
-		}
+    }
 
-    protected override string GetBody(Track track)
+	  private string getTitleResourceName(Track track)
+	  {
+	    string resourceName;
+	    if (track.Evento.Tipo == TipoEvento.Van)
+	      resourceName = Resources.VAN_Agendar_Title;
+	    else if (track.Evento.Tipo == TipoEvento.Cafe)
+	      resourceName = Resources.Cafe_Agendar_Title;
+	    else
+	      throw new TipoEventoNoSoportadoException(track.Evento.Tipo.ToString());
+
+	    return resourceName;
+	  }
+
+	  protected override string GetBody(Track track)
 		{
+      string resourceName = getBodyResourceName(track);
+
 			var fecha = getFechaFormateada(track.Evento.Fecha);
-			return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body,
+      return string.Format(CultureInfo.InvariantCulture, resourceName,
 													 fecha, //Fecha y hora en GMT+0
 													 track.Evento.Ponente.Nombre, //Nombre y apellido del ponente
 													 track.Evento.Titulo, //Tema a tratar en la reunion
@@ -32,6 +50,19 @@
 				);
 		}
 
+    private string getBodyResourceName(Track track)
+    {
+      string resourceName;
+      if (track.Evento.Tipo == TipoEvento.Van)
+        resourceName = Resources.VAN_Agendar_Body;
+      else if (track.Evento.Tipo == TipoEvento.Cafe)
+        resourceName = Resources.Cafe_Agendar_Body;
+      else
+        throw new TipoEventoNoSoportadoException(track.Evento.Tipo.ToString());
+
+      return resourceName;
+    }
+
 		private string getFechaFormateada(DateTime? fecha)
 		{
 			if (fecha == null)
@@ -49,7 +80,7 @@
 		{
 			if (!string.IsNullOrEmpty(evento.UrlInvitacion))
 			{
-				return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body_UrlListaCorreo,
+				return string.Format(CultureInfo.InvariantCulture, Resources.Reunion_Agendar_Body_UrlListaCorreo,
 														 evento.UrlInvitacion); 
 			}
 
--- a/Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -1,5 +1,6 @@
 using System;
 using System.Globalization;
+using Agendas.Blog.Exceptions;
 using Agendas.Blog.Properties;
 using AltNetHispano.Agendas.Domain;
 
@@ -13,19 +14,49 @@
 
     protected override string GetTitle(Track track)
     {
-      return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Publicacion_Title,
+      string resourceName = getTitleResourceName(track);
+
+      return string.Format(CultureInfo.InvariantCulture, resourceName,
                            track.Evento.NumeroOrden, //# de VAN en el historial
-                           track.Evento.Ponente.Nombre //Nombre y apellido del ponente
+                           track.Evento.Titulo //Titulo del evento
 
         );
     }
 
+    private string getTitleResourceName(Track track)
+    {
+      string resourceName;
+      if (track.Evento.Tipo == TipoEvento.Van)
+        resourceName = Resources.VAN_Publicar_Title;
+      else if (track.Evento.Tipo == TipoEvento.Cafe)
+        resourceName = Resources.Cafe_Publicar_Title;
+      else
+        throw new TipoEventoNoSoportadoException(track.Evento.Tipo.ToString());
+
+      return resourceName;
+    }
+
     protected override string GetBody(Track track)
     {
-      return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Publicacion_Body,
+      string resourceName = getBodyResourceName(track);
+
+      return string.Format(CultureInfo.InvariantCulture, resourceName,
 													 track.Evento.UrlWiki, //Url al video publicado en la wiki
                            GetNombreUsuario(track) //Usuario que postea en el blog
         );
     }
+
+    private string getBodyResourceName(Track track)
+    {
+      string resourceName;
+      if (track.Evento.Tipo == TipoEvento.Van)
+        resourceName = Resources.VAN_Publicar_Body;
+      else if (track.Evento.Tipo == TipoEvento.Cafe)
+        resourceName = Resources.Cafe_Publicar_Body;
+      else
+        throw new TipoEventoNoSoportadoException(track.Evento.Tipo.ToString());
+
+      return resourceName;
+    }
   }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Blog/Properties/Resources.Designer.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Properties/Resources.Designer.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -61,7 +61,32 @@
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;Ya está publicada la grabación de esta VAN en: &lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;El día {0}, se realizará un ALT.NET Café donde se tratará el tema &quot;{2}&quot;&lt;/p&gt;
+        ///{3}
+        ///&lt;p&gt;&amp;nbsp;&lt;/p&gt;
+        ///&lt;p&gt;Para acceder, pueden hacerlo por live meeting mediante alguno de los siguientes enlaces:&lt;/p&gt;
+        ///&lt;p&gt;&lt;a href=&quot;http://snipr.com/virtualaltnet&quot;&gt;http://snipr.com/virtualaltnet &lt;/a&gt;&lt;/p&gt;
+        ///&lt;p&gt;&lt;a href=&quot;https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;amp;role=attend&quot;&gt;https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
+        ///&lt;p&gt;&amp;nbsp;&lt;/p&gt;
+        ///&lt;p&gt;Más información sobre las reuniones virtuale [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string Cafe_Agendar_Body {
+            get {
+                return ResourceManager.GetString("Cafe_Agendar_Body", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Realización de ALT.NET Café - {1}.
+        /// </summary>
+        internal static string Cafe_Agendar_Title {
+            get {
+                return ResourceManager.GetString("Cafe_Agendar_Title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;p&gt;Ya está publicada la grabación de este ALT.NET Café en: &lt;/p&gt;
         ///&lt;p&gt;&lt;a href=&quot;{0}&quot;&gt;{0}&lt;/a&gt;&lt;/p&gt;
         ///&lt;br /&gt;
         ///&lt;p&gt; &lt;/p&gt;
@@ -69,18 +94,29 @@
         ///&lt;p&gt;{1}&lt;/p&gt;
         ///&lt;p&gt;&lt;/p&gt;.
         /// </summary>
-        internal static string VAN_Publicacion_Body {
+        internal static string Cafe_Publicar_Body {
             get {
-                return ResourceManager.GetString("VAN_Publicacion_Body", resourceCulture);
+                return ResourceManager.GetString("Cafe_Publicar_Body", resourceCulture);
             }
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Publicada la grabación de la VAN #{0} - {1}.
+        ///   Looks up a localized string similar to Publicada la grabación del ALT.NET Café #{0} - {1}.
         /// </summary>
-        internal static string VAN_Publicacion_Title {
+        internal static string Cafe_Publicar_Title {
             get {
-                return ResourceManager.GetString("VAN_Publicacion_Title", resourceCulture);
+                return ResourceManager.GetString("Cafe_Publicar_Title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;p&gt;En el siguiente enlace, podrán encontrar el detalle de los temas a tratar:&lt;/p&gt;
+        ///&lt;p&gt;&lt;a href=&quot;{0}&quot;&gt;{0}&lt;/a&gt;&lt;/p&gt;
+        ///&lt;p&gt;&lt;/p&gt;.
+        /// </summary>
+        internal static string Reunion_Agendar_Body_UrlListaCorreo {
+            get {
+                return ResourceManager.GetString("Reunion_Agendar_Body_UrlListaCorreo", resourceCulture);
             }
         }
         
@@ -94,29 +130,42 @@
         ///&lt;p&gt;&amp;nbsp;&lt;/p&gt;
         ///&lt;p&gt;Más información sobre las reuniones virtuales de la comuni [rest of string was truncated]&quot;;.
         /// </summary>
-        internal static string VAN_Realizacion_Body {
+        internal static string VAN_Agendar_Body {
             get {
-                return ResourceManager.GetString("VAN_Realizacion_Body", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;En el siguiente enlace, podrán encontrar el detalle de los temas a tratar:&lt;/p&gt;
-        ///&lt;p&gt;&lt;a href=&quot;{0}&quot;&gt;{0}&lt;/a&gt;&lt;/p&gt;
-        ///&lt;p&gt;&lt;/p&gt;.
-        /// </summary>
-        internal static string VAN_Realizacion_Body_UrlListaCorreo {
-            get {
-                return ResourceManager.GetString("VAN_Realizacion_Body_UrlListaCorreo", resourceCulture);
+                return ResourceManager.GetString("VAN_Agendar_Body", resourceCulture);
             }
         }
         
         /// <summary>
         ///   Looks up a localized string similar to Presentación de VAN con {0} - {1}.
         /// </summary>
-        internal static string VAN_Realizacion_Title {
+        internal static string VAN_Agendar_Title {
             get {
-                return ResourceManager.GetString("VAN_Realizacion_Title", resourceCulture);
+                return ResourceManager.GetString("VAN_Agendar_Title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to &lt;p&gt;Ya está publicada la grabación de esta VAN en: &lt;/p&gt;
+        ///&lt;p&gt;&lt;a href=&quot;{0}&quot;&gt;{0}&lt;/a&gt;&lt;/p&gt;
+        ///&lt;br /&gt;
+        ///&lt;p&gt; &lt;/p&gt;
+        ///&lt;p&gt;En nombre de la comunidad ALT.NET Hispano,&lt;/p&gt;
+        ///&lt;p&gt;{1}&lt;/p&gt;
+        ///&lt;p&gt;&lt;/p&gt;.
+        /// </summary>
+        internal static string VAN_Publicar_Body {
+            get {
+                return ResourceManager.GetString("VAN_Publicar_Body", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Publicada la grabación de la VAN #{0} - {1}.
+        /// </summary>
+        internal static string VAN_Publicar_Title {
+            get {
+                return ResourceManager.GetString("VAN_Publicar_Title", resourceCulture);
             }
         }
     }
--- a/Agendas/trunk/src/Agendas.Blog/Properties/Resources.resx	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Properties/Resources.resx	Mon Jun 06 14:07:12 2011 -0300
@@ -117,7 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <data name="VAN_Publicacion_Body" xml:space="preserve">
+  <data name="VAN_Publicar_Body" xml:space="preserve">
     <value>&lt;p&gt;Ya está publicada la grabación de esta VAN en: &lt;/p&gt;
 &lt;p&gt;&lt;a href="{0}"&gt;{0}&lt;/a&gt;&lt;/p&gt;
 &lt;br /&gt;
@@ -126,10 +126,10 @@
 &lt;p&gt;{1}&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;</value>
   </data>
-  <data name="VAN_Publicacion_Title" xml:space="preserve">
+  <data name="VAN_Publicar_Title" xml:space="preserve">
     <value>Publicada la grabación de la VAN #{0} - {1}</value>
   </data>
-  <data name="VAN_Realizacion_Body" xml:space="preserve">
+  <data name="VAN_Agendar_Body" xml:space="preserve">
     <value>&lt;p&gt;El día {0}, {1} presentará en una nueva VAN el tema "{2}"&lt;/p&gt;
 {3}
 &lt;p&gt;&amp;nbsp;&lt;/p&gt;
@@ -144,12 +144,42 @@
 &lt;p&gt;En nombre de la comunidad ALT.NET Hispano,&lt;/p&gt;
 &lt;p&gt;{4}&lt;/p&gt;</value>
   </data>
-  <data name="VAN_Realizacion_Body_UrlListaCorreo" xml:space="preserve">
+  <data name="Reunion_Agendar_Body_UrlListaCorreo" xml:space="preserve">
     <value>&lt;p&gt;En el siguiente enlace, podrán encontrar el detalle de los temas a tratar:&lt;/p&gt;
 &lt;p&gt;&lt;a href="{0}"&gt;{0}&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt;</value>
   </data>
-  <data name="VAN_Realizacion_Title" xml:space="preserve">
+  <data name="VAN_Agendar_Title" xml:space="preserve">
     <value>Presentación de VAN con {0} - {1}</value>
   </data>
+  <data name="Cafe_Agendar_Body" xml:space="preserve">
+    <value>&lt;p&gt;El día {0}, se realizará un ALT.NET Café donde se tratará el tema "{2}"&lt;/p&gt;
+{3}
+&lt;p&gt;&amp;nbsp;&lt;/p&gt;
+&lt;p&gt;Para acceder, pueden hacerlo por live meeting mediante alguno de los siguientes enlaces:&lt;/p&gt;
+&lt;p&gt;&lt;a href="http://snipr.com/virtualaltnet"&gt;http://snipr.com/virtualaltnet &lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;a href="https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;amp;role=attend"&gt;https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;amp;role=attend&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&amp;nbsp;&lt;/p&gt;
+&lt;p&gt;Más información sobre las reuniones virtuales de la comunidad:&lt;/p&gt;
+&lt;p&gt;&lt;a href="../../reuniones/descripcion.aspx"&gt;http://altnethispano.org/reuniones/descripcion.aspx&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt; &lt;/p&gt;
+&lt;p&gt;&lt;/p&gt;
+&lt;p&gt;En nombre de la comunidad ALT.NET Hispano,&lt;/p&gt;
+&lt;p&gt;{4}&lt;/p&gt;</value>
+  </data>
+  <data name="Cafe_Agendar_Title" xml:space="preserve">
+    <value>Realización de ALT.NET Café - {1}</value>
+  </data>
+  <data name="Cafe_Publicar_Body" xml:space="preserve">
+    <value>&lt;p&gt;Ya está publicada la grabación de este ALT.NET Café en: &lt;/p&gt;
+&lt;p&gt;&lt;a href="{0}"&gt;{0}&lt;/a&gt;&lt;/p&gt;
+&lt;br /&gt;
+&lt;p&gt; &lt;/p&gt;
+&lt;p&gt;En nombre de la comunidad ALT.NET Hispano,&lt;/p&gt;
+&lt;p&gt;{1}&lt;/p&gt;
+&lt;p&gt;&lt;/p&gt;</value>
+  </data>
+  <data name="Cafe_Publicar_Title" xml:space="preserve">
+    <value>Publicada la grabación del ALT.NET Café #{0} - {1}</value>
+  </data>
 </root>
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -63,10 +63,10 @@
 			return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion);
 		}
 
-		public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion)
+		public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion, TipoEvento tipo)
 		{
 			Persona persona = GetPonente(ponenteNombre);
-			var evento = Evento.Proponer(titulo, persona, urlInvitacion);
+      var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo);
 
 			if (string.IsNullOrWhiteSpace(evento.Titulo))
 				return new Resultado(false);
@@ -79,7 +79,7 @@
 			return new Resultado(true);
 		}
 
-		public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
+    public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion, TipoEvento tipo)
 		{
 			if (!fecha.HasValue)
 				return new Resultado(false);
@@ -90,7 +90,7 @@
 
 			Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
 			if (evento == null)
-				evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion);
+				evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo);
 			else
 				evento.Agendar(persona, fecha, urlInvitacion);
 
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Mon Jun 06 14:07:12 2011 -0300
@@ -66,6 +66,7 @@
     <Compile Include="Repositories\IPersonaRepository.cs" />
     <Compile Include="Resultado.cs" />
     <Compile Include="Services\PersonaService.cs" />
+    <Compile Include="TipoEvento.cs" />
     <Compile Include="Track.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -106,6 +106,8 @@
       _eventoState = eventoState;
     }
 
+    public virtual TipoEvento Tipo { get; private set; }
+
 	  #endregion
 
 		#region Acciones sobre el evento
@@ -115,27 +117,29 @@
 	  /// </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="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)
+	  public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo)
 		{
-			var evento = new Evento {Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion};
+			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 };
+	  /// <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;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/TipoEvento.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -0,0 +1,9 @@
+namespace AltNetHispano.Agendas.Domain
+{
+  public enum TipoEvento
+  {
+    Van,
+    Cafe,
+    GrupoEstudio
+  }
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -31,7 +31,7 @@
 
 			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository);
 
-			Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion));
+      Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van));
 			Assert.AreEqual(0, agenda.GetEventosAgendados().Count);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
@@ -50,7 +50,7 @@
 
 			Assert.Throws<IdentityContextNotConfiguredException>(
 				() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-					urlInvitacion));
+          urlInvitacion, TipoEvento.Van));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
 		}
 
@@ -65,7 +65,7 @@
 			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository);
 
 			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-				urlInvitacion));
+        urlInvitacion, TipoEvento.Van));
 
 			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(0));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
@@ -77,7 +77,7 @@
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
 
 			var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			Assert.IsFalse(r.Succeful);
 		}
@@ -94,7 +94,7 @@
 															repository.Object, DefaultPersonaRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 			publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
@@ -109,7 +109,7 @@
 			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			Assert.AreEqual(0, agenda.GetEventosPropuestos().Count);
 
@@ -132,7 +132,7 @@
 			var agenda = new Agenda(publicador.Object, repository, DefaultPersonaRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 
@@ -165,7 +165,7 @@
 															DefaultEventoRepository, DefaultPersonaRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar");
 			//agenda.Recordar(van.Id);
@@ -184,7 +184,7 @@
 			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
 															DefaultEventoRepository, DefaultPersonaRepository);
 
-			agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
+      agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 			Assert.AreEqual(1, agenda.GetEventosPropuestos().Count);
 			Assert.AreEqual(0, agenda.GetEventosAgendados().Count);
 
@@ -209,7 +209,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
+      agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5");
 
@@ -223,7 +223,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion);
+      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5");
 
@@ -237,7 +237,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion);
+      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5");
 
@@ -253,7 +253,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion);
+      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5");
 
@@ -270,7 +270,7 @@
       var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion);
+      agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5");
       agenda.Confirmar(evento.Id);
@@ -289,7 +289,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
+      agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5");
 
@@ -305,7 +305,7 @@
  			var publicador1 = new Mock<IPublicador>();
 
       var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
-      agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
+      agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
       var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5");
 
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -27,7 +27,7 @@
 				var ponente = new Persona("Carlos Blé");
 				_personaRepository.Save(ponente);
 
-				var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty);
+        var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van);
 				_eventoRepository.Save(evento);
 
 				return evento.Id;
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -20,10 +20,10 @@
 
 			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
 
-			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), 
-				urlInvitacion);
+			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
+        urlInvitacion, TipoEvento.Van);
 			agenda.Agendar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5),
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			var eventos = agenda.GetEventosAgendados();
 			Assert.AreEqual(2, eventos.Count);
@@ -49,7 +49,7 @@
 
 			agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");
 
-			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion);
+      agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion, TipoEvento.Van);
 
 			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);
 
@@ -73,7 +73,7 @@
 			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
 
 			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 
 			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);
 
@@ -92,7 +92,7 @@
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
 
-			agenda.Proponer(titulo, "Fabio", urlInvitacion);
+      agenda.Proponer(titulo, "Fabio", urlInvitacion, TipoEvento.Van);
 			Persona persona;
 			{
 				var eventos = agenda.GetEventosPropuestos();
@@ -123,7 +123,7 @@
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
 
-			agenda.Proponer(titulo, "Fabio", urlInvitacion);
+      agenda.Proponer(titulo, "Fabio", urlInvitacion, TipoEvento.Van);
 			{
 				var eventos = agenda.GetEventosPropuestos();
 				Assert.AreEqual(1, eventos.Count);
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -19,7 +19,7 @@
 		{
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
 
-			agenda.Proponer("Van", null, urlInvitacion);
+      agenda.Proponer("Van", null, urlInvitacion, TipoEvento.Van);
 			{
 				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
 				IList<Evento> eventosPublicados = agenda.GetEventosAgendados();
@@ -38,7 +38,7 @@
 				Assert.AreEqual("otro ponente", evento.Ponente.Nombre);
 			}
 
-			var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion);
+      var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van);
 			Assert.IsTrue(r.Succeful);
 			{
 				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
@@ -55,14 +55,14 @@
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
 
 			{
-				agenda.Proponer("Van propuesta", null, urlInvitacion);
+        agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 			}
 
 			{
 				var van = agenda.GetEventosPropuestos().FirstOrDefault();
 				Assert.IsNotNull(van);
 				var r = agenda.Agendar(van.Titulo, "Ponente", null,
-					urlInvitacion);
+          urlInvitacion, TipoEvento.Van);
 				Assert.IsFalse(r.Succeful);
 			}
 		}
@@ -73,7 +73,7 @@
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
 
 			{
-				agenda.Proponer("Van propuesta", null, urlInvitacion);
+        agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 			}
 
 			{
@@ -82,7 +82,7 @@
 
 				van.Actualizar(null, DateTime.Today.AddDays(5), urlInvitacion);
 				var r = agenda.Agendar(van.Titulo, string.Empty, van.Fecha,
-					urlInvitacion);
+          urlInvitacion, TipoEvento.Van);
 				Assert.IsFalse(r.Succeful);
 			}
 		}
@@ -104,7 +104,7 @@
 
 			var agenda = new Agenda(null, repository.Object, DefaultPersonaRepository);
 
-			var r = agenda.Proponer(string.Empty, null, urlInvitacion);
+      var r = agenda.Proponer(string.Empty, null, urlInvitacion, TipoEvento.Van);
 			Assert.IsFalse(r.Succeful);
 
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
@@ -117,14 +117,14 @@
 
 			SetCurrentUser(null, null);
 
-			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null, urlInvitacion));
+      Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null, urlInvitacion, TipoEvento.Van));
 		}
 
 		[Test]
 		public void Proponer_evento_correctamente()
 		{
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
-			agenda.Proponer("Van propuesta", null, urlInvitacion);
+      agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
 			Assert.IsNotNull(eventosPropuestos);
@@ -137,9 +137,9 @@
 		{
 			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
 
-			agenda.Proponer("Van propuesta", null, urlInvitacion);
+      agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 			var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 			Assert.IsTrue(r.Succeful);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -18,7 +18,7 @@
 			var agenda = new Agenda(null, repository, DefaultPersonaRepository);
 
 			var fecha = DateTime.Now.AddDays(5);
-			agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion);
+      agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion, TipoEvento.Van);
 			var evento = repository.GetEventosConFecha().First();
 
 			Assert.AreEqual(1, evento.Tracks.Count());
@@ -53,7 +53,7 @@
 			var agenda = new Agenda(null, repository, DefaultPersonaRepository);
 
 			agenda.Agendar("Html 5", "jjmontes", DateTime.Now,
-				urlInvitacion);
+        urlInvitacion, TipoEvento.Van);
 			var evento = repository.GetEventosConFecha().First();
 
 			Assert.AreEqual(1, evento.Tracks.Count());
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -17,14 +17,14 @@
 		public void Proponer()
 		{
 
-			var resultado = _agenda.Proponer("SOLID", "Jorge", null);
+			var resultado = _agenda.Proponer("SOLID", "Jorge", null, TipoEvento.Van);
 			Assert.IsTrue(resultado.Succeful);
 		}
 
 
 		public void Agendar()
 		{
-			var resultado = _agenda.Agendar("SOLID", "Jorge", DateTime.Today.AddDays(5), null);
+      var resultado = _agenda.Agendar("SOLID", "Jorge", DateTime.Today.AddDays(5), null, TipoEvento.Van);
 			Assert.IsTrue(resultado.Succeful);
 		}
 
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Mon Jun 06 14:07:12 2011 -0300
@@ -75,6 +75,7 @@
     <Compile Include="IdentityHelper.cs" />
     <Compile Include="Models\AccountModels.cs" />
     <Compile Include="Models\EventoModel.cs" />
+    <Compile Include="Models\EventoModelHelper.cs" />
     <Compile Include="Models\PropuestaModel.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Services\AccountMembershipService.cs" />
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -1,80 +1,82 @@
 using System;
 using System.Linq;
 using System.Web.Mvc;
+using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Factories;
 using AltNetHispano.Agendas.Web.Models;
 
 namespace AltNetHispano.Agendas.Web.Controllers
 {
-    public class EventoController : Controller
+  public class EventoController : Controller
+  {
+    public ActionResult Index()
     {
-        public ActionResult Index()
-        {
-			var agenda = AgendaFactory.GetAgenda();
+      var agenda = AgendaFactory.GetAgenda();
+
+      var model = new EventoIndexModel
+      {
+        ProximosEventos = from e in agenda.GetEventosAgendados()
+                          orderby e.Fecha
+                          select new EventoDto { Id = e.Id.ToString(), Titulo = e.Titulo, Fecha = e.Fecha.Value }
+      };
 
-			var model = new EventoIndexModel
-			{
-				ProximosEventos = from e in agenda.GetEventosAgendados() orderby e.Fecha
-								  select new EventoDto { Id = e.Id.ToString(), Titulo = e.Titulo, Fecha = e.Fecha.Value }
-			};
-			
-            return View(model);
-        }
+      return View(model);
+    }
 
-		[Authorize]
-		public ActionResult New()
-        {
-            return View();
-        }
+    [Authorize]
+    public ActionResult New()
+    {
+      return View(new EventoNewModel());
+    }
 
-        [HttpPost]
-		[Authorize]
-		public ActionResult New(EventoNewModel model)
-        {
-            if (ModelState.IsValid)
-            {
-                var agenda = AgendaFactory.GetAgenda();
+    [HttpPost]
+    [Authorize]
+    public ActionResult New(EventoNewModel model)
+    {
+      if (ModelState.IsValid)
+      {
+        var agenda = AgendaFactory.GetAgenda();
 
-                var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha, 
-                  model.UrlInvitacion);
-				if (r.Succeful)
-					return RedirectToAction("Index");
-                ModelState.AddModelError("error", r.ToString());
-            }
-            return View(model);
-        }
+        var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha,
+          model.UrlInvitacion, (TipoEvento)model.Tipo);
+        if (r.Succeful)
+          return RedirectToAction("Index");
+        ModelState.AddModelError("error", r.ToString());
+      }
+      return View(model);
+    }
 
-		[Authorize]
-		public ActionResult Edit(string id)
-		{
-			var agenda = AgendaFactory.GetAgenda();
-			var evento = agenda.GetEvento(new Guid(id));
-			
-			var model = new EventoEditModel
-			            	{
-			            		Id = id,
-			            		Titulo = evento.Titulo,
-			            		Ponente = evento.Ponente != null ? evento.Ponente.Nombre : string.Empty,
-			            		Fecha = evento.Fecha,
+    [Authorize]
+    public ActionResult Edit(string id)
+    {
+      var agenda = AgendaFactory.GetAgenda();
+      var evento = agenda.GetEvento(new Guid(id));
+
+      var model = new EventoEditModel
+                    {
+                      Id = id,
+                      Titulo = evento.Titulo,
+                      Ponente = evento.Ponente != null ? evento.Ponente.Nombre : string.Empty,
+                      Fecha = evento.Fecha,
                       UrlInvitacion = evento.UrlInvitacion
-			            	};
-			return View(model);
-		}
+                    };
+      return View(model);
+    }
 
-    	[HttpPost]
-		[Authorize]
-		public ActionResult Edit(EventoEditModel model)
-		{
-			if (ModelState.IsValid)
-			{
-				var agenda = AgendaFactory.GetAgenda();
+    [HttpPost]
+    [Authorize]
+    public ActionResult Edit(EventoEditModel model)
+    {
+      if (ModelState.IsValid)
+      {
+        var agenda = AgendaFactory.GetAgenda();
 
-				var r =agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value , model.UrlInvitacion);
-				if (r.Succeful)
-					return RedirectToAction("Index");
-				ModelState.AddModelError("error", r.ToString());
-			}
-			return View(model);
-		}
+        var r = agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value, model.UrlInvitacion);
+        if (r.Succeful)
+          return RedirectToAction("Index");
+        ModelState.AddModelError("error", r.ToString());
+      }
+      return View(model);
     }
+  }
 }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -1,6 +1,7 @@
 using System;
 using System.Linq;
 using System.Web.Mvc;
+using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Factories;
 using AltNetHispano.Agendas.Web.Models;
 
@@ -30,7 +31,7 @@
 		[Authorize]
 		public ActionResult New()
 		{
-			return View();
+			return View(new PropuestaNewModel());
 		}
 
 		[HttpPost]
@@ -41,7 +42,7 @@
 			{
 				var agenda = AgendaFactory.GetAgenda();
 
-				var r = agenda.Proponer(model.Titulo, model.Ponente, model.UrlInvitacion);
+        var r = agenda.Proponer(model.Titulo, model.Ponente, model.UrlInvitacion, (TipoEvento)model.Tipo);
 				if (r.Succeful)
 					return RedirectToAction("Index");
 				ModelState.AddModelError("error", r.ToString());
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -6,49 +6,65 @@
 
 namespace AltNetHispano.Agendas.Web.Models
 {
-    public class EventoIndexModel
-    {
-        public IEnumerable<EventoDto> ProximosEventos { get; set; }
-    }
+  public class EventoIndexModel
+  {
+    public IEnumerable<EventoDto> ProximosEventos { get; set; }
+  }
 
-    public class EventoNewModel
+  public class EventoNewModel
+  {
+    public EventoNewModel()
     {
-        [Required]
-        public string Titulo { get; set; }
-
-        [Required]
-        public string Ponente { get; set; }
-
-        [Required]
-        public DateTime Fecha { get; set; }
-
-		[Url]
-        public string UrlInvitacion { get; set; }
+      Tipos = EventoModelHelper.GetTiposEventos();
     }
 
-    public class EventoEditModel
-    {
-        [HiddenInput(DisplayValue = false)]
-        public string Id { get; set; }
+    [Required]
+    public int Tipo { get; set; }
+
+    [Required]
+    public string Titulo { get; set; }
+
+    [Required]
+    public string Ponente { get; set; }
+
+    [Required]
+    public DateTime Fecha { get; set; }
 
-        [Required]
-        public string Titulo { get; set; }
+    [Url]
+    public string UrlInvitacion { get; set; }
+
+    public IEnumerable<TipoEventoModel> Tipos { get; private set; }
+  }
 
-        [Required]
-        public string Ponente { get; set; }
+  public class TipoEventoModel
+  {
+    public int TipoEvento { get; set; }
+    public string TipoEventoStr { get; set; }
+  }
 
-        [Required]
-        public DateTime? Fecha { get; set; }
+  public class EventoEditModel
+  {
+    [HiddenInput(DisplayValue = false)]
+    public string Id { get; set; }
 
-		[Url]
-		public string UrlInvitacion { get; set; }
-	}
-    
+    [Required]
+    public string Titulo { get; set; }
+
+    [Required]
+    public string Ponente { get; set; }
 
-    public class EventoDto
-    {
-        public string Id { get; set; }
-        public string Titulo { get; set; }
-		public DateTime Fecha { get; set; }
-    }
+    [Required]
+    public DateTime? Fecha { get; set; }
+
+    [Url]
+    public string UrlInvitacion { get; set; }
+  }
+
+
+  public class EventoDto
+  {
+    public string Id { get; set; }
+    public string Titulo { get; set; }
+    public DateTime Fecha { get; set; }
+  }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModelHelper.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+using AltNetHispano.Agendas.Domain;
+
+namespace AltNetHispano.Agendas.Web.Models
+{
+  public static class EventoModelHelper
+  {
+    public static IEnumerable<TipoEventoModel> GetTiposEventos()
+    {
+      var tipos = new List<TipoEventoModel>
+                    {
+                      new TipoEventoModel {TipoEvento = (int) TipoEvento.Van, TipoEventoStr = "VAN"},
+                      new TipoEventoModel {TipoEvento = (int) TipoEvento.Cafe, TipoEventoStr = "ALT.NET Cafe"},
+                      new TipoEventoModel {TipoEvento = (int) TipoEvento.GrupoEstudio, TipoEventoStr = "Grupo Estudio"}
+                    };
+      return tipos;
+    }
+  }
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs	Mon Jun 06 14:07:12 2011 -0300
@@ -5,41 +5,51 @@
 
 namespace AltNetHispano.Agendas.Web.Models
 {
-    public class PropuestaIndexModel
+  public class PropuestaIndexModel
+  {
+    public IEnumerable<PropuestaDto> Propuestas { get; set; }
+  }
+
+  public class PropuestaNewModel
+  {
+    public PropuestaNewModel()
     {
-        public IEnumerable<PropuestaDto> Propuestas { get; set; }
+      Tipos = EventoModelHelper.GetTiposEventos();
     }
 
-    public class PropuestaNewModel
-    {
-        [Required]
-        public string Titulo { get; set; }
+    [Required]
+    public int Tipo { get; set; }
 
-        public string Ponente { get; set; }
+    [Required]
+    public string Titulo { get; set; }
 
-		[Url]
-		public string UrlInvitacion { get; set; }
-	}
+    public string Ponente { get; set; }
 
-    public class PropuestaEditModel
-    {
-        [HiddenInput(DisplayValue = false)]
-        public string Id { get; set; }
+    [Url]
+    public string UrlInvitacion { get; set; }
+
+    public IEnumerable<TipoEventoModel> Tipos { get; private set; }
+  }
 
-        [Required]
-        public string Titulo { get; set; }
+  public class PropuestaEditModel
+  {
+    [HiddenInput(DisplayValue = false)]
+    public string Id { get; set; }
 
-        public string Ponente { get; set; }
+    [Required]
+    public string Titulo { get; set; }
+
+    public string Ponente { get; set; }
 
-		[Url]
-		public string UrlInvitacion { get; set; }
-	}
-    
+    [Url]
+    public string UrlInvitacion { get; set; }
+  }
+
 
-    public class PropuestaDto
-    {
-        public string Id { get; set; }
-        public string Titulo { get; set; }
-    	public string Ponente { get; set; }
-    }
+  public class PropuestaDto
+  {
+    public string Id { get; set; }
+    public string Titulo { get; set; }
+    public string Ponente { get; set; }
+  }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/New.cshtml	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/New.cshtml	Mon Jun 06 14:07:12 2011 -0300
@@ -22,7 +22,47 @@
     <div>
         <fieldset>
             <legend>Datos del evento:</legend>
-            @Html.EditorForModel()
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Tipo)
+            </div>
+            <div class="editor-field">
+              @Html.DropDownListFor(model => model.Tipo, new SelectList(Model.Tipos, "TipoEvento", "TipoEventoStr"))
+              @Html.ValidationMessageFor(model => model.Tipo)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Titulo)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model=>model.Titulo)
+              @Html.ValidationMessageFor(model => model.Titulo)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Ponente)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model=>model.Ponente)
+              @Html.ValidationMessageFor(model => model.Ponente)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Fecha)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model=>model.Fecha)
+              @Html.ValidationMessageFor(model => model.Fecha)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.UrlInvitacion)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model => model.UrlInvitacion)
+              @Html.ValidationMessageFor(model => model.UrlInvitacion)
+            </div>
+
             <p>
                 <input type="submit" value="Guardar" />
             </p>
--- a/Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml	Mon Jun 06 09:12:52 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml	Mon Jun 06 14:07:12 2011 -0300
@@ -13,7 +13,39 @@
     <div>
         <fieldset>
             <legend>Datos de la propuesta:</legend>
-            @Html.EditorForModel()
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Tipo)
+            </div>
+            <div class="editor-field">
+              @Html.DropDownListFor(model => model.Tipo, new SelectList(Model.Tipos, "TipoEvento", "TipoEventoStr"))
+              @Html.ValidationMessageFor(model => model.Tipo)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Titulo)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model=>model.Titulo)
+              @Html.ValidationMessageFor(model => model.Titulo)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.Ponente)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model=>model.Ponente)
+              @Html.ValidationMessageFor(model => model.Ponente)
+            </div>
+
+            <div class="editor-label">
+              @Html.LabelFor(model=>model.UrlInvitacion)
+            </div>
+            <div class="editor-field">
+              @Html.EditorFor(model => model.UrlInvitacion)
+              @Html.ValidationMessageFor(model => model.UrlInvitacion)
+            </div>
+
             <p>
                 <input type="submit" value="Guardar" />
             </p>