Mercurial > altnet-hispano
changeset 121:683cc27450ce
Merge
author | Jorge@Jorge-PC |
---|---|
date | Fri, 24 Jun 2011 21:19:42 -0300 |
parents | c3573defd18f (current diff) 8fa58a79656a (diff) |
children | 17531db40d4e |
files | Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Agendas/trunk/src/Agendas.Web/Views/Evento/New.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/Edit.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml |
diffstat | 46 files changed, 915 insertions(+), 660 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Jun 24 21:19:42 2011 -0300 @@ -27,14 +27,19 @@ return evento; } - public IList<Evento> GetEventosPropuestos() + public IList<Evento> GetEventosActivos(EventoState state) { - return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); + return _eventosRepository.GetByState(state) ?? new List<Evento>(); } - public IList<Evento> GetEventosAgendados() + public IList<Evento> GetEventosActivos() { - return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); + return _eventosRepository.GetActivos() ?? new List<Evento>(); + } + + public IEnumerable<Evento> GetHistorico() + { + return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List<Evento>(); } public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
--- a/Agendas/trunk/src/Agendas.Domain/Cuenta.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Cuenta.cs Fri Jun 24 21:19:42 2011 -0300 @@ -15,5 +15,28 @@ LogonName = logonName; IdentityProvider = identityProvider; } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (Cuenta)) return false; + return Equals((Cuenta) obj); + } + + public virtual bool Equals(Cuenta other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(other.LogonName, LogonName) && Equals(other.IdentityProvider, IdentityProvider); + } + + public override int GetHashCode() + { + unchecked + { + return ((LogonName != null ? LogonName.GetHashCode() : 0)*397) ^ IdentityProvider.GetHashCode(); + } + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoAgendadoState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,4 +1,5 @@ -using AltNetHispano.Agendas.Domain.Exceptions; +using System; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -33,5 +34,10 @@ { return Descripcion; } + + public override bool PuedePromover(Accion accion) + { + return accion == Accion.Confirmar; + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoConfirmadoState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,4 +1,5 @@ -using AltNetHispano.Agendas.Domain.Exceptions; +using System; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -33,5 +34,10 @@ { return Descripcion; } + + public override bool PuedePromover(Accion accion) + { + return accion == Accion.Publicar; + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoNullState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoNullState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,4 +1,5 @@ -using AltNetHispano.Agendas.Domain.Exceptions; +using System; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -37,5 +38,10 @@ { return Descripcion; } + + public override bool PuedePromover(Accion accion) + { + return accion == Accion.Proponer || accion == Accion.Agendar; + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoPropuestoState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,4 +1,5 @@ -using AltNetHispano.Agendas.Domain.Exceptions; +using System; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -33,5 +34,10 @@ { return Descripcion; } + + public override bool PuedePromover(Accion accion) + { + return accion == Accion.Agendar; + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoPublicadoState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,4 +1,5 @@ -using AltNetHispano.Agendas.Domain.Exceptions; +using System; +using AltNetHispano.Agendas.Domain.Exceptions; namespace AltNetHispano.Agendas.Domain { @@ -25,5 +26,10 @@ { return Descripcion; } + + public override bool PuedePromover(Accion accion) + { + return false; + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/EventoState.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/EventoState.cs Fri Jun 24 21:19:42 2011 -0300 @@ -10,5 +10,7 @@ public abstract void Promover(Evento evento, Accion accion); public abstract string GetDescripcion(); + + public abstract bool PuedePromover(Accion accion); } }
--- a/Agendas/trunk/src/Agendas.Domain/IdentityContext.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/IdentityContext.cs Fri Jun 24 21:19:42 2011 -0300 @@ -27,15 +27,21 @@ public static string GetUserName() { - string username = Current.GetUserName(); - if (string.IsNullOrWhiteSpace(username)) - throw new UsuarioNoAutenticadoException(); - return username; + return Current.GetUserName(); + } + + public static bool IsAuthenticated() + { + return !string.IsNullOrWhiteSpace(GetUserName()); } public static Persona GetUsuario() { - var identification = new Identification(GetUserName()); + var userName = GetUserName(); + if (string.IsNullOrWhiteSpace(userName)) + throw new UsuarioNoAutenticadoException(); + + var identification = new Identification(userName); var cuenta = _personaRepository.GetCuenta(identification.IdentityProvider, identification.LogonName); return cuenta != null ? cuenta.Persona : null;
--- a/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs Fri Jun 24 21:19:42 2011 -0300 @@ -7,8 +7,8 @@ { void Delete(Evento evento); Evento Get(Guid vanId); - IList<Evento> GetEventosConFecha(); - IList<Evento> GetEventosSinFecha(); + IList<Evento> GetByState(EventoState state); + IList<Evento> GetActivos(); Evento GetPropuestaByTitulo(string titulo); void Save(Evento evento); void Update(Evento evento);
--- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Fri Jun 24 21:19:42 2011 -0300 @@ -19,12 +19,12 @@ return cuenta != null; } - public bool Validate(IdentityProviderEnum identityProvider, string username, string nombre) + public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) { var cuenta = _personaRepository.GetCuenta(identityProvider, username); if (cuenta==null) { - var persona=new Persona(nombre); + var persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); persona.AddCuenta(new Cuenta(identityProvider, username)); if (identityProvider == IdentityProviderEnum.Twitter)
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Fri Jun 24 21:19:42 2011 -0300 @@ -13,6 +13,11 @@ //nada que hacer en este método para este repositorio } + public IList<Evento> GetByState(EventoState state) + { + return Objects.Values.Where(e => e.Estado == state.GetDescripcion()).ToList(); + } + public void Delete(Evento evento) { Objects.Remove(evento.Id); @@ -24,14 +29,12 @@ return Objects.TryGetValue(vanId, out evento) ? evento : null; } - public IList<Evento> GetEventosSinFecha() + public IList<Evento> GetActivos() { - return Objects.Values.Where(e => e.Fecha == null).ToList(); - } - - public IList<Evento> GetEventosConFecha() - { - return Objects.Values.Where(e => e.Fecha != null).ToList(); + return + Objects.Values.Where( + e => + e.Estado != EventoPublicadoState.GetInstance().GetDescripcion()).ToList(); } public Evento GetPropuestaByTitulo(string titulo)
--- a/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs Fri Jun 24 21:19:42 2011 -0300 @@ -22,14 +22,12 @@ return Session.Get<Evento>(vanId); } - public IList<Evento> GetEventosConFecha() + public IList<Evento> GetActivos() { - return Session.QueryOver<Evento>().Where(e => e.Fecha != null).List(); - } - - public IList<Evento> GetEventosSinFecha() - { - return Session.QueryOver<Evento>().Where(e => e.Fecha == null).List(); + return + Session.QueryOver<Evento>().Where( + e => + e.Estado != EventoPublicadoState.GetInstance().GetDescripcion()).List(); } public Evento GetPropuestaByTitulo(string titulo) @@ -41,5 +39,10 @@ { //No es necesario implementarlo } + + public IList<Evento> GetByState(EventoState state) + { + return Session.QueryOver<Evento>().Where(e => e.Estado == state.GetDescripcion()).List(); + } } }
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -31,8 +31,9 @@ var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository); - Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van)); - Assert.AreEqual(0, agenda.GetEventosAgendados().Count); + Assert.Throws<Exception>( + () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van)); + Assert.AreEqual(0, agenda.GetEventosActivos().Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); @@ -50,7 +51,7 @@ Assert.Throws<IdentityContextNotConfiguredException>( () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van)); + urlInvitacion, TipoEvento.Van)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); } @@ -65,7 +66,7 @@ var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository); Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van)); + 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 +78,7 @@ var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } @@ -90,11 +91,11 @@ var repository = new Mock<IEventoRepository>(); - var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), repository.Object, DefaultPersonaRepository); agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van); + 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,17 +110,17 @@ var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository); agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); - Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); + Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); - var eventos = agenda.GetEventosAgendados(); + var eventos = agenda.GetEventosActivos(); Assert.AreEqual(1, eventos.Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); var evento = eventos[0]; - + Assert.IsNotNull(evento.Ponente); } @@ -132,11 +133,11 @@ var agenda = new Agenda(publicador.Object, repository, DefaultPersonaRepository); agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); - var evento = repository.GetEventosConFecha().First(); + var evento = repository.GetActivos().First(); Assert.AreNotEqual(Guid.Empty, evento.Id); Assert.IsNotNull(evento.Fecha); @@ -145,7 +146,7 @@ publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2)); - evento = repository.GetEventosConFecha().First(); + evento = repository.GetActivos().First(); Assert.AreEqual("otro titulo", evento.Titulo); Assert.AreEqual("otro ponente", evento.Ponente.Nombre); Assert.AreEqual(fecha, evento.Fecha); @@ -161,13 +162,13 @@ var publicador1 = new Mock<IPublicador>(); var publicador2 = new Mock<IPublicador>(); - var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), DefaultEventoRepository, DefaultPersonaRepository); agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); - var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar"); + var van = agenda.GetEventosActivos().Single(v => v.Titulo == "Van para publicar"); //agenda.Recordar(van.Id); publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); @@ -184,18 +185,19 @@ var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - Assert.AreEqual(1, agenda.GetEventosPropuestos().Count); - Assert.AreEqual(0, agenda.GetEventosAgendados().Count); + agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); + Assert.AreEqual(1, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); + Assert.AreEqual(1, agenda.GetEventosActivos().Count); - var publicado = agenda.GetEventosPropuestos().First(); + var publicado = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).First(); Assert.AreEqual(1, publicado.Tracks.Count()); agenda.ModificarEvento(publicado.Id, "Html 5", "jjmontes", DateTime.Today.AddDays(5), urlInvitacion); - Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); - Assert.AreEqual(1, agenda.GetEventosAgendados().Count); + Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); + Assert.AreEqual(1, agenda.GetEventosActivos(EventoAgendadoState.GetInstance()).Count); + Assert.AreEqual(1, agenda.GetEventosActivos().Count); - var agendado = agenda.GetEventosAgendados().First(); + var agendado = agenda.GetEventosActivos().First(); Assert.AreSame(publicado, agendado); Assert.AreEqual(2, agendado.Tracks.Count()); @@ -203,115 +205,118 @@ Assert.IsNotNull(agendado.Tracks.Where(t => t.Accion == Accion.Agendar).SingleOrDefault()); } - [Test] - public void Al_proponer_un_evento_debe_quedar_con_estado_EventoPropuestoState_y_debe_generar_el_track_correspondiente() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + public void Al_proponer_un_evento_debe_quedar_con_estado_EventoPropuestoState_y_debe_generar_el_track_correspondiente() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5"); + var evento = + DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); - Assert.IsInstanceOf(typeof(EventoPropuestoState), evento.GetEstado()); - Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Proponer) == 1); - } + Assert.IsInstanceOf(typeof(EventoPropuestoState), evento.GetEstado()); + Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Proponer) == 1); + } - [Test] - public void Al_agendar_un_evento_debe_quedar_con_estado_EventoAgendadoState_y_debe_generar_el_track_correspondiente() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + public void Al_agendar_un_evento_debe_quedar_con_estado_EventoAgendadoState_y_debe_generar_el_track_correspondiente() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); - var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5"); + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); - Assert.IsInstanceOf(typeof(EventoAgendadoState), evento.GetEstado()); - Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Agendar) == 1); - } + Assert.IsInstanceOf(typeof(EventoAgendadoState), evento.GetEstado()); + Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Agendar) == 1); + } - [Test] - public void Al_confirmar_un_evento_debe_quedar_con_estado_EventoConfirmadoState_y_debe_generar_el_track_correspondiente() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + public void Al_confirmar_un_evento_debe_quedar_con_estado_EventoConfirmadoState_y_debe_generar_el_track_correspondiente() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); - var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5"); + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); - agenda.Confirmar(evento.Id); + agenda.Confirmar(evento.Id); - Assert.IsInstanceOf(typeof(EventoConfirmadoState), evento.GetEstado()); - Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Confirmar) == 1); - } + Assert.IsInstanceOf(typeof(EventoConfirmadoState), evento.GetEstado()); + Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Confirmar) == 1); + } - [Test] - public void Al_publicar_un_evento_debe_quedar_con_estado_EventoPublicadoState_y_debe_generar_el_track_correspondiente() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + public void Al_publicar_un_evento_debe_quedar_con_estado_EventoPublicadoState_y_debe_generar_el_track_correspondiente() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); - var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5"); + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); - agenda.Confirmar(evento.Id); - agenda.Publicar(evento.Id, 0, string.Empty); + agenda.Confirmar(evento.Id); + agenda.Publicar(evento.Id, 0, string.Empty); - Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.GetEstado()); - Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1); - } + Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.GetEstado()); + Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1); + } - [Test] - public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_y_la_url_de_la_wiki() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_y_la_url_de_la_wiki() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van); - var evento = DefaultEventoRepository.GetEventosConFecha().Single(e => e.Titulo == "Html 5"); - agenda.Confirmar(evento.Id); + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); + agenda.Confirmar(evento.Id); - const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; - agenda.Publicar(evento.Id, 71, urlWiki); + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + agenda.Publicar(evento.Id, 71, urlWiki); - Assert.AreEqual(71, evento.NumeroOrden); - Assert.AreEqual(urlWiki, evento.UrlWiki); - } + Assert.AreEqual(71, evento.NumeroOrden); + Assert.AreEqual(urlWiki, evento.UrlWiki); + } - [Test] - [ExpectedException(typeof(AccionNoSoportadaException))] - public void Al_confirmar_sin_agendar_debe_lanzarse_excepcion() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + [ExpectedException(typeof(AccionNoSoportadaException))] + public void Al_confirmar_sin_agendar_debe_lanzarse_excepcion() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - - var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5"); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - Assert.IsFalse(evento.Estado.GetType() == typeof(EventoAgendadoState)); + var evento = + DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); - agenda.Confirmar(evento.Id); - } + Assert.IsFalse(evento.Estado.GetType() == typeof(EventoAgendadoState)); + + agenda.Confirmar(evento.Id); + } - [Test] - [ExpectedException(typeof(AccionNoSoportadaException))] - public void Al_publicar_sin_confirmar_debe_lanzarse_excepcion() - { - var publicador1 = new Mock<IPublicador>(); + [Test] + [ExpectedException(typeof(AccionNoSoportadaException))] + public void Al_publicar_sin_confirmar_debe_lanzarse_excepcion() + { + var publicador1 = new Mock<IPublicador>(); - var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - - var evento = DefaultEventoRepository.GetEventosSinFecha().Single(e => e.Titulo == "Html 5"); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); + agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van); - Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); + var evento = + DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); - agenda.Publicar(evento.Id, 0, string.Empty); - } + Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); + + agenda.Publicar(evento.Id, 0, string.Empty); + } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -19,7 +19,7 @@ var personaService = new PersonaService(personaRepository.Object); - Assert.IsTrue(personaService.Validate(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); personaRepository.Verify(r=>r.Save(It.IsAny<Persona>()), Times.Once()); Assert.IsNotNull(persona); Assert.AreEqual(1, persona.Cuentas.Count()); @@ -32,7 +32,7 @@ personaRepository.Setup(r => r.GetCuenta(IdentityProviderEnum.Twitter, "nelopauselli")).Returns(cuenta); Assert.AreEqual(1, persona.Cuentas.Count()); - Assert.IsTrue(personaService.Validate(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "nelopauselli", "Nelo Pauselli")); Assert.AreEqual(1, persona.Cuentas.Count()); }
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -25,7 +25,7 @@ agenda.Agendar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5), urlInvitacion, TipoEvento.Van); - var eventos = agenda.GetEventosAgendados(); + var eventos = agenda.GetEventosActivos(); Assert.AreEqual(2, eventos.Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2)); @@ -51,7 +51,7 @@ agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion, TipoEvento.Van); - Assert.AreEqual(1, agenda.GetEventosAgendados().Count); + Assert.AreEqual(1, agenda.GetEventosActivos().Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); @@ -75,7 +75,7 @@ agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion, TipoEvento.Van); - Assert.AreEqual(1, agenda.GetEventosAgendados().Count); + Assert.AreEqual(1, agenda.GetEventosActivos().Count); publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); @@ -95,7 +95,7 @@ agenda.Proponer(titulo, "Fabio", urlInvitacion, TipoEvento.Van); Persona persona; { - var eventos = agenda.GetEventosPropuestos(); + var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; @@ -107,7 +107,7 @@ agenda.ModificarPropuesta(eventoId, titulo, null, urlInvitacion); { - var eventos = agenda.GetEventosPropuestos(); + var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; @@ -125,7 +125,7 @@ agenda.Proponer(titulo, "Fabio", urlInvitacion, TipoEvento.Van); { - var eventos = agenda.GetEventosPropuestos(); + var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; @@ -136,7 +136,7 @@ agenda.ModificarPropuesta(eventoId, titulo, "José", urlInvitacion); { - var eventos = agenda.GetEventosPropuestos(); + var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0];
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -19,18 +19,18 @@ { var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Van", null, urlInvitacion, TipoEvento.Van); + agenda.Proponer("Van", null, urlInvitacion, TipoEvento.Van); { - IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); + IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); + IList<Evento> eventosAgendados = agenda.GetEventosActivos(EventoAgendadoState.GetInstance()); Assert.AreEqual(1, eventosPropuestos.Count); - Assert.AreEqual(0, eventosPublicados.Count); + Assert.AreEqual(0, eventosAgendados.Count); var evento = eventosPropuestos.FirstOrDefault(); agenda.ModificarPropuesta(evento.Id, "Van 2", "otro ponente", urlInvitacion); - eventosPropuestos = agenda.GetEventosPropuestos(); + eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventosPropuestos.Count); evento = eventosPropuestos.FirstOrDefault(); @@ -38,14 +38,14 @@ Assert.AreEqual("otro ponente", evento.Ponente.Nombre); } - var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van); + var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); { - IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); + IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); + IList<Evento> eventosAgendados = agenda.GetEventosActivos(EventoAgendadoState.GetInstance()); Assert.AreEqual(0, eventosPropuestos.Count); - Assert.AreEqual(1, eventosPublicados.Count); + Assert.AreEqual(1, eventosAgendados.Count); } } @@ -55,14 +55,14 @@ var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); { - agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); + agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); } { - var van = agenda.GetEventosPropuestos().FirstOrDefault(); + var van = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).FirstOrDefault(); Assert.IsNotNull(van); var r = agenda.Agendar(van.Titulo, "Ponente", null, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } } @@ -73,16 +73,16 @@ var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); { - agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); + agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); } { - var van = agenda.GetEventosPropuestos().FirstOrDefault(); + var van = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).FirstOrDefault(); Assert.IsNotNull(van); van.Actualizar(null, DateTime.Today.AddDays(5), urlInvitacion); var r = agenda.Agendar(van.Titulo, string.Empty, van.Fecha, - urlInvitacion, TipoEvento.Van); + 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, TipoEvento.Van); + 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,16 +117,16 @@ SetCurrentUser(null, null); - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null, urlInvitacion, TipoEvento.Van)); + 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, TipoEvento.Van); + agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); - IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); + IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.IsNotNull(eventosPropuestos); Assert.AreEqual(1, eventosPropuestos.Count); Assert.AreEqual("Van propuesta", eventosPropuestos[0].Titulo); @@ -137,16 +137,16 @@ { var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); + agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now, - urlInvitacion, TipoEvento.Van); + urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); - IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); + IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); + IList<Evento> eventosAgendados = agenda.GetEventosActivos(EventoAgendadoState.GetInstance()); Assert.AreEqual(1, eventosPropuestos.Count); - Assert.AreEqual(1, eventosPublicados.Count); + Assert.AreEqual(1, eventosAgendados.Count); } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/TestBase.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TestBase.cs Fri Jun 24 21:19:42 2011 -0300 @@ -43,8 +43,11 @@ seguridad.Setup(s => s.GetUserName()).Returns(logonName); IPersonaRepository personaRepository = new PersonaRepository(); - var service = new PersonaService(personaRepository); - service.Validate(identityProvider, username, nombre); + var persona = new Persona(nombre); + persona.AddCuenta(new Cuenta(identityProvider, username)); + persona.Twitter = username; + + personaRepository.Save(persona); IdentityContext.Init(seguridad.Object, personaRepository);
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -19,7 +19,7 @@ var fecha = DateTime.Now.AddDays(5); agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion, TipoEvento.Van); - var evento = repository.GetEventosConFecha().First(); + var evento = repository.GetActivos().First(); Assert.AreEqual(1, evento.Tracks.Count()); var ultimo = evento.Tracks.Last(); @@ -54,7 +54,7 @@ agenda.Agendar("Html 5", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van); - var evento = repository.GetEventosConFecha().First(); + var evento = repository.GetActivos().First(); Assert.AreEqual(1, evento.Tracks.Count()); Assert.AreEqual(Accion.Agendar, evento.Tracks.Last().Accion);
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Jun 24 21:19:42 2011 -0300 @@ -43,7 +43,7 @@ _workflow.Agendar(); - var evento = DefaultEventoRepository.GetEventosConFecha().SingleOrDefault(); + var evento = DefaultEventoRepository.GetActivos().SingleOrDefault(); Assert.IsNotNull(evento); _workflow.Confirmar(evento.Id); @@ -58,7 +58,7 @@ _workflow.Agendar(); - var evento = DefaultEventoRepository.GetEventosConFecha().SingleOrDefault(); + var evento = DefaultEventoRepository.GetActivos().SingleOrDefault(); Assert.IsNotNull(evento); _workflow.Confirmar(evento.Id);
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Jun 24 21:19:42 2011 -0300 @@ -62,10 +62,11 @@ </ItemGroup> <ItemGroup> <Compile Include="Controllers\AccountController.cs" /> + <Compile Include="Controllers\ControllerMessageExtensions.cs" /> <Compile Include="Controllers\EventoController.cs" /> + <Compile Include="Controllers\HistoricoController.cs" /> <Compile Include="Controllers\HomeController.cs" /> <Compile Include="Controllers\PerfilController.cs" /> - <Compile Include="Controllers\PropuestaController.cs" /> <Compile Include="Global.asax.cs"> <DependentUpon>Global.asax</DependentUpon> </Compile> @@ -77,6 +78,7 @@ <Compile Include="Models\AccountModels.cs" /> <Compile Include="Models\EventoModel.cs" /> <Compile Include="Models\EventoModelHelper.cs" /> + <Compile Include="Models\HistoricoModel.cs" /> <Compile Include="Models\PerfilModel.cs" /> <Compile Include="Models\PropuestaModel.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> @@ -86,6 +88,7 @@ <Compile Include="Services\IMembershipService.cs" /> </ItemGroup> <ItemGroup> + <Content Include="Content\AltNetHispanoVans.css" /> <Content Include="Content\altnetlogo.png" /> <Content Include="Content\question.jpg" /> <Content Include="Content\twitter\sign-in-with-twitter-d-sm.png" /> @@ -154,14 +157,12 @@ <Folder Include="App_Data\" /> </ItemGroup> <ItemGroup> - <Content Include="Views\Evento\Edit.cshtml" /> + <Content Include="Views\Evento\Modificar.cshtml" /> <Content Include="Views\Evento\Index.cshtml" /> - <Content Include="Views\Evento\New.cshtml" /> + <Content Include="Views\Evento\Nuevo.cshtml" /> </ItemGroup> <ItemGroup> - <Content Include="Views\Propuesta\New.cshtml" /> - <Content Include="Views\Propuesta\Edit.cshtml" /> - <Content Include="Views\Propuesta\Index.cshtml" /> + <Content Include="Views\Evento\Proponer.cshtml" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Agendas.Domain\Agendas.Domain.csproj"> @@ -199,6 +200,15 @@ <ItemGroup> <Content Include="Views\Perfil\AddBuiltInAccount.cshtml" /> </ItemGroup> + <ItemGroup> + <Content Include="Views\Shared\_Messages.cshtml" /> + </ItemGroup> + <ItemGroup> + <Content Include="Views\Evento\Agendar.cshtml" /> + </ItemGroup> + <ItemGroup> + <Content Include="Views\Historico\Index.cshtml" /> + </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Content/AltNetHispanoVans.css Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,27 @@ +.errorbox { + padding: 5px 5px 5px 5px; + width: 90%; + text-align: center; + overflow: auto; + margin: 5px 25px 5px 25px; +} + +.warningbox { + padding: 5px 5px 5px 5px; + width: 90%; + text-align: center; + overflow: auto; + margin: 5px 25px 5px 25px; + +} + +.notificationbox { + padding: 5px 5px 5px 5px; + width: 90%; + text-align: center; + overflow: auto; + margin: 5px 25px 5px 25px; + border: 1px solid #1c7c13; + background-color: #d2f7cf; + color: #363636; +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/AccountController.cs Fri Jun 24 21:19:42 2011 -0300 @@ -1,5 +1,4 @@ -using System; -using System.Web.Mvc; +using System.Web.Mvc; using System.Web.Routing; using System.Web.Security; using AltNetHispano.Agendas.Domain; @@ -66,26 +65,24 @@ var url = Request.Url.Scheme + "://" + Request.Url.Host + (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; - Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); + return Redirect(oAuth.AuthorizationLinkGet(url).ToString()); } - else + + var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); + if (response.Length > 0) { - var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); - if (response.Length > 0) - { - var username = OAuthTwitter.GetResponseContent(response, "screen_name"); - var nombre = OAuthTwitter.GetResponseContent(response, "name"); + var username = OAuthTwitter.GetResponseContent(response, "screen_name"); + var nombre = OAuthTwitter.GetResponseContent(response, "name"); - var personaService = AgendaFactory.GetPersonaService(); - if (personaService.Validate(IdentityProviderEnum.Twitter, username, nombre)) - { - FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.Twitter]+username, false); - return RedirectToAction("Index", "Home"); - } - ModelState.AddModelError("", "The user name or password provided is incorrect."); - } + var personaService = AgendaFactory.GetPersonaService(); + personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, username, nombre); + + FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.Twitter]+username, false); + return RedirectToAction("Index", "Home"); } + ModelState.AddModelError("", "The user name or password provided is incorrect."); + return RedirectToAction("LogOn"); } @@ -111,7 +108,7 @@ } [HttpPost] - public ActionResult Register(RegisterModel model) + public ActionResult Register(RegisterModel model, string returnUrl) { if (ModelState.IsValid) { @@ -121,9 +118,11 @@ if (createStatus == MembershipCreateStatus.Success) { var personaService = AgendaFactory.GetPersonaService(); - if (personaService.Validate(IdentityProviderEnum.BuiltIn, model.UserName, model.Nombre)) + if (personaService.CreateIfNotExist(IdentityProviderEnum.BuiltIn, model.UserName, model.Nombre)) { FormsService.SignIn(Identification.Map[(int)IdentityProviderEnum.BuiltIn] + model.UserName, false); + if (Url.IsLocalUrl(returnUrl)) + return Redirect(returnUrl); return RedirectToAction("Index", "Home"); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/ControllerMessageExtensions.cs Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,45 @@ +using System; +using System.Web.Mvc; + +namespace AltNetHispano.Agendas.Web.Controllers +{ + public static class ControllerMessageExtensions + { + public static void AddError(this Controller controller, string mensaje) + { + AddMessage(controller, "error", mensaje); + } + + public static void AddNotification(this Controller controller, string mensaje) + { + AddMessage(controller, "notification", mensaje); + } + + public static void AddWarning(this Controller controller, string mensaje) + { + AddMessage(controller, "warning", mensaje); + } + + #region protected and private members + + private static void AddMessage(Controller controller, string key, string mensaje) + { + if (controller == null) throw new ArgumentNullException("controller"); + if (key == null) throw new ArgumentNullException("key"); + if (mensaje == null) throw new ArgumentNullException("mensaje"); + + if (mensaje == string.Empty) return; + + var mensajes = mensaje.Contains("\n") ? mensaje.Replace("\r", string.Empty).Split('\n') : new[] {mensaje}; + + foreach (var m in mensajes) + { + if (controller.TempData.ContainsKey(key)) + controller.TempData[key] += "<br />"; + controller.TempData[key] += m; + } + } + + #endregion + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Jun 24 21:19:42 2011 -0300 @@ -7,76 +7,170 @@ namespace AltNetHispano.Agendas.Web.Controllers { - public class EventoController : Controller - { - public ActionResult Index() - { - var agenda = AgendaFactory.GetAgenda(); + public class EventoController : Controller + { + public ActionResult Index() + { + 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.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, + PuedeAgendar = e.GetEstado().PuedePromover(Accion.Agendar), + PuedeModificar = e.GetEstado().PuedePromover(Accion.Modificar), + PuedeConfirmar = e.GetEstado().PuedePromover(Accion.Confirmar), + PuedePublicar = e.GetEstado().PuedePromover(Accion.Publicar) + } + }; + return View(model); + } + + [Authorize] + public ActionResult Nuevo() + { + return View(new EventoNewModel()); + } - return View(model); - } + [HttpPost] + [Authorize] + public ActionResult Nuevo(EventoNewModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha, + model.UrlInvitacion, (TipoEvento)model.Tipo); + if (r.Succeful) + { + this.AddNotification("Datos guardados"); + return RedirectToAction("Index"); + } + ModelState.AddModelError("error", r.ToString()); + } + return View(model); + } - [Authorize] - public ActionResult New() - { - return View(new EventoNewModel()); - } + [Authorize] + public ActionResult Confirmar(string id) + { + var agenda = AgendaFactory.GetAgenda(); + agenda.Confirmar(new Guid(id)); + + this.AddNotification("Evento confirmado"); + return RedirectToAction("Index"); + } - [HttpPost] - [Authorize] - public ActionResult New(EventoNewModel model) - { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); + [Authorize] + public ActionResult Publicar(string id) + { + var agenda = AgendaFactory.GetAgenda(); + agenda.Publicar(new Guid(id), 0, string.Empty); + + this.AddNotification("Evento publicado"); + return RedirectToAction("Index"); + } + + [Authorize] + public ActionResult Modificar(string id) + { + var agenda = AgendaFactory.GetAgenda(); + var evento = agenda.GetEvento(new Guid(id)); - 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); - } + 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); + } + + [HttpPost] + [Authorize] + public ActionResult Modificar(EventoEditModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); - [Authorize] - public ActionResult Edit(string id) - { - var agenda = AgendaFactory.GetAgenda(); - var evento = agenda.GetEvento(new Guid(id)); + var r = agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value, model.UrlInvitacion); + if (r.Succeful) + { + this.AddNotification("datos guardados"); + return RedirectToAction("Index"); + } + ModelState.AddModelError("error", r.ToString()); + } + return View(model); + } + + [Authorize] + public ActionResult Agendar(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); - } + var model = new EventoAgendarModel + { + Id = id, + Titulo = evento.Titulo, + Ponente = evento.Ponente != null ? evento.Ponente.Nombre : string.Empty, + Fecha = evento.Fecha, + UrlInvitacion = evento.UrlInvitacion + }; + return View(model); + } + + [HttpPost] + [Authorize] + public ActionResult Agendar(EventoAgendarModel 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) + { + this.AddNotification("evento agendado"); + return RedirectToAction("Index"); + } + ModelState.AddModelError("error", r.ToString()); + } + return View(model); + } + + [Authorize] + public ActionResult Proponer() + { + return View(new PropuestaNewModel()); + } - 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); - } - } + [HttpPost] + [Authorize] + public ActionResult Proponer(PropuestaNewModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + var r = agenda.Proponer(model.Titulo, model.Ponente, model.UrlInvitacion, (TipoEvento)model.Tipo); + if (r.Succeful) + return RedirectToAction("Index"); + ModelState.AddModelError("error", r.ToString()); + } + return View(model); + } + + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,30 @@ +using System.Linq; +using System.Web.Mvc; +using AltNetHispano.Agendas.Factories; +using AltNetHispano.Agendas.Web.Models; + +namespace AltNetHispano.Agendas.Web.Controllers +{ + public class HistoricoController : Controller + { + public ActionResult Index() + { + var agenda = AgendaFactory.GetAgenda(); + + var model = new HistoricoIndexModel + { + Items = from e in agenda.GetHistorico() + orderby e.Fecha + select new HistoricoDto + { + Id = e.Id.ToString(), + Titulo = e.Titulo, + Fecha = e.Fecha.HasValue ? e.Fecha.Value.ToShortDateString() : string.Empty, + Wiki = e.UrlWiki, + Ponente = e.Ponente.Nombre + } + }; + return View(model); + } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Fri Jun 24 21:19:42 2011 -0300 @@ -58,20 +58,18 @@ var url = Request.Url.Scheme + "://" + Request.Url.Host + (Request.Url.Port != 80 ? ":" + Request.Url.Port : string.Empty) + action; - Response.Redirect(oAuth.AuthorizationLinkGet(url).ToString()); + return Redirect(oAuth.AuthorizationLinkGet(url).ToString()); } - else + + var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); + if (response.Length > 0) { - var response = oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]); - if (response.Length > 0) - { - var username =OAuthTwitter.GetResponseContent(response, "screen_name"); + var username = OAuthTwitter.GetResponseContent(response, "screen_name"); - var personaService = AgendaFactory.GetPersonaService(); + var personaService = AgendaFactory.GetPersonaService(); - personaService.AddCuenta(IdentityProviderEnum.Twitter, username); - return RedirectToAction("Index"); - } + personaService.AddCuenta(IdentityProviderEnum.Twitter, username); + return RedirectToAction("Index"); } return RedirectToAction("Index"); }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -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 PropuestaController : Controller - { - public ActionResult Index() - { - var agenda = AgendaFactory.GetAgenda(); - - var model = new PropuestaIndexModel - { - Propuestas = from e in agenda.GetEventosPropuestos() - select - new PropuestaDto - { - Id = e.Id.ToString(), - Titulo = e.Titulo, - Ponente = e.Ponente != null ? e.Ponente.Nombre : string.Empty - } - }; - - return View(model); - } - - [Authorize] - public ActionResult New() - { - return View(new PropuestaNewModel()); - } - - [HttpPost] - [Authorize] - public ActionResult New(PropuestaNewModel model) - { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.Proponer(model.Titulo, model.Ponente, 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 propuesta = agenda.GetEvento(new Guid(id)); - - var model = new PropuestaEditModel - { - Id = id, - Titulo = propuesta.Titulo, - Ponente = propuesta.Ponente != null ? propuesta.Ponente.Nombre : string.Empty, - UrlInvitacion = propuesta.UrlInvitacion - }; - return View(model); - } - - [HttpPost] - [Authorize] - public ActionResult Edit(PropuestaEditModel model) - { - if (ModelState.IsValid) - { - var agenda = AgendaFactory.GetAgenda(); - - var r = agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente, model.UrlInvitacion); - if (r.Succeful) - return RedirectToAction("Index"); - ModelState.AddModelError("error", r.ToString()); - } - return View(model); - } - } -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Jun 24 21:19:42 2011 -0300 @@ -7,64 +7,87 @@ namespace AltNetHispano.Agendas.Web.Models { public class EventoIndexModel - { - public IEnumerable<EventoDto> ProximosEventos { get; set; } - } + { + public IEnumerable<EventoDto> ProximosEventos { get; set; } + } - public class EventoNewModel - { - public EventoNewModel() - { - Tipos = EventoModelHelper.GetTiposEventos(); - } + public class EventoNewModel + { + public EventoNewModel() + { + Tipos = EventoModelHelper.GetTiposEventos(); + } - [Required] - public int Tipo { get; set; } + [Required] + public int Tipo { get; set; } + + [Required] + public string Titulo { get; set; } + + [Required] + public string Ponente { get; set; } - [Required] - public string Titulo { get; set; } + [Required] + public DateTime Fecha { get; set; } - [Required] - public string Ponente { get; set; } + [Url] + public string UrlInvitacion { get; set; } + + public IEnumerable<TipoEventoModel> Tipos { get; private set; } + } - [Required] - public DateTime Fecha { get; set; } + public class TipoEventoModel + { + public int TipoEvento { get; set; } + public string TipoEventoStr { get; set; } + } - [Url] - public string UrlInvitacion { get; set; } - - public IEnumerable<TipoEventoModel> Tipos { get; private set; } - } + public class EventoEditModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } - public class TipoEventoModel - { - public int TipoEvento { get; set; } - public string TipoEventoStr { get; set; } - } + [Required] + public string Titulo { get; set; } + + [Required] + public string Ponente { 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; } + public class EventoAgendarModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } + + [Required] + public string Titulo { get; set; } - [Required] - public string Ponente { get; set; } + [Required] + public string Ponente { get; set; } - [Required] - public DateTime? Fecha { get; set; } + [Required] + public DateTime? Fecha { get; set; } + + [Url] + public string UrlInvitacion { get; set; } + } - [Url] - public string UrlInvitacion { get; set; } - } - + public class EventoDto + { + public string Id { get; set; } + public string Titulo { get; set; } + public string Estado { get; set; } + public string Fecha { get; set; } - public class EventoDto - { - public string Id { get; set; } - public string Titulo { get; set; } - public DateTime Fecha { get; set; } - } + public bool PuedeAgendar { get; set; } + public bool PuedeModificar { get; set; } + public bool PuedeConfirmar { get; set; } + public bool PuedePublicar { 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/HistoricoModel.cs Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +namespace AltNetHispano.Agendas.Web.Models +{ + public class HistoricoIndexModel + { + public IEnumerable<HistoricoDto> Items { get; set; } + } + + public class HistoricoDto + { + public string Id { get; set; } + public string Titulo { get; set; } + public string Fecha { get; set; } + public string Wiki { get; set; } + public string Ponente { get; set; } + } + +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Fri Jun 24 21:19:42 2011 -0300 @@ -5,51 +5,24 @@ namespace AltNetHispano.Agendas.Web.Models { - public class PropuestaIndexModel - { - public IEnumerable<PropuestaDto> Propuestas { get; set; } - } + public class PropuestaNewModel + { + public PropuestaNewModel() + { + Tipos = EventoModelHelper.GetTiposEventos(); + } - public class PropuestaNewModel - { - public PropuestaNewModel() - { - Tipos = EventoModelHelper.GetTiposEventos(); - } - - [Required] - public int Tipo { get; set; } - - [Required] - public string Titulo { get; set; } - - public string Ponente { get; set; } - - [Url] - public string UrlInvitacion { get; set; } + [Required] + public int Tipo { 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; } - - [Required] - public string Titulo { get; set; } - - public string Ponente { 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 IEnumerable<TipoEventoModel> Tipos { get; private set; } + } } \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Agendar.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,28 @@ +@model AltNetHispano.Agendas.Web.Models.EventoAgendarModel +<h2>Agenda</h2> +<p> + Modifique los datos que desea corregir y presione guardar +</p> + +<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> +<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> + +<script type="text/javascript"> + $(document).ready(function () { + $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); + }); +</script> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos del evento:</legend> + @Html.EditorForModel() + <p> + <input type="submit" value="Guardar" /> + </p> + </fieldset> + </div> +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -@model AltNetHispano.Agendas.Web.Models.EventoEditModel -<h2>Agenda</h2> -<p> - Modifique los datos que desea corregir y presione guardar -</p> - -<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> -<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> - -<script type="text/javascript"> - $(document).ready(function () { - $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); - }); -</script> - -@using (Html.BeginForm()) -{ - @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") - <div> - <fieldset> - <legend>Datos del evento:</legend> - @Html.EditorForModel() - <p> - <input type="submit" value="Guardar" /> - </p> - </fieldset> - </div> -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Index.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -8,6 +8,7 @@ <tr> <th>Fecha</th> <th>Evento</th> + <th>Estado</th> <th>Acciones</th> </tr> </thead> @@ -15,11 +16,26 @@ @foreach (var item in Model.ProximosEventos) { <tr> - <td>@item.Fecha.ToShortDateString()</td> + <td>@item.Fecha</td> <td>@item.Titulo</td> + <td>@item.Estado</td> <td> - @Html.ActionLink("Modificar", "Edit", new { id = item.Id }) - @Html.ActionLink("Confirmar", "Confirm", new { id = item.Id }) + @if (item.PuedeAgendar) + { + @Html.ActionLink("Agendar", "Agendar", "Evento", new { id = item.Id }, null) + } + @if (item.PuedeModificar) + { + @Html.ActionLink("Modificar", "Modificar", new { id = item.Id }) + } + @if (item.PuedeConfirmar) + { + @Html.ActionLink("Confirmar", "Confirmar", new { id = item.Id }) + } + @if (item.PuedePublicar) + { + @Html.ActionLink("Publicar", "Publicar", new { id = item.Id }) + } </td> </tr> } @@ -27,5 +43,6 @@ </table> <p> -@Html.ActionLink("Nuevo", "New") +@Html.ActionLink("Nuevo", "Nuevo") +@Html.ActionLink("Proponer", "Proponer") </p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Modificar.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,28 @@ +@model AltNetHispano.Agendas.Web.Models.EventoEditModel +<h2>Agenda</h2> +<p> + Modifique los datos que desea corregir y presione guardar +</p> + +<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> +<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> + +<script type="text/javascript"> + $(document).ready(function () { + $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); + }); +</script> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos del evento:</legend> + @Html.EditorForModel() + <p> + <input type="submit" value="Guardar" /> + </p> + </fieldset> + </div> +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/New.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -@model AltNetHispano.Agendas.Web.Models.EventoNewModel -<h2>Agenda</h2> -<p> - Complete los siguiente datos para agendar un nuevo evento -</p> - -<link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" /> -<script src="@Url.Content("~/Scripts/jquery-ui.js")" type="text/javascript"></script> - -<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> -<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> - -<script type="text/javascript"> - $(document).ready(function () { - $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); - }); -</script> - -@using (Html.BeginForm()) -{ - @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") - <div> - <fieldset> - <legend>Datos del evento:</legend> - - <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> - </fieldset> - </div> -} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Nuevo.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,71 @@ +@model AltNetHispano.Agendas.Web.Models.EventoNewModel +<h2>Agenda</h2> +<p> + Complete los siguiente datos para agendar un nuevo evento +</p> + +<link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" /> +<script src="@Url.Content("~/Scripts/jquery-ui.js")" type="text/javascript"></script> + +<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> +<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> + +<script type="text/javascript"> + $(document).ready(function () { + $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); + }); +</script> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos del evento:</legend> + + <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> + </fieldset> + </div> +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Proponer.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,54 @@ +@model AltNetHispano.Agendas.Web.Models.PropuestaNewModel +<h2>Agenda</h2> +<p> + Complete los siguiente datos para proponer un nuevo tema +</p> + +<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> +<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos de la propuesta:</legend> + + <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> + </fieldset> + </div> +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Historico/Index.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,26 @@ +@model AltNetHispano.Agendas.Web.Models.HistoricoIndexModel +<h2>Histórico</h2> +<p> + Eventos ya realizados: +</p> +<table> + <thead> + <tr> + <th>Fecha</th> + <th>Evento</th> + <th>Ponente</th> + <th>Wiki</th> + </tr> + </thead> + <tbody> + @foreach (var item in Model.Items) + { + <tr> + <td>@item.Fecha</td> + <td>@item.Titulo</td> + <td>@item.Ponente</td> + <td>@item.Wiki</td> + </tr> + } + </tbody> +</table> \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Perfil/Index.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Perfil/Index.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -28,5 +28,7 @@ <p> @Html.ActionLink("Asociar cuenta de Twitter", "AddTwitterAccount") <br/> -@Html.ActionLink("Asociar cuenta interna", "AddBuiltInAccount") +@Html.ActionLink("Asociar cuenta de interna", "AddBuiltInAccount") +<br/> +@Html.ActionLink("Crear cuenta interna asociada", "Register", "Account", new { returnUrl = Url.Action("Index") }, null) </p>
--- a/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Edit.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -@model AltNetHispano.Agendas.Web.Models.PropuestaEditModel -<h2>Propuestas</h2> -<p> - Modifique los datos que desea corregir y presione guardar -</p> - -<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> -<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> - -@using (Html.BeginForm()) -{ - @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") - <div> - <fieldset> - <legend>Datos de la propuesta:</legend> - @Html.EditorForModel() - <p> - <input type="submit" value="Guardar" /> - </p> - </fieldset> - </div> -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -@model AltNetHispano.Agendas.Web.Models.PropuestaIndexModel -<h2>Propuestas</h2> -<p> - Temas propuestos aun no agendados -</p> -<table> - <thead> - <tr> - <th>Propuesta</th> - <th>Ponente</th> - <th>Acciones</th> - </tr> - </thead> - <tbody> - @foreach (var item in Model.Propuestas) - { - <tr> - <td>@item.Titulo</td> - <td>@item.Ponente</td> - <td> - @Html.ActionLink("Modificar", "Edit", new { id = item.Id }) - @Html.ActionLink("Agendar", "Edit", "Evento", new { id = item.Id }, null) - </td> - </tr> - } - </tbody> -</table> - -<p> -@Html.ActionLink("Nueva", "New") -</p>
--- a/Agendas/trunk/src/Agendas.Web/Views/Propuesta/New.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -@model AltNetHispano.Agendas.Web.Models.PropuestaNewModel -<h2>Agenda</h2> -<p> - Complete los siguiente datos para proponer un nuevo tema -</p> - -<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> -<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> - -@using (Html.BeginForm()) -{ - @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") - <div> - <fieldset> - <legend>Datos de la propuesta:</legend> - - <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> - </fieldset> - </div> -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Views/Shared/_Layout.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/_Layout.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -3,10 +3,19 @@ <head> <title>Gestión de VANs</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> + <link href="@Url.Content("~/Content/AltNetHispanoVans.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> <link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-ui.js")" type="text/javascript"></script> + + <script type="text/javascript"> + $(document).ready(function () { + $(".errorbox").addClass("ui-state-error ui-corner-all"); + $(".warningbox").addClass("ui-state-highlight ui-corner-all"); + $(".notificationbox").addClass("ui-corner-all"); + }); + </script> </head> <body> @@ -26,6 +35,7 @@ </div> <div id="main"> + @Html.Partial("_Messages") <div class="logo"> <img alt="logo" src="@Url.Content("~/Content/altnetlogo.png")" /> </div>
--- a/Agendas/trunk/src/Agendas.Web/Views/Shared/_Menu.cshtml Fri Jun 24 21:18:21 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/_Menu.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -1,8 +1,7 @@ <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> - <li>@Html.ActionLink("Propuestas", "Index", "Propuesta")</li> <li>@Html.ActionLink("Eventos", "Index", "Evento")</li> - <li>@Html.ActionLink("Histórico", "Index", "Histórico")</li> + <li>@Html.ActionLink("Histórico", "Index", "Historico")</li> @if (Request.IsAuthenticated) { <li>@Html.ActionLink("Perfil", "Index", "Perfil")</li>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/_Messages.cshtml Fri Jun 24 21:19:42 2011 -0300 @@ -0,0 +1,12 @@ +@if (TempData.ContainsKey("error")) +{ + <div class="errorbox"><label>@TempData["error"]</label></div> +} +@if (TempData.ContainsKey("warning")) +{ + <div class="warningbox"><label>@TempData["warning"]</label></div> +} +@if (TempData.ContainsKey("notification")) +{ + <div class="notificationbox"><label>@TempData["notification"]</label></div> +} \ No newline at end of file