Mercurial > altnet-hispano
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; + } } }