diff Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs @ 185:2d02adb79322

Se agrega fecha de termino de un Evento y se incluye la hora a la fecha de inicio. Se modifica la propiedad Fecha del Evento, renombrandola FechaInicio. En el ModelView se agrega propiedades DuraciĆ³n y Hora del Evento cuando es Modificado, Nuevo y Agendado. Las fechas ingresadas son creadas en sistema UTC Queda pendiente Agregar duraciĆ³n a Google Calendar.
author alabra
date Tue, 09 Aug 2011 01:04:27 -0400
parents 212c664db5aa
children 607384590bf8
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Mon Aug 08 22:32:12 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Tue Aug 09 01:04:27 2011 -0400
@@ -13,33 +13,42 @@
 		{
 			var agenda = AgendaFactory.GetAgenda();
 
-			var model = new EventoIndexModel
-			            	{
-			            		ProximosEventos = from e in agenda.GetEventosActivos()
-			            		                  orderby e.Fecha
-			            		                  select new EventoDto
-			            		                         	{
-			            		                         		Id = e.Id.ToString(),
-			            		                         		Titulo = e.Titulo,
-			            		                         		Fecha = e.Fecha.HasValue ? e.Fecha.Value.ToShortDateString() : string.Empty,
-																Estado = e.Estado.Descripcion,
-			            		                         		PuedeAgendar = e.Estado.PuedePromover(Accion.Agendar),
-			            		                         		PuedeModificar = e.Estado.PuedePromover(Accion.Modificar),
-			            		                         		PuedeConfirmar = e.Estado.PuedePromover(Accion.Confirmar),
-			            		                         		PuedePublicar = e.Estado.PuedePromover(Accion.Publicar),
-                                                                PuedeCancelar = e.Estado.PuedePromover(Accion.Cancelar),
-                                                                PuedeDescartar = e.Estado.PuedePromover(Accion.Descartar),
-                                                                PuedeReAgendar = e.Estado.PuedePromover(Accion.ReAgendar),
-                                                                PuedeReProponer = e.Estado.PuedePromover(Accion.ReProponer)
-			            		                         	}
-			            	};
+		    var model = new EventoIndexModel
+		                    {
+		                        ProximosEventos = from e in agenda.GetEventosActivos()
+		                                          orderby e.FechaInicio
+		                                          select new EventoDto
+		                                                     {
+		                                                         Id = e.Id.ToString(),
+		                                                         Titulo = e.Titulo,
+		                                                         Fecha =
+		                                                             e.FechaInicio.HasValue
+		                                                                 ? e.FechaInicio.Value.ToShortDateString() + " " +
+                                                                           e.FechaInicio.Value.ToShortTimeString()
+		                                                                 : string.Empty,
+		                                                         Duracion =
+		                                                             e.FechaInicio.HasValue && e.FechaTermino.HasValue
+		                                                                 ? e.FechaTermino.Value.Subtract(e.FechaInicio.Value).
+		                                                                       ToString("c")
+		                                                                 : string.Empty,
+		                                                         Estado = e.Estado.Descripcion,
+		                                                         PuedeAgendar = e.Estado.PuedePromover(Accion.Agendar),
+		                                                         PuedeModificar = e.Estado.PuedePromover(Accion.Modificar),
+		                                                         PuedeConfirmar = e.Estado.PuedePromover(Accion.Confirmar),
+		                                                         PuedePublicar = e.Estado.PuedePromover(Accion.Publicar),
+		                                                         PuedeCancelar = e.Estado.PuedePromover(Accion.Cancelar),
+		                                                         PuedeDescartar = e.Estado.PuedePromover(Accion.Descartar),
+		                                                         PuedeReAgendar = e.Estado.PuedePromover(Accion.ReAgendar),
+		                                                         PuedeReProponer = e.Estado.PuedePromover(Accion.ReProponer)
+		                                                     }
+		                    };
 			return View(model);
 		}
 
 		[CustomAuthorize(Roles = Roles.Administrador)]
 		public ActionResult Nuevo()
 		{
-		    var model = new EventoNewModel {Fecha = DateTime.Now};
+            var model = new EventoNewModel { Fecha = DateTime.Now, Duracion = new TimeSpan(2, 0, 0), Hora = new TimeSpan(18, 0, 0) };
 		    return View("Defaulteditor", model);
 		}
 
