Mercurial > altnet-hispano
changeset 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.
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Blog/Impl/AgendarReunionPostWriter.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Blog/Impl/AgendarReunionPostWriter.cs Tue Aug 09 01:04:27 2011 -0400 @@ -40,7 +40,7 @@ { string resourceName = getBodyResourceName(track); - var fecha = getFechaFormateada(track.Evento.Fecha); + var fecha = getFechaFormateada(track.Evento.FechaInicio); return string.Format(CultureInfo.InvariantCulture, resourceName, fecha, //Fecha y hora en GMT+0 track.Evento.Ponente.Nombre, //Nombre y apellido del ponente
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue Aug 09 01:04:27 2011 -0400 @@ -46,7 +46,7 @@ return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>(); } - public EventoResultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion) + public EventoResultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { Evento evento = GetEvento(eventoId); Persona persona = _personaRepository.Get(ponenteId); @@ -54,10 +54,11 @@ if (evento.Titulo != titulo) evento.CambiarTitulo(titulo); - if (evento.Fecha == null && fecha != null) - evento.Agendar(persona, fecha, urlInvitacion); - else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion) - evento.Actualizar(persona, fecha, urlInvitacion); + if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null) + evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); + else if (evento.FechaInicio != fechaInicio || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion || + evento.FechaTermino != fechaTermino) + evento.Actualizar(persona, fechaInicio, fechaTermino, urlInvitacion); Notify(evento); @@ -68,7 +69,7 @@ public EventoResultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion) { - return ModificarEvento(id, titulo, ponenteId, null, urlInvitacion); + return ModificarEvento(id, titulo, ponenteId, null, null, urlInvitacion); } public EventoResultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo) @@ -91,20 +92,22 @@ return new EventoResultado(true,"Evento propuesto", warnings); } - public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fecha, string urlInvitacion, TipoEvento tipo) + public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo) { - if (!fecha.HasValue) + if (!fechaInicio.HasValue) return new EventoResultado(false, "Debe indicar la fecha", null); + if (!fechaTermino.HasValue) + return new EventoResultado(false, "Debe indicar la hora y duración", null); Persona persona = _personaRepository.Get(ponenteId); if (persona == null) - return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); + return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); if (evento == null) - evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion, tipo); + evento = Evento.Agendar(titulo, persona, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); else - evento.Agendar(persona, fecha, urlInvitacion); + evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); Notify(evento);
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue Aug 09 01:04:27 2011 -0400 @@ -25,9 +25,14 @@ /// <summary> /// Fecha para la que se encuentra agendado el evento /// </summary> - public virtual DateTime? Fecha { get; private set; } + public virtual DateTime? FechaInicio { get; private set; } - /// <summary> + /// <summary> + /// Fecha de termino o finalización del evento. + /// </summary> + public virtual DateTime? FechaTermino { get; private set; } + + /// <summary> /// 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) /// </summary> public virtual string UrlInvitacion { get; private set; } @@ -118,41 +123,45 @@ 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> - /// <param name="tipo">Tipo del evento</param> - /// <returns></returns> - public static Evento Agendar(string titulo, Persona persona, DateTime fecha, string urlInvitacion, TipoEvento tipo) + /// <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="fechaInicio">Fecha de realización del evento</param> + /// <param name="fechaTermino">Fecha de termino 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 fechaInicio, DateTime fechaTermino, string urlInvitacion, TipoEvento tipo) { var evento = new Evento { Titulo = titulo, Tipo = tipo }; - evento.Agendar(persona, fecha, urlInvitacion); + evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); return evento; } - /// <summary> - /// Agenda el evento actual - /// </summary> - /// <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> - public virtual void Agendar(Persona persona, DateTime? fecha, string urlInvitacion) + /// <summary> + /// Agenda el evento actual + /// </summary> + /// <param name="persona">Ponente para el evento</param> + /// <param name="fechaInicio">Fecha de realización del evento</param> + /// <param name="fechaTermino">Fecha de termino del evento</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + public virtual void Agendar(Persona persona, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { Ponente = persona; - Fecha = fecha; + FechaInicio = fechaInicio; + FechaTermino = fechaTermino; UrlInvitacion = urlInvitacion; Estado.Promover(this, Accion.Agendar); } - public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) + public virtual void Actualizar(Persona persona, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { Ponente = persona; - Fecha = fecha; + FechaInicio = fechaInicio; + FechaTermino = fechaTermino; UrlInvitacion = urlInvitacion; AddTrack(new Track(this, Accion.Modificar));
--- a/Agendas/trunk/src/Agendas.Google.Test/GCalendarTest.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google.Test/GCalendarTest.cs Tue Aug 09 01:04:27 2011 -0400 @@ -10,13 +10,14 @@ [TestFixture] public class GCalendarTest : TestBase { - private readonly DateTime _fechaEvento = new DateTime(2011, 07, 16); + private readonly DateTime _fechaEvento = new DateTime(2011, 07, 16, 18, 0, 0, DateTimeKind.Utc); + private readonly DateTime _fechaTermino = new DateTime(2011, 07, 16, 20, 0, 0, DateTimeKind.Utc); [Test] public void CrearEventoGoogleCalendar() { var gCalendar = new GCalendarAdapter("VAN"); - var ev = Evento.Agendar("Evento Test", null, _fechaEvento, "url", TipoEvento.Cafe); + var ev = Evento.Agendar("Evento Test", null, _fechaEvento, _fechaTermino, "url", TipoEvento.Cafe); string message; var detail = new CafeGEventDetail(); detail.Generate(ev);
--- a/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs Tue Aug 09 01:04:27 2011 -0400 @@ -16,7 +16,9 @@ public void CuandoPublicarEventoDadoAccionAgendarEntoncesEventoCreado() { var adapter = new Mock<IGCalendarAdapter>(); - var message=""; + string message; + var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); adapter.Setup(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message)).Returns(true); var publicador = new GooglePublicador(adapter.Object); @@ -25,7 +27,10 @@ agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van); adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Never()); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); + + agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", + TipoEvento.Van); adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Once()); } @@ -34,11 +39,15 @@ { var adapter = new Mock<IGCalendarAdapter>(); var detail = new VanGEventDetail(); + var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); + agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", + TipoEvento.Van); var ev = DefaultEventoRepository.GetActivos()[0]; detail.Generate(ev); @@ -48,15 +57,15 @@ Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind); Assert.AreEqual(18, detail.StartEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year); Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind); Assert.AreEqual(20, detail.EndEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.EndEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.EndEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.EndEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.EndEvent.Year); Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará una VAN sobre Agile Patterns, con Alejandro Labra." + "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." + @@ -70,11 +79,15 @@ { var adapter = new Mock<IGCalendarAdapter>(); var detail = new CafeGEventDetail(); + var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.Cafe); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Cafe); + agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", + TipoEvento.Cafe); var ev = DefaultEventoRepository.GetActivos()[0]; detail.Generate(ev); @@ -84,15 +97,15 @@ Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind); Assert.AreEqual(18, detail.StartEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year); Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind); Assert.AreEqual(20, detail.EndEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.EndEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.EndEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.EndEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.EndEvent.Year); Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará un Alt.Net Cafe virtual con el tema Agile Patterns." + "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." + @@ -106,11 +119,15 @@ { var adapter = new Mock<IGCalendarAdapter>(); var detail = new EstudioGEventDetail(); + var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.GrupoEstudio); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.GrupoEstudio); + agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", + TipoEvento.GrupoEstudio); var ev = DefaultEventoRepository.GetActivos()[0]; detail.Generate(ev); @@ -120,15 +137,15 @@ Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind); Assert.AreEqual(18, detail.StartEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year); Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind); Assert.AreEqual(20, detail.EndEvent.Hour); - Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day); - Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month); - Assert.AreEqual(ev.Fecha.Value.Year, detail.EndEvent.Year); + Assert.AreEqual(ev.FechaInicio.Value.Day, detail.EndEvent.Day); + Assert.AreEqual(ev.FechaInicio.Value.Month, detail.EndEvent.Month); + Assert.AreEqual(ev.FechaInicio.Value.Year, detail.EndEvent.Year); Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará un grupo de estudio sobre Agile Patterns." + "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." + @@ -141,7 +158,9 @@ public void CuandoPublicarEventoDadoAccionCancelarEntoncesEventoEliminado() { var adapter = new Mock<IGCalendarAdapter>(); - var message = ""; + string message; + var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); adapter.Setup(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message)).Returns(true); var publicador = new GooglePublicador(adapter.Object); @@ -150,7 +169,9 @@ agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van); adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Never()); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); + agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", + TipoEvento.Van); adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Never()); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Agile Patterns");
--- a/Agendas/trunk/src/Agendas.Google/DetailsEvents/CafeGEventDetail.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google/DetailsEvents/CafeGEventDetail.cs Tue Aug 09 01:04:27 2011 -0400 @@ -23,8 +23,8 @@ { Title = "Alt.Net Café " + evento.Titulo; Location = "http://snipr.com/virtualaltnet"; - if (evento.Fecha != null) - StartEvent = new DateTime(evento.Fecha.Value.Year, evento.Fecha.Value.Month, evento.Fecha.Value.Day, + if (evento.FechaInicio != null) + StartEvent = new DateTime(evento.FechaInicio.Value.Year, evento.FechaInicio.Value.Month, evento.FechaInicio.Value.Day, 18, 0, 0, DateTimeKind.Utc); EndEvent = StartEvent.AddHours(2);
--- a/Agendas/trunk/src/Agendas.Google/DetailsEvents/EstudioGEventDetail.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google/DetailsEvents/EstudioGEventDetail.cs Tue Aug 09 01:04:27 2011 -0400 @@ -23,8 +23,8 @@ { Title = "Grupo de Estudio " + evento.Titulo; Location = "http://snipr.com/virtualaltnet"; - if (evento.Fecha != null) - StartEvent = new DateTime(evento.Fecha.Value.Year, evento.Fecha.Value.Month, evento.Fecha.Value.Day, + if (evento.FechaInicio != null) + StartEvent = new DateTime(evento.FechaInicio.Value.Year, evento.FechaInicio.Value.Month, evento.FechaInicio.Value.Day, 18, 0, 0, DateTimeKind.Utc); EndEvent = StartEvent.AddHours(2);
--- a/Agendas/trunk/src/Agendas.Google/DetailsEvents/VanGEventDetail.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google/DetailsEvents/VanGEventDetail.cs Tue Aug 09 01:04:27 2011 -0400 @@ -24,8 +24,8 @@ { Title = "VAN sobre " + evento.Titulo; Location = "http://snipr.com/virtualaltnet"; - if (evento.Fecha != null) - StartEvent = new DateTime(evento.Fecha.Value.Year, evento.Fecha.Value.Month, evento.Fecha.Value.Day, + if (evento.FechaInicio != null) + StartEvent = new DateTime(evento.FechaInicio.Value.Year, evento.FechaInicio.Value.Month, evento.FechaInicio.Value.Day, 18, 0, 0, DateTimeKind.Utc); EndEvent = StartEvent.AddHours(2);
--- a/Agendas/trunk/src/Agendas.Google/GooglePublicador.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google/GooglePublicador.cs Tue Aug 09 01:04:27 2011 -0400 @@ -53,11 +53,9 @@ private void PublicarAccionCancelar(Track track) { - string message; - var result = _adapter.DeleteEvent(track.Evento.Fecha.Value, track.Evento.Fecha.Value.AddHours(2), out message); - track.LogAdd(new TrackLog(TrackLogPropietario.Calendario, message, track.Usuario, result)); - - + string message; + var result= _adapter.DeleteEvent(track.Evento.FechaInicio.Value, track.Evento.FechaInicio.Value.AddHours(2), out message); + track.LogAdd(new TrackLog(TrackLogPropietario.Calendario, message, track.Usuario, result)); } private void PublicarAccionAgendar(Track track)
--- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Tue Aug 09 01:04:27 2011 -0400 @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // <auto-generated> -// Este código fue generado por una herramienta. -// Versión de runtime:4.0.30319.235 +// This code was generated by a tool. +// Runtime Version:4.0.30319.235 // -// Los cambios en este archivo podrÃan causar un comportamiento incorrecto y se perderán si -// se vuelve a generar el código. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ @@ -13,12 +13,12 @@ /// <summary> - /// Clase de recurso con establecimiento inflexible de tipos, para buscar cadenas traducidas, etc. + /// A strongly-typed resource class, for looking up localized strings, etc. /// </summary> - // StronglyTypedResourceBuilder generó automáticamente esta clase - // a través de una herramienta como ResGen o Visual Studio. - // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen - // con la opción /str o vuelva a generar su proyecto de VS. + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -33,7 +33,7 @@ } /// <summary> - /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase. + /// Returns the cached ResourceManager instance used by this class. /// </summary> [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ } /// <summary> - /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las - /// búsquedas de recursos mediante esta clase de recurso con establecimiento inflexible de tipos. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// </summary> [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,16 @@ } /// <summary> - /// Busca una cadena traducida similar a Duración. + /// Looks up a localized string similar to Duración. + /// </summary> + public static string Duracion { + get { + return ResourceManager.GetString("Duracion", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Duración. /// </summary> public static string DuracionReal { get { @@ -70,7 +79,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Tiempo que duró la presentación.. + /// Looks up a localized string similar to Tiempo que duró la presentación.. /// </summary> public static string DuracionRealDescription { get { @@ -79,7 +88,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Correo electrónico. + /// Looks up a localized string similar to Correo electrónico. /// </summary> public static string EMail { get { @@ -88,7 +97,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Correo electrónico de la persona para contactarse con ella. + /// Looks up a localized string similar to Correo electrónico de la persona para contactarse con ella. /// </summary> public static string EMailDescription { get { @@ -97,7 +106,7 @@ } /// <summary> - /// Busca una cadena traducida similar a debe ingresar la fecha del evento. + /// Looks up a localized string similar to debe ingresar la fecha del evento. /// </summary> public static string FechaRequired { get { @@ -106,7 +115,16 @@ } /// <summary> - /// Busca una cadena traducida similar a Nombre de la persona que identifica a esta persona entre todas. + /// Looks up a localized string similar to Hora (GMT +0). + /// </summary> + public static string Hora { + get { + return ResourceManager.GetString("Hora", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Nombre de la persona que identifica a esta persona entre todas. /// </summary> public static string NombreDescription { get { @@ -115,7 +133,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Nro. de Orden. + /// Looks up a localized string similar to Nro. de Orden. /// </summary> public static string NroOrden { get { @@ -124,7 +142,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Un número consecutivo que identifica al evento en el tiempo.. + /// Looks up a localized string similar to Un número consecutivo que identifica al evento en el tiempo.. /// </summary> public static string NroOrdenDescription { get { @@ -133,7 +151,7 @@ } /// <summary> - /// Busca una cadena traducida similar a El valor debe ser entre {1} y {2}. + /// Looks up a localized string similar to El valor debe ser entre {1} y {2}. /// </summary> public static string NroOrdenRange { get { @@ -142,7 +160,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Debe ingresar el número de orden del evento. + /// Looks up a localized string similar to Debe ingresar el número de orden del evento. /// </summary> public static string NroOrdenRequired { get { @@ -151,7 +169,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Seleccione el ponente o responsable del evento. + /// Looks up a localized string similar to Seleccione el ponente o responsable del evento. /// </summary> public static string PonenteDescription { get { @@ -160,7 +178,7 @@ } /// <summary> - /// Busca una cadena traducida similar a debe ingresar el nombre del ponente. + /// Looks up a localized string similar to debe ingresar el nombre del ponente. /// </summary> public static string PonenteRequired { get { @@ -169,7 +187,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Tipo de evento. + /// Looks up a localized string similar to Tipo de evento. /// </summary> public static string TipoEvento { get { @@ -178,7 +196,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Define las caracterÃsticas que tendrá el evento como objetivo, dinámica del evento, etc.. + /// Looks up a localized string similar to Define las caracterÃsticas que tendrá el evento como objetivo, dinámica del evento, etc.. /// </summary> public static string TipoEventoDescription { get { @@ -187,7 +205,7 @@ } /// <summary> - /// Busca una cadena traducida similar a TÃtulo. + /// Looks up a localized string similar to TÃtulo. /// </summary> public static string Titulo { get { @@ -196,7 +214,7 @@ } /// <summary> - /// Busca una cadena traducida similar a TÃtulo del evento, el mismo lo identifica entre todos los eventos. + /// Looks up a localized string similar to TÃtulo del evento, el mismo lo identifica entre todos los eventos. /// </summary> public static string TituloDescription { get { @@ -205,7 +223,7 @@ } /// <summary> - /// Busca una cadena traducida similar a debe ingresar el tÃtulo. + /// Looks up a localized string similar to debe ingresar el tÃtulo. /// </summary> public static string TituloRequired { get { @@ -214,7 +232,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Cuenta de Twitter de la persona, con esta cuenta podrá autenticarse. + /// Looks up a localized string similar to Cuenta de Twitter de la persona, con esta cuenta podrá autenticarse. /// </summary> public static string TwitterDescription { get { @@ -223,7 +241,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Url de la invitación. + /// Looks up a localized string similar to Url de la invitación. /// </summary> public static string UrlInvitacion { get { @@ -232,7 +250,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Ingrese la url de la cadena de mails donde se realizó la invitación para el evento. + /// Looks up a localized string similar to Ingrese la url de la cadena de mails donde se realizó la invitación para el evento. /// </summary> public static string UrlInvitacionDescription { get { @@ -241,7 +259,7 @@ } /// <summary> - /// Busca una cadena traducida similar a La url ingresada no es válida. + /// Looks up a localized string similar to La url ingresada no es válida. /// </summary> public static string UrlInvitacionUrl { get { @@ -250,7 +268,7 @@ } /// <summary> - /// Busca una cadena traducida similar a Url de la Wiki. + /// Looks up a localized string similar to Url de la Wiki. /// </summary> public static string UrlWiki { get { @@ -259,7 +277,7 @@ } /// <summary> - /// Busca una cadena traducida similar a La url donde se publica la presentación.. + /// Looks up a localized string similar to La url donde se publica la presentación.. /// </summary> public static string UrlWikiDescription { get { @@ -268,7 +286,7 @@ } /// <summary> - /// Busca una cadena traducida similar a La url ingresada no es válida. + /// Looks up a localized string similar to La url ingresada no es válida. /// </summary> public static string UrlWikiUrl { get {
--- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Tue Aug 09 01:04:27 2011 -0400 @@ -117,6 +117,9 @@ <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> + <data name="Duracion" xml:space="preserve"> + <value>Duración</value> + </data> <data name="DuracionReal" xml:space="preserve"> <value>Duración</value> </data> @@ -132,6 +135,9 @@ <data name="FechaRequired" xml:space="preserve"> <value>debe ingresar la fecha del evento</value> </data> + <data name="Hora" xml:space="preserve"> + <value>Hora (GMT +0)</value> + </data> <data name="NombreDescription" xml:space="preserve"> <value>Nombre de la persona que identifica a esta persona entre todas</value> </data>
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -31,8 +31,12 @@ var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); - Assert.Throws<Exception>( - () => agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, urlInvitacion, TipoEvento.Van)); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + Assert.Throws<Exception>( + () => + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van)); Assert.AreEqual(0, agenda.GetEventosActivos().Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); @@ -49,9 +53,12 @@ var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); - Assert.Throws<IdentityContextNotConfiguredException>( - () => agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van)); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + Assert.Throws<IdentityContextNotConfiguredException>( + () => + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); } @@ -65,8 +72,12 @@ var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van)); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + Assert.Throws<UsuarioNoAutenticadoException>( + () => + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + 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,8 +88,9 @@ { var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - var r = agenda.Agendar("Van para publicar", Guid.Empty, DateTime.Now, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + var r = agenda.Agendar("Van para publicar", Guid.Empty, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } @@ -94,8 +106,10 @@ var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + 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,8 +123,10 @@ var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); @@ -131,29 +147,36 @@ var publicador = new Mock<IPublicador>(); var agenda = new Agenda(publicador.Object, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + var fechaInicioVanPublicar = DateTime.Now.ToUniversalTime(); + var fechaTerminoVanPublicar = fechaInicioVanPublicar.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicioVanPublicar, + fechaTerminoVanPublicar, + urlInvitacion, TipoEvento.Van); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); var evento = repository.GetActivos().First(); Assert.AreNotEqual(Guid.Empty, evento.Id); - Assert.IsNotNull(evento.Fecha); + Assert.IsNotNull(evento.FechaInicio); - DateTime fecha = evento.Fecha.Value.AddDays(7); - agenda.ModificarEvento(evento.Id, "otro titulo", TestsHelper.GetOrCreatePonente("otro ponente"), fecha, urlInvitacion); + var fechaInicio = evento.FechaInicio.Value.AddDays(7); + var fechaTermino = fechaInicio.AddHours(2); + agenda.ModificarEvento(evento.Id, "otro titulo", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, + fechaTermino, urlInvitacion); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2)); evento = repository.GetActivos().First(); Assert.AreEqual("otro titulo", evento.Titulo); Assert.AreEqual("otro ponente", evento.Ponente.Nombre); - Assert.AreEqual(fecha, evento.Fecha); + Assert.AreEqual(fechaInicio, evento.FechaInicio); var idEventoNoExistente = new Guid("99999999999999999999999999999999"); - Assert.Throws<EventoNotFoundException>( - () => agenda.ModificarEvento(idEventoNoExistente, "algún tÃtulo", TestsHelper.GetOrCreatePonente("un ponente"), DateTime.Now, urlInvitacion)); + Assert.Throws<EventoNotFoundException>( + () => + agenda.ModificarEvento(idEventoNoExistente, "algún tÃtulo", TestsHelper.GetOrCreatePonente("un ponente"), + DateTime.Now, DateTime.Now.AddHours(2), urlInvitacion)); } [Test, Ignore("Por ahora no existe el concepto de recordar")] @@ -165,8 +188,10 @@ var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var van = agenda.GetEventosActivos().Single(v => v.Titulo == "Van para publicar"); //agenda.Recordar(van.Id); @@ -192,7 +217,10 @@ var publicado = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).First(); Assert.AreEqual(1, publicado.Tracks.Count()); - agenda.ModificarEvento(publicado.Id, "Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Today.AddDays(5), urlInvitacion); + var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.ModificarEvento(publicado.Id, "Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + fechaTermino, urlInvitacion); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); Assert.AreEqual(1, agenda.GetEventosActivos(EventoAgendadoState.GetInstance()).Count); Assert.AreEqual(1, agenda.GetEventosActivos().Count); @@ -226,7 +254,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechatermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechatermino, urlInvitacion, + TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -240,7 +271,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -257,7 +291,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -275,7 +312,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -293,7 +333,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -312,7 +355,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); @@ -366,7 +412,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); @@ -384,7 +433,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); @@ -400,7 +452,10 @@ var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.MinValue.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id);
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Tue Aug 09 01:04:27 2011 -0400 @@ -62,6 +62,8 @@ public void Update() { Guid eventoId = Create(); + var fechaInicio = new DateTime(2010, 04, 17).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); using (_requestEmulator.Invoke()) { @@ -74,7 +76,7 @@ var otroPonente = new Persona("José"); _personaRepository.Save(otroPonente); - van.Actualizar(otroPonente, new DateTime(2010, 04, 17), null); + van.Actualizar(otroPonente, fechaInicio, fechaTermino, null); _eventoRepository.Update(van); } @@ -87,7 +89,8 @@ Assert.IsNotNull(van.Ponente); Assert.AreEqual("José", van.Ponente.Nombre); Assert.AreEqual("TDD & Ejemplos", van.Titulo); - Assert.AreEqual(new DateTime(2010, 04, 17), van.Fecha); + Assert.AreEqual(new DateTime(2010, 04, 17).ToUniversalTime(), van.FechaInicio); + Assert.AreEqual(fechaTermino, van.FechaTermino); var ponente1 = _personaRepository.GetByNombre("Carlos Blé"); Assert.IsNotNull(ponente1); @@ -133,7 +136,7 @@ Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPropuestoState.GetInstance(), evento.Estado); - evento.Agendar(evento.Ponente, evento.Fecha, null); + evento.Agendar(evento.Ponente, evento.FechaInicio, evento.FechaTermino, null); } using (_requestEmulator.Invoke())
--- a/Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -31,7 +31,7 @@ var evento = DefaultEventoRepository.GetActivos().First(); Assert.AreNotEqual(Guid.Empty, evento.Id); - Assert.IsNotNull(evento.Fecha); + Assert.IsNotNull(evento.FechaInicio); Assert.IsNotNull(evento.Patrocinadores); Assert.IsTrue(evento.Patrocinadores.Any()); Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress")); @@ -98,7 +98,9 @@ private Guid CrearEvento() { - _agenda.Agendar("ADFS", TestsHelper.GetOrCreatePonente("Nelo Pauselli"), DateTime.Today.AddDays(7), null, TipoEvento.Van); + var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + _agenda.Agendar("ADFS", TestsHelper.GetOrCreatePonente("Nelo Pauselli"), fechaInicio, fechaTermino, null, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().First(); return evento.Id;
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -19,11 +19,16 @@ Assert.AreEqual(1, DefaultPersonaRepository.GetAll().Count); var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + var fechaInicioNHibernate = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); + var fechaTerminoNHibernate = fechaInicioNHibernate.AddHours(2); - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), new DateTime(2011, 2, 26), - urlInvitacion, TipoEvento.Van); - agenda.Agendar("Conform - Parte 2", TestsHelper.GetOrCreatePonente("Fabio Maulo"), new DateTime(2011, 3, 5), - urlInvitacion, TipoEvento.Van); + agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + fechaInicioNHibernate, fechaTerminoNHibernate, urlInvitacion, TipoEvento.Van); + + var fechaInicioConform = new DateTime(2011, 3, 5, 18, 0, 0, DateTimeKind.Utc); + var fechaTerminoConform = fechaInicioNHibernate.AddHours(2); + agenda.Agendar("Conform - Parte 2", TestsHelper.GetOrCreatePonente("Fabio Maulo"), fechaInicioConform, + fechaTerminoConform, urlInvitacion, TipoEvento.Van); var eventos = agenda.GetEventosActivos(); Assert.AreEqual(2, eventos.Count); @@ -48,8 +53,10 @@ var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com"); - - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), new DateTime(2011, 2, 26), urlInvitacion, TipoEvento.Van); + var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(1, agenda.GetEventosActivos().Count); @@ -72,8 +79,10 @@ var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), new DateTime(2011, 2, 26), - urlInvitacion, TipoEvento.Van); + var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(1, agenda.GetEventosActivos().Count);
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -38,7 +38,10 @@ Assert.AreEqual("otro ponente", evento.Ponente.Nombre); } - var r = agenda.Agendar("Van 2", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + var r = agenda.Agendar("Van 2", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); { IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); @@ -61,8 +64,8 @@ { var van = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).FirstOrDefault(); Assert.IsNotNull(van); - var r = agenda.Agendar(van.Titulo, TestsHelper.GetOrCreatePonente("Ponente"), null, - urlInvitacion, TipoEvento.Van); + var r = agenda.Agendar(van.Titulo, TestsHelper.GetOrCreatePonente("Ponente"), null, null, + urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } } @@ -80,9 +83,11 @@ var van = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).FirstOrDefault(); Assert.IsNotNull(van); - van.Actualizar(null, DateTime.Today.AddDays(5), urlInvitacion); - var r = agenda.Agendar(van.Titulo, Guid.Empty, van.Fecha, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + van.Actualizar(null, fechaInicio, fechaTermino, urlInvitacion); + var r = agenda.Agendar(van.Titulo, Guid.Empty, van.FechaInicio, van.FechaTermino, + urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } } @@ -138,8 +143,10 @@ var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); - var r = agenda.Agendar("Van publicada", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + var r = agenda.Agendar("Van publicada", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance());
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -17,8 +17,9 @@ var agenda = new Agenda(null, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository); - var fecha = DateTime.Now.AddDays(5); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fecha, urlInvitacion, TipoEvento.Van); + var fechaInicio = DateTime.Now.AddDays(5).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = repository.GetActivos().First(); Assert.AreEqual(1, evento.Tracks.Count()); @@ -28,7 +29,7 @@ Assert.IsNotNull(ultimo.Usuario); Assert.AreEqual("Nelo Pauselli", ultimo.Usuario.Nombre); - agenda.ModificarEvento(evento.Id, "Html 5", TestsHelper.GetOrCreatePonente("otro ponente"), fecha, urlInvitacion); + agenda.ModificarEvento(evento.Id, "Html 5", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, fechaTermino, urlInvitacion); Assert.AreEqual(2, evento.Tracks.Count()); ultimo = evento.Tracks.Last(); Assert.AreEqual(evento, ultimo.Evento); @@ -36,7 +37,7 @@ Assert.IsNotNull(ultimo.Usuario); Assert.AreEqual("Nelo Pauselli", ultimo.Usuario.Nombre); - agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", TestsHelper.GetOrCreatePonente("otro ponente"), fecha, urlInvitacion); + agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, fechaTermino, urlInvitacion); Assert.AreEqual(3, evento.Tracks.Count()); ultimo = evento.Tracks.Last(); Assert.AreEqual(evento, ultimo.Evento); @@ -51,9 +52,11 @@ var repository = DefaultEventoRepository; var agenda = new Agenda(null, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, - urlInvitacion, TipoEvento.Van); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.Now, fechaTermino, + urlInvitacion, TipoEvento.Van); var evento = repository.GetActivos().First(); Assert.AreEqual(1, evento.Tracks.Count());
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Tue Aug 09 01:04:27 2011 -0400 @@ -37,8 +37,10 @@ { using (_requestEmulator.Invoke()) { - var resultado = _agenda.Agendar("SOLID", TestsHelper.GetOrCreatePonente("Jorge"), DateTime.Today.AddDays(5), null, - TipoEvento.Van); + var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + var resultado = _agenda.Agendar("SOLID", TestsHelper.GetOrCreatePonente("Jorge"), fechaInicio, fechaTermino, null, + TipoEvento.Van); Assert.IsTrue(resultado.Succeful); }
--- a/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs Tue Aug 09 01:04:27 2011 -0400 @@ -37,6 +37,8 @@ string message; string twitt = null; + var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitt = status); var publicador = new TwitterPublicador(adapter.Object); @@ -46,7 +48,8 @@ adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Once()); - agenda.Agendar("Identity Providers", TestsHelper.GetOrCreatePonente("Nelo Pauselli"), DateTime.Today.AddDays(7), null, TipoEvento.GrupoEstudio); + agenda.Agendar("Identity Providers", TestsHelper.GetOrCreatePonente("Nelo Pauselli"), fechaInicio, fechaTermino, + null, TipoEvento.GrupoEstudio); adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Exactly(2));
--- a/Agendas/trunk/src/Agendas.Twitter/Writers/AgendarTwitterWriter.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Twitter/Writers/AgendarTwitterWriter.cs Tue Aug 09 01:04:27 2011 -0400 @@ -11,8 +11,8 @@ body += " con " + TwitterHelper.GetPonente(track.Evento.Ponente); - if (track.Evento.Fecha.HasValue) - body += " para el " + track.Evento.Fecha.Value.ToShortDateString(); + if (track.Evento.FechaInicio.HasValue) + body += " para el " + track.Evento.FechaInicio.Value.ToShortDateString(); return body; } }
--- a/Agendas/trunk/src/Agendas.Twitter/Writers/ConfirmarTwitterWriter.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Twitter/Writers/ConfirmarTwitterWriter.cs Tue Aug 09 01:04:27 2011 -0400 @@ -7,8 +7,8 @@ public string Write(Track track) { { - if (track.Evento.Fecha.HasValue) - return "Se confirma para el " + track.Evento.Fecha.Value.ToShortDateString() + " el evento " + track.Evento.Titulo + + if (track.Evento.FechaInicio.HasValue) + return "Se confirma para el " + track.Evento.FechaInicio.Value.ToShortDateString() + " el evento " + track.Evento.Titulo + " con " + TwitterHelper.GetPonente(track.Evento.Ponente); return string.Empty; }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/CustomAuthorizeAttribute.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/CustomAuthorizeAttribute.cs Tue Aug 09 01:04:27 2011 -0400 @@ -1,5 +1,4 @@ -using System.Net; -using System.Web; +using System.Web; using System.Web.Mvc; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Factories;
--- 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; + } } }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Tue Aug 09 01:04:27 2011 -0400 @@ -14,12 +14,12 @@ var model = new HistoricoIndexModel { Items = from e in agenda.GetHistorico() - orderby e.Fecha + orderby e.FechaInicio select new HistoricoDto { Id = e.Id.ToString(), Titulo = e.Titulo, - Fecha = e.Fecha.HasValue ? e.Fecha.Value.ToShortDateString() : string.Empty, + Fecha = e.FechaInicio.HasValue ? e.FechaInicio.Value.ToShortDateString() : string.Empty, Wiki = e.UrlWiki, Ponente = e.Ponente.Nombre, Numero = e.NumeroOrden.ToString(),
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Tue Aug 09 01:04:27 2011 -0400 @@ -25,7 +25,13 @@ [Required] public DateTime Fecha { get; set; } - [Url] + [Required] + public TimeSpan Hora { get; set; } + + [Required] + public TimeSpan Duracion { get; set; } + + [Url] public string UrlInvitacion { get; set; } } @@ -43,6 +49,12 @@ [Required] public DateTime? Fecha { get; set; } + [Required] + public TimeSpan? Hora { get; set; } + + [Required] + public TimeSpan? Duracion { get; set; } + [Url] public string UrlInvitacion { get; set; } } @@ -61,6 +73,12 @@ [Required] public DateTime? Fecha { get; set; } + [Required] + public TimeSpan? Hora { get; set; } + + [Required] + public TimeSpan? Duracion { get; set; } + [Url] public string UrlInvitacion { get; set; } } @@ -92,8 +110,9 @@ public string Titulo { get; set; } public string Estado { get; set; } public string Fecha { get; set; } + public string Duracion { get; set; } - public bool PuedeAgendar { get; set; } + public bool PuedeAgendar { get; set; } public bool PuedeModificar { get; set; } public bool PuedeConfirmar { get; set; } public bool PuedePublicar { get; set; }
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Mon Aug 08 22:32:12 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Tue Aug 09 01:04:27 2011 -0400 @@ -7,7 +7,8 @@ <table> <thead> <tr> - <th>Fecha</th> + <th>Fecha (GMT +0)</th> + <th>Duración</th> <th>Evento</th> <th>Estado</th> <th>Acciones</th> @@ -18,6 +19,7 @@ { <tr> <td>@item.Fecha</td> + <td>@item.Duracion</td> <td>@item.Titulo</td> <td>@item.Estado</td> <td class="buttons">