@@ -47,11 +56,13 @@
 		[CustomAuthorize(Roles = Roles.Administrador)]
 		public ActionResult Nuevo(EventoNewModel model)
 		{
-			return
-				GenericAction(
-					(agenda, m) => agenda.Agendar(m.Titulo, m.Ponente, m.Fecha, m.UrlInvitacion, (TipoEvento) m.TipoEvento),
-					m => View("Defaulteditor", m),
-					model);
+		    return
+		        GenericAction(
+		            (agenda, m) => agenda.Agendar(m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora),
+		                                          GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion,
+		                                          (TipoEvento) m.TipoEvento),
+		            m => View("Defaulteditor", m),
+		            model);
 		}
 
     	[CustomAuthorize(Roles = Roles.Administrador)]
@@ -103,7 +114,9 @@
 				Id = id,
 				Titulo = evento.Titulo,
 				Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty,
-				Fecha = evento.Fecha,
+				Fecha = evento.FechaInicio,
+                Hora = evento.FechaInicio != null ? evento.FechaInicio.Value.TimeOfDay : (TimeSpan?)null,
+                Duracion = evento.FechaInicio!=null && evento.FechaTermino!=null ? evento.FechaTermino.Value.Subtract(evento.FechaInicio.Value) : (TimeSpan?) null,
 				UrlInvitacion = evento.UrlInvitacion
 			};
             return View("Defaulteditor", model);
@@ -113,11 +126,13 @@
 		[CustomAuthorize(Roles = Roles.Administrador)]
 		public ActionResult Modificar(EventoEditModel model)
 		{
-			return
-			GenericAction(
-				(agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion),
-				m => View("Defaulteditor", m),
-				model);
+		    return
+		        GenericAction(
+		            (agenda, m) =>
+		            agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora),
+		                                   GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion),
+		            m => View("Defaulteditor", m),
+		            model);
 		}
 
 		[CustomAuthorize(Roles = Roles.Administrador)]
@@ -131,7 +146,9 @@
 				Id = id,
 				Titulo = evento.Titulo,
 				Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty,
-				Fecha = evento.Fecha,
+				Fecha = evento.FechaInicio,
+                Hora = evento.FechaInicio != null ? evento.FechaInicio.Value.TimeOfDay : (TimeSpan?)null,
+                Duracion = evento.FechaInicio != null && evento.FechaTermino != null ? evento.FechaTermino.Value.Subtract(evento.FechaInicio.Value) : (TimeSpan?)null,
 				UrlInvitacion = evento.UrlInvitacion
 			};
             return View("Defaulteditor", model);
@@ -141,11 +158,13 @@
 		[CustomAuthorize(Roles = Roles.Administrador)]
 		public ActionResult Agendar(EventoAgendarModel model)
 		{
-			return
-				GenericAction(
-					(agenda, m) => agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, m.Fecha.Value, m.UrlInvitacion),
-					m => View("Defaulteditor", m),
-					model);
+		    return
+		        GenericAction(
+		            (agenda, m) =>
+		            agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora),
+		                                   GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion),
+		            m => View("Defaulteditor", m),
+		            model);
 		}
 
 		[CustomAuthorize(Roles = Roles.Administrador)]
@@ -225,6 +244,20 @@
 			return actionresultOnFail.Invoke(model);
 		}
 
+        private DateTime? GenerarFechaInicio(DateTime? fecha, TimeSpan? hora)
+        {
+            return fecha.HasValue && hora.HasValue
+                       ? new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, hora.Value.Hours,
+                                      hora.Value.Minutes, hora.Value.Seconds, DateTimeKind.Utc)
+                       : (DateTime?) null;
+        }
+        private DateTime? GenerarFechaTermino(DateTime? fecha, TimeSpan? hora, TimeSpan? duracion)
+        {
+            return fecha.HasValue && hora.HasValue && duracion.HasValue
+                       ? new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, hora.Value.Hours,
+                                      hora.Value.Minutes, hora.Value.Seconds, DateTimeKind.Utc).Add(duracion.Value)
+                       : (DateTime?) null;
+        }
 
 	}
 